diff --git a/.changeset/config.json b/.changeset/config.json index 3eca77bb6..0959bd889 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -1,11 +1,16 @@ { - "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", - "changelog": ["@svitejs/changesets-changelog-github-compact", { "repo": "hey-api/openapi-ts" }], - "commit": false, - "fixed": [], - "linked": [], - "access": "public", - "baseBranch": "main", - "updateInternalDependencies": "patch", - "ignore": [] + "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", + "access": "public", + "baseBranch": "main", + "changelog": [ + "@changesets/changelog-github", + { + "repo": "hey-api/openapi-ts" + } + ], + "commit": false, + "fixed": [], + "ignore": [], + "linked": [], + "updateInternalDependencies": "patch" } diff --git a/.changeset/rich-grapes-matter.md b/.changeset/rich-grapes-matter.md deleted file mode 100644 index 180699436..000000000 --- a/.changeset/rich-grapes-matter.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@hey-api/client-fetch': patch ---- - -fix: export Client interface diff --git a/README.md b/README.md index 8ef2b3667..078ea19b4 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Generate TypeScript interfaces, REST clients, and JSON Schemas from OpenAPI spec ## Features -- works with CLI, Node.js, or npx +- works with CLI, Node.js 18+, or npx - supports OpenAPI 2.0, 3.0, and 3.1 specifications - supports both JSON and YAML input files - generates TypeScript interfaces, REST clients, and JSON Schemas diff --git a/docs/.vitepress/config/en.ts b/docs/.vitepress/config/en.ts index dea4f97a9..953dd618b 100644 --- a/docs/.vitepress/config/en.ts +++ b/docs/.vitepress/config/en.ts @@ -10,8 +10,20 @@ export default defineConfig({ items: [ { link: '/openapi-ts/get-started', text: 'Get Started' }, { link: '/openapi-ts/configuration', text: 'Configuration' }, + ], + text: '@hey-api/openapi-ts', + }, + { + items: [ + { link: '/openapi-ts/output', text: 'Output' }, { link: '/openapi-ts/clients', text: 'Clients' }, { link: '/openapi-ts/interceptors', text: 'Interceptors' }, + { link: '/openapi-ts/migrating', text: 'Migrating' }, + ], + text: 'Guides and Concepts', + }, + { + items: [ { link: '/openapi-ts/integrations', text: 'Integrations soon', @@ -20,9 +32,8 @@ export default defineConfig({ link: '/openapi-ts/tanstack-query', text: 'TanStack Query soon', }, - { link: '/openapi-ts/migrating', text: 'Migrating' }, ], - text: 'openapi-ts', + text: 'Plugins', }, { items: [ diff --git a/docs/.vitepress/config/shared.ts b/docs/.vitepress/config/shared.ts index 83e02bbec..202e522d9 100644 --- a/docs/.vitepress/config/shared.ts +++ b/docs/.vitepress/config/shared.ts @@ -1,4 +1,4 @@ -import { defineConfig } from 'vitepress'; +import { defineConfig, type HeadConfig } from 'vitepress'; export default defineConfig({ head: [ @@ -25,7 +25,7 @@ export default defineConfig({ 'script', { defer: '', src: '/_vercel/insights/script.js' }, ], - ].filter(Boolean), + ].filter(Boolean) as HeadConfig[], lastUpdated: false, sitemap: { hostname: 'https://heyapi.vercel.app', diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index f26ca2536..3ec3f05d4 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,11 @@ # @hey-api/docs +## 0.5.7 + +### Patch Changes + +- [#632](https://github.com/hey-api/openapi-ts/pull/632) [`9c16bc7`](https://github.com/hey-api/openapi-ts/commit/9c16bc71cde48c0cb700b7e720a9e2ad56ec5f02) Thanks [@mrlubos](https://github.com/mrlubos)! - docs: add output page + ## 0.5.6 ### Patch Changes diff --git a/docs/about.md b/docs/about.md index b7b7e45e6..2b1ed4d1a 100644 --- a/docs/about.md +++ b/docs/about.md @@ -3,9 +3,9 @@ title: Philosophy description: Hello from Hey API. --- -# About Hey API +# About -Hey API's objective is to provide a set of TypeScript tools to manage API interactions. Whether you're building a front-end application, API-to-API service, or micro-frontends, we want Hey API to be your go-to resource. +Hey API's objective is to provide a suite of TypeScript tools to manage API interactions. Whether you're building a front-end application, API-to-API service, or micro-frontends, we want Hey API to be your go-to resource. Typically, developers of such applications want to: diff --git a/docs/embed.ts b/docs/embed.ts index c4125bcc0..a05a3d391 100644 --- a/docs/embed.ts +++ b/docs/embed.ts @@ -1,5 +1,7 @@ import sdk from '@stackblitz/sdk'; +// https://api.npmjs.org/versions/@hey-api%2Fopenapi-ts/last-week + export const embedProject = (projectId: string) => async (event: Event) => { const container = document.createElement('div'); diff --git a/docs/examples.md b/docs/examples.md new file mode 100644 index 000000000..70754bf7d --- /dev/null +++ b/docs/examples.md @@ -0,0 +1,3 @@ +## Examples + +You can view live examples on [StackBlitz](https://stackblitz.com/orgs/github/hey-api/collections/openapi-ts-examples). diff --git a/docs/index.md b/docs/index.md index 5e1c2bb8a..f9f040973 100644 --- a/docs/index.md +++ b/docs/index.md @@ -24,19 +24,17 @@ features: - icon: title: TypeScript Interfaces details: Ensure code correctness without runtime overhead. No manual maintenance required. - link: https://stackblitz.com/edit/hey-api-example?file=openapi-ts.config.ts,src%2Fclient%2Fschemas.gen.ts,src%2Fclient%2Fservices.gen.ts,src%2Fclient%2Ftypes.gen.ts - linkText: View demo + link: /openapi-ts/output + linkText: Learn more - icon: ðŸĶī title: Data Fetching - details: Typesafe data with our REST clients. Fetch, axios, angular, node, and xhr are available. - link: /openapi-ts/configuration#clients - # TODO: update link after releasing clients - # link: /openapi-ts/clients + details: Typesafe data with our REST clients. Fetch, Axios, Angular, Node, and XHR are available. + link: /openapi-ts/clients linkText: See all clients - icon: title: JSON Schemas details: Export OpenAPI schemas as JavaScript objects. JSON Schema 2020-12 supported. - link: /openapi-ts/configuration#json-schemas + link: /openapi-ts/output#json-schemas linkText: Learn more - icon: title: GitHub Integration Soon diff --git a/docs/openapi-ts/clients.md b/docs/openapi-ts/clients.md index 3d22b7ea2..55b6814b4 100644 --- a/docs/openapi-ts/clients.md +++ b/docs/openapi-ts/clients.md @@ -27,7 +27,7 @@ We all send HTTP requests in a slightly different way. Hey API doesn't force you Fetch API client is currently in beta. The interface might change before it becomes stable. We encourage you to leave feedback on [GitHub](https://github.com/hey-api/openapi-ts/issues). ::: -Start by adding `@hey-api/client-fetch` into your project's dependencies. +Start by adding `@hey-api/client-fetch` to your dependencies. ::: code-group @@ -49,7 +49,7 @@ bun add @hey-api/client-fetch ::: -Ensure you have already [installed](/openapi-ts/get-started) and configured `@hey-api/openapi-ts`. Update your configuration to use the client package. +Ensure you have already [configured](/openapi-ts/get-started) `@hey-api/openapi-ts`. Update your configuration to use the Fetch API client package. ```js{2} export default { @@ -59,11 +59,11 @@ export default { } ``` -You can now run `openapi-ts` as usual to generate the new services. +You can now run `openapi-ts` to use the new Fetch API client. 🎉 ### Configuration -You will most likely want to configure the global client instance used by services. You can do that with the `createClient()` method. Call it at the beginning of your program. +You will most likely want to configure the global client instance used by services. You can do that with the `createClient()` method. Call it at the beginning of your application. ```js import { createClient } from '@hey-api/client-fetch'; @@ -96,10 +96,26 @@ Live demo ## Legacy Clients -Before standalone client packages, clients were generated using `@hey-api/openapi-ts`. If you want to generate a legacy client that isn't published as a standalone package, you can use the `client` config option. +Before standalone client packages, clients were generated using `@hey-api/openapi-ts`. In fact, `@hey-api/openapi-ts` still generates a legacy Fetch API client by default. You can generate other legacy clients with the `client` config option. ::: code-group +```js{2} [fetch] +export default { + client: 'fetch', + input: 'path/to/openapi.json', + output: 'src/client', +} +``` + +```js{2} [axios] +export default { + client: 'axios', + input: 'path/to/openapi.json', + output: 'src/client', +} +``` + ```js{2} [angular] export default { client: 'angular', @@ -124,14 +140,27 @@ export default { } ``` +::: + The following legacy clients are available: - [angular](https://angular.io/) (using [RxJS](https://rxjs.dev/)) +- [axios](https://axios-http.com/) +- [fetch](https://developer.mozilla.org/docs/Web/API/Fetch_API) - [node](https://nodejs.org/) (using [node-fetch](https://www.npmjs.com/package/node-fetch)) - [xhr](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest) +Please be aware that legacy clients are missing some features: + +- no typesafe errors ðŸšŦ +- no access to the original request and response ðŸšŦ +- hard to configure individual requests 👎 +- inconsistent interceptors and response APIs 👎 + If you'd like a standalone package for your client, let us know by [opening an issue](https://github.com/hey-api/openapi-ts/issues). -## Examples +::: tip +You might not need a `node` client. Fetch API is [experimental](https://nodejs.org/docs/latest-v18.x/api/globals.html#fetch) in Node.js v18 and [stable](https://nodejs.org/docs/latest-v21.x/api/globals.html#fetch) in Node.js v21. We recommend upgrading to the latest Node.js version. +::: -You can view live examples on [StackBlitz](https://stackblitz.com/orgs/github/hey-api/collections/openapi-ts-examples). + diff --git a/docs/openapi-ts/configuration.md b/docs/openapi-ts/configuration.md index dd5a51080..c7f3c3a57 100644 --- a/docs/openapi-ts/configuration.md +++ b/docs/openapi-ts/configuration.md @@ -40,107 +40,116 @@ Alternatively, you can use `openapi-ts.config.js` and configure the export state ## Clients -By default, `@hey-api/openapi-ts` will generate a Fetch API client. If you want a different client, you can specify it using the `client` option. +Clients are responsible for sending the actual HTTP requests. By default, `@hey-api/openapi-ts` will generate a Fetch API client. We are moving away from generated clients toward standalone packages. This approach has many benefits over the current default. You can learn more on the [Clients](/openapi-ts/clients) page. + + + + +## Services + +Services are abstractions on top of clients and serve the same purpose. By default, `@hey-api/openapi-ts` will generate a flat service layer. Your choice to use services comes down to personal preferences and bundle size considerations. You can learn more on the [Output](/openapi-ts/output#api-services) page. + +## Enums + +By default, `@hey-api/openapi-ts` will only emit enums as types. You may want to generate runtime artifacts. A good use case is iterating through possible field values without manually typing arrays. To emit runtime enums, set `types.enums` to a valid option. ::: code-group -```js{2} [fetch] +```js{5} [disabled] export default { - client: 'fetch', input: 'path/to/openapi.json', output: 'src/client', + types: { + enums: false, + }, } ``` -```js{2} [fetch (beta)] +```js{5} [javascript] export default { - client: '@hey-api/client-fetch', input: 'path/to/openapi.json', output: 'src/client', + types: { + enums: 'javascript', + }, } ``` -```js{2} [axios] +```js{5} [typescript] export default { - client: 'axios', input: 'path/to/openapi.json', output: 'src/client', + types: { + enums: 'typescript', + }, } ``` -```js{2} [angular] +::: + +We recommend exporting enums as plain JavaScript objects. [TypeScript enums](https://www.typescriptlang.org/docs/handbook/enums.html) are not a type-level extension of JavaScript and pose [typing challenges](https://dev.to/ivanzm123/dont-use-enums-in-typescript-they-are-very-dangerous-57bh). + +## JSON Schemas + +By default, `@hey-api/openapi-ts` generates schemas from your OpenAPI specification. A great use case for schemas is client-side form input validation. If you're using OpenAPI 3.1, your [schemas](/openapi-ts/output#json-schemas) are JSON Schema compliant and can be used with other tools supporting JSON Schema. However, if you only want to validate form input, you probably don't want to include string descriptions inside your bundle. You can choose your preferred type using `schemas.type` option. + +::: code-group + +```js{5} [json] export default { - client: 'angular', input: 'path/to/openapi.json', output: 'src/client', + schemas: { + type: 'json' + }, } ``` -```js{2} [node] +```js{5} [form] export default { - client: 'node', input: 'path/to/openapi.json', output: 'src/client', + schemas: { + type: 'form' + }, } ``` -```js{2} [xhr] +```js{4} [disabled] export default { - client: 'xhr', input: 'path/to/openapi.json', output: 'src/client', + schemas: false, } ``` ::: -We support these clients: - -- [angular](https://angular.io/) (using [RxJS](https://rxjs.dev/)) -- [axios](https://axios-http.com/) -- [fetch](https://developer.mozilla.org/docs/Web/API/Fetch_API) - -We also support the legacy Node.js and XHR clients: - -- [node](https://nodejs.org/) (using [node-fetch](https://www.npmjs.com/package/node-fetch)) -- [xhr](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest) - -Optionally, you can use client packages to avoid generating a new client on every run: - -- [fetch (beta)](https://developer.mozilla.org/docs/Web/API/Fetch_API) - -::: tip -You might not need a `node` client. Fetch API is [experimental](https://nodejs.org/docs/latest-v18.x/api/globals.html#fetch) in Node.js v18 and [stable](https://nodejs.org/docs/latest-v21.x/api/globals.html#fetch) in Node.js v21. We recommend upgrading to the latest Node.js version. -::: - - - - ## Formatting -By default, `@hey-api/openapi-ts` will not automatically format your client. To enable this feature, set `output.format` to a valid formatter. +By default, `@hey-api/openapi-ts` will not automatically format your output. To enable this feature, set `output.format` to a valid formatter. ::: code-group @@ -176,11 +185,11 @@ export default { ::: -You can also prevent your client from being processed by formatters by adding your output path to the tool's ignore file (e.g. `.prettierignore`). +You can also prevent your output from being formatted by adding your output path to the formatter's ignore file. ## Linting -For performance reasons, `@hey-api/openapi-ts` does not automatically lint your client. To enable this feature, set `output.lint` to a valid linter. +By default, `@hey-api/openapi-ts` will not automatically lint your output. To enable this feature, set `output.lint` to a valid linter. ::: code-group @@ -216,83 +225,10 @@ export default { ::: -You can also prevent your client from being processed by linters by adding your output path to the tool's ignore file (e.g. `.eslintignore`). - -## Enums - -If you need to iterate through possible field values without manually typing arrays, you can export enums with - -```js{5} -export default { - input: 'path/to/openapi.json', - output: 'src/client', - types: { - enums: 'javascript', - }, -} -``` - -This will export enums as plain JavaScript objects. For example, `Foo` would become - -```js -export const Foo = { - FOO: 'foo', - BAR: 'bar', -} as const; -``` - -We discourage generating [TypeScript enums](https://www.typescriptlang.org/docs/handbook/enums.html) because they are not standard JavaScript and pose [typing challenges](https://dev.to/ivanzm123/dont-use-enums-in-typescript-they-are-very-dangerous-57bh). If you really need TypeScript enums, you can export them with - -```js{5} -export default { - input: 'path/to/openapi.json', - output: 'src/client', - types: { - enums: 'typescript', - }, -} -``` - -## JSON Schemas - -By default, `@hey-api/openapi-ts` exports schemas from your OpenAPI specification as plain JavaScript objects. A great use case for schemas is client-side form input validation. - -```ts -import { $Schema } from 'client/schemas'; - -const maxInputLength = $Schema.properties.text.maxLength; - -if (userInput.length > maxInputLength) { - throw new Error(`String length cannot exceed ${maxInputLength} characters!`); -} -``` - -If you're using OpenAPI v3.1, your schemas are JSON Schema compliant and can be used with other tools supporting JSON Schema. However, if you only want to validate form input, you don't want to include string descriptions inside your bundle. Instead, use `form` type. - -```js{5} -export default { - input: 'path/to/openapi.json', - output: 'src/client', - schemas: { - type: 'form' - }, -} -``` - -If you don't need schemas at all, you can disable them with - -```js{4} -export default { - input: 'path/to/openapi.json', - output: 'src/client', - schemas: false, -} -``` +You can also prevent your output from being linted by adding your output path to the linter's ignore file. ## Config API You can view the complete list of options in the [UserConfig](https://github.com/hey-api/openapi-ts/blob/main/packages/openapi-ts/src/types/config.ts) interface. -## Examples - -You can view live examples on [StackBlitz](https://stackblitz.com/orgs/github/hey-api/collections/openapi-ts-examples). + diff --git a/docs/openapi-ts/get-started.md b/docs/openapi-ts/get-started.md index 95325f2cd..543264a54 100644 --- a/docs/openapi-ts/get-started.md +++ b/docs/openapi-ts/get-started.md @@ -17,7 +17,7 @@ Live demo ## Features -- works with CLI, Node.js, or npx +- works with CLI, Node.js 18+, or npx - supports OpenAPI 2.0, 3.0, and 3.1 specifications - supports both JSON and YAML input files - generates TypeScript interfaces, REST clients, and JSON Schemas @@ -31,7 +31,9 @@ The fastest way to use `@hey-api/openapi-ts` is via npx npx @hey-api/openapi-ts -i path/to/openapi.json -o src/client ``` -Congratulations on creating your first client! 🎉 +Congratulations on creating your first client! 🎉 You can learn more about the generated files on the [Output](/openapi-ts/output) page. + +While you can already make API requests with the client you've just created, you will probably want to configure it or pin a specific version. Let's start by adding `@hey-api/openapi-ts` to your dependencies. ## Installation @@ -55,15 +57,23 @@ bun add @hey-api/openapi-ts -D ::: -If you want to use `@hey-api/openapi-ts` with CLI, add a script to your `package.json` file +We recommend pinning an exact version so you can safely upgrade when you're ready. This package is in [initial development](https://semver.org/spec/v0.1.0.html#spec-item-5) and its API might change before v1. + +### CLI + +Most people run `@hey-api/openapi-ts` via CLI. To do that, add a script to your `package.json` file which will make `openapi-ts` executable through script. ```json "scripts": { - "openapi-ts": "openapi-ts" + "openapi-ts": "openapi-ts -i path/to/openapi.json -o src/client" } ``` -You can also generate your client programmatically by importing `@hey-api/openapi-ts` in a TypeScript file. +The above script can be executed by running `npm run openapi-ts` or equivalent command if you're not using npm. + +### Node.js + +You can also generate clients programmatically by importing `@hey-api/openapi-ts` in a TypeScript file. ```ts import { createClient } from '@hey-api/openapi-ts'; @@ -74,10 +84,8 @@ createClient({ }); ``` -::: warning -You need to be running Node.js v18 or newer -::: +### Configuration -## Examples +It is a good practice to extract your configuration into a separate file. Learn how to do that and discover available options on the [Configuration](/openapi-ts/configuration) page. -You can view live examples on [StackBlitz](https://stackblitz.com/orgs/github/hey-api/collections/openapi-ts-examples). + diff --git a/docs/openapi-ts/interceptors.md b/docs/openapi-ts/interceptors.md index b8728f2dc..7054a89b7 100644 --- a/docs/openapi-ts/interceptors.md +++ b/docs/openapi-ts/interceptors.md @@ -109,6 +109,4 @@ To eject, you must provide the same function that was passed to `use()`. Angular client does not currently support request interceptors. ::: -## Examples - -You can view live examples on [StackBlitz](https://stackblitz.com/orgs/github/hey-api/collections/openapi-ts-examples). + diff --git a/docs/openapi-ts/migrating.md b/docs/openapi-ts/migrating.md index 98e8d0215..408f2f8ca 100644 --- a/docs/openapi-ts/migrating.md +++ b/docs/openapi-ts/migrating.md @@ -34,11 +34,11 @@ import type { Model } from 'client/types.gen'; You don't have to update imports from `core` directory. These will be addressed in later releases. -### Deprecated `useOptions` +### Deprecated `base` -This config option is deprecated and will be removed. +This config option is deprecated and will be removed in favor of [clients](./clients). -### Deprecated `base` +### Deprecated `name` This config option is deprecated and will be removed in favor of [clients](./clients). @@ -46,9 +46,9 @@ This config option is deprecated and will be removed in favor of [clients](./cli This config option is deprecated and will be removed in favor of [clients](./clients). -### Deprecated `name` +### Deprecated `useOptions` -This config option is deprecated and will be removed in favor of [clients](./clients). +This config option is deprecated and will be removed. ## v0.46.0 diff --git a/docs/openapi-ts/output.md b/docs/openapi-ts/output.md new file mode 100644 index 000000000..a115a1548 --- /dev/null +++ b/docs/openapi-ts/output.md @@ -0,0 +1,262 @@ +--- +title: Output +description: Learn about files generated with @hey-api/openapi-ts. +--- + +# Output + +Learn about files generated with `@hey-api/openapi-ts`. + +::: tip + +Your actual output depends on your OpenAPI specification and Hey API configuration. It may contain a different number of files and their contents might differ. + +::: + +### Example + +If you use the default configuration, your [project](https://stackblitz.com/edit/hey-api-example?file=openapi-ts.config.ts,src%2Fclient%2Fschemas.gen.ts,src%2Fclient%2Fservices.gen.ts,src%2Fclient%2Ftypes.gen.ts) might look something like this. + +```md +my-app/ +├── node_modules/ +├── src/ +│ ├── client/ +│ │ ├── core/ +│ │ ├── index.ts +│ │ ├── schemas.gen.ts +│ │ ├── services.gen.ts +│ │ └── types.gen.ts +│ └── index.ts +└── package.json +``` + +Let's go through each file in the `src/client` folder and explain what it looks like, what it does, and how to use it. + +## TypeScript interfaces + +TypeScript interfaces are located in the `types.gen.ts` file. This is the only file that does not impact your bundle size and runtime performance. It will get discarded during build time, unless you configured to emit runtime [enums](/openapi-ts/configuration#enums). + +This file contains three different categories of interfaces created from your OpenAPI specification: + +- components, parameters, and enums +- operation request, response, and error data +- operation tree interface + +Depending on your OpenAPI specification and configuration, some of these categories might be missing or differ in your output (and that's okay!). + +::: code-group + +```ts [types.gen.ts] +export type Pet = { + id?: number; + name: string; +}; + +export type AddPetData = { + body: Pet; +}; + +export type AddPetResponse = Pet; + +export type $OpenApiTs = { + '/foo': { + post: { + req: AddPetData; + res: { + 200: Pet; + }; + }; + }; +}; +``` + +::: + +As you can see, everything is exported from `types.gen.ts`. You can import individual exports in your application and use them as necessary. + +## API Services + +API services are located in the `services.gen.ts` file. This file contains abstractions for sending API requests which can be called instead of using the client directly. Whether you should use API services comes down to your personal preference and bundle size considerations. You have three options to choose from. + +### Flat Services + +This is the default setting. It supports tree-shaking and can lead to reduced bundle size over duplicated client calls. The method names are generated from operation IDs. + +### Class Services + +The previous default setting. It does not support tree-shaking which will lead to increased bundle sizes, but some prefer this option for syntax reasons. The class names are generated from operation tags and method names are generated from operation IDs. + +### No Services + +If you prefer to use clients directly or do not need the service layer, this is the option for you. Type support for clients is currently limited due to popularity of other options. If you'd like to use this option and need better types, [open an issue](https://github.com/hey-api/openapi-ts/issues). + +### Configuration + +You can choose your preferred style using the `services` config option. + +::: code-group + +```js{5} [flat] +export default { + input: 'path/to/openapi.json', + output: 'src/client', + services: { + asClass: false, + }, +} +``` + +```js{5} [class] +export default { + input: 'path/to/openapi.json', + output: 'src/client', + services: { + asClass: true, + }, +} +``` + +```js{4} [none] +export default { + input: 'path/to/openapi.json', + output: 'src/client', + services: false, +} +``` + +::: + +### Output + +Below are different outputs depending on your chosen style. No services approach will not generate the `services.gen.ts` file. + +::: code-group + +```ts [flat] +import { client, type Options } from '@hey-api/client-fetch'; + +import type { AddPetData, AddPetError, AddPetResponse } from './types.gen'; + +export const addPet = (options: Options) => + (options?.client ?? client).post({ + ...options, + url: '/pet', + }); +``` + +```ts [class] +import { client, type Options } from '@hey-api/client-fetch'; + +import type { AddPetData, AddPetError, AddPetResponse } from './types.gen'; + +export class PetService { + public static addPet(options: Options) { + return (options?.client ?? client).post({ + ...options, + url: '/pet', + }); + } +} +``` + +::: + +### Usage + +This is how you'd make the same request using each approach. + +::: code-group + +```ts [flat] +import { addPet } from './client/services.gen'; + +addPet({ + body: { + name: 'Kitty', + }, +}); +``` + +```ts [class] +import { PetService } from './client/services.gen'; + +PetService.addPet({ + body: { + name: 'Kitty', + }, +}); +``` + +```ts [none] +import { client } from '@hey-api/client-fetch'; + +client.post({ + body: { + name: 'Kitty', + }, + url: '/pet', +}); +``` + +::: + +## JSON Schemas + +Schemas are located in the `schemas.gen.ts` file. This file contains runtime schemas generated from your OpenAPI specification definitions located in `#/components/schemas`. Starting with OpenAPI 3.1, these schemas are JSON Schema compliant. + +```ts +export const $Pet = { + required: ['name'], + properties: { + id: { + type: 'integer', + format: 'int64', + example: 10, + }, + name: { + type: 'string', + example: 'doggie', + }, + }, + type: 'object', +} as const; +``` + +You may want to use schemas if you want to enforce form validations that aren't possible using only types, such as maximum field length. + +```ts +import { $Schema } from './client/schemas.gen'; + +const maxInputLength = $Schema.properties.text.maxLength; + +if (userInput.length > maxInputLength) { + throw new Error(`Text length can't exceed ${maxInputLength} characters!`); +} +``` + +## Index + +For convenience, every generated artifact is re-exported from `index.ts`. We recommend importing types, services, and schemas from their respective files to avoid ambiguity, but you can also use the index file. + +```ts +import type { Pet } from './client/types.gen'; +// or +import type { Pet } from './client'; +``` + +## Core + +Client core files are located in the `core` folder. This folder will include different files depending on which client you're using. If you're using standalone packages, this folder will not be generated at all. + +For legacy clients, the [`OpenAPI`](https://github.com/hey-api/openapi-ts/blob/main/packages/openapi-ts/src/templates/core/OpenAPI.hbs#L68-L84) configuration object will be most likely of interest. You can change its properties to set authorization tokens, base URL, and more. + +```ts +import { OpenAPI } from './client/core/OpenAPI'; +``` + +## Plugins + +Different plugins may emit their own artifacts. These will be documented in their respective pages. + + diff --git a/docs/package.json b/docs/package.json index 4d51eb286..5eefac92d 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,6 +1,6 @@ { "name": "@hey-api/docs", - "version": "0.5.6", + "version": "0.5.7", "description": "Documentation for OpenaAPI TypeScript.", "private": true, "type": "module", diff --git a/examples/openapi-ts-axios/package.json b/examples/openapi-ts-axios/package.json index 59857ce94..c23fdef0b 100644 --- a/examples/openapi-ts-axios/package.json +++ b/examples/openapi-ts-axios/package.json @@ -13,17 +13,17 @@ }, "dependencies": { "@hey-api/client-axios": "workspace:*", - "axios": "1.7.1", + "axios": "1.7.2", "react": "18.3.1", "react-dom": "18.3.1" }, "devDependencies": { "@hey-api/openapi-ts": "workspace:*", - "@types/react": "18.3.2", + "@types/react": "18.3.3", "@types/react-dom": "18.3.0", "@typescript-eslint/eslint-plugin": "7.10.0", "@typescript-eslint/parser": "7.10.0", - "@vitejs/plugin-react": "4.2.1", + "@vitejs/plugin-react": "4.3.0", "eslint": "9.3.0", "eslint-plugin-react-hooks": "4.6.2", "eslint-plugin-react-refresh": "0.4.7", diff --git a/examples/openapi-ts-fetch/CHANGELOG.md b/examples/openapi-ts-fetch/CHANGELOG.md index 7ba669a01..d97618e49 100644 --- a/examples/openapi-ts-fetch/CHANGELOG.md +++ b/examples/openapi-ts-fetch/CHANGELOG.md @@ -1,5 +1,26 @@ # @example/openapi-ts-fetch +## 0.0.4 + +### Patch Changes + +- Updated dependencies [[`820002f`](https://github.com/hey-api/openapi-ts/commit/820002ffe687b01c7a9b2250e19ddbafd1aaed71)]: + - @hey-api/client-fetch@0.1.3 + +## 0.0.3 + +### Patch Changes + +- Updated dependencies [[`735561c82dbe0979f2c175d274159c20ba8e622d`](https://github.com/hey-api/openapi-ts/commit/735561c82dbe0979f2c175d274159c20ba8e622d)]: + - @hey-api/client-fetch@0.1.2 + +## 0.0.2 + +### Patch Changes + +- Updated dependencies [[`616a4ea0265e09f3997ac2156c341a5cc0b49029`](https://github.com/hey-api/openapi-ts/commit/616a4ea0265e09f3997ac2156c341a5cc0b49029)]: + - @hey-api/client-fetch@0.1.1 + ## 0.0.1 ### Patch Changes diff --git a/examples/openapi-ts-fetch/package.json b/examples/openapi-ts-fetch/package.json index cc6b5841b..9d67f421f 100644 --- a/examples/openapi-ts-fetch/package.json +++ b/examples/openapi-ts-fetch/package.json @@ -1,7 +1,7 @@ { "name": "@example/openapi-ts-fetch", "private": true, - "version": "0.0.1", + "version": "0.0.4", "type": "module", "scripts": { "build": "tsc && vite build", @@ -21,11 +21,11 @@ }, "devDependencies": { "@hey-api/openapi-ts": "workspace:*", - "@types/react": "18.3.2", + "@types/react": "18.3.3", "@types/react-dom": "18.3.0", "@typescript-eslint/eslint-plugin": "7.10.0", "@typescript-eslint/parser": "7.10.0", - "@vitejs/plugin-react": "4.2.1", + "@vitejs/plugin-react": "4.3.0", "autoprefixer": "10.4.19", "eslint": "9.3.0", "eslint-plugin-react-hooks": "4.6.2", diff --git a/examples/openapi-ts-fetch/src/client/types.gen.ts b/examples/openapi-ts-fetch/src/client/types.gen.ts index 93890a491..6d6ff6e13 100644 --- a/examples/openapi-ts-fetch/src/client/types.gen.ts +++ b/examples/openapi-ts-fetch/src/client/types.gen.ts @@ -177,7 +177,7 @@ export type UpdatePetWithFormData = { export type DeletePetData = { headers?: { - apiKey?: string; + api_key?: string; }; path: { /** @@ -258,7 +258,7 @@ export type CreateUsersWithListInputData = { body?: Array; }; -export type CreateUsersWithListInputResponse = User | unknown; +export type CreateUsersWithListInputResponse = User; export type CreateUsersWithListInputError = unknown; @@ -330,11 +330,11 @@ export type $OpenApiTs = { /** * Successful operation */ - 200: Pet; + '200': Pet; /** * Invalid input */ - 405: unknown; + '405': unknown; }; }; put: { @@ -343,19 +343,19 @@ export type $OpenApiTs = { /** * Successful operation */ - 200: Pet; + '200': Pet; /** * Invalid ID supplied */ - 400: unknown; + '400': unknown; /** * Pet not found */ - 404: unknown; + '404': unknown; /** * Validation exception */ - 405: unknown; + '405': unknown; }; }; }; @@ -366,11 +366,11 @@ export type $OpenApiTs = { /** * successful operation */ - 200: Array; + '200': Array; /** * Invalid status value */ - 400: unknown; + '400': unknown; }; }; }; @@ -381,11 +381,11 @@ export type $OpenApiTs = { /** * successful operation */ - 200: Array; + '200': Array; /** * Invalid tag value */ - 400: unknown; + '400': unknown; }; }; }; @@ -396,15 +396,15 @@ export type $OpenApiTs = { /** * successful operation */ - 200: Pet; + '200': Pet; /** * Invalid ID supplied */ - 400: unknown; + '400': unknown; /** * Pet not found */ - 404: unknown; + '404': unknown; }; }; post: { @@ -413,7 +413,7 @@ export type $OpenApiTs = { /** * Invalid input */ - 405: unknown; + '405': unknown; }; }; delete: { @@ -422,7 +422,7 @@ export type $OpenApiTs = { /** * Invalid pet value */ - 400: unknown; + '400': unknown; }; }; }; @@ -433,7 +433,7 @@ export type $OpenApiTs = { /** * successful operation */ - 200: ApiResponse; + '200': ApiResponse; }; }; }; @@ -443,7 +443,7 @@ export type $OpenApiTs = { /** * successful operation */ - 200: { + '200': { [key: string]: number; }; }; @@ -456,11 +456,11 @@ export type $OpenApiTs = { /** * successful operation */ - 200: Order; + '200': Order; /** * Invalid input */ - 405: unknown; + '405': unknown; }; }; }; @@ -471,15 +471,15 @@ export type $OpenApiTs = { /** * successful operation */ - 200: Order; + '200': Order; /** * Invalid ID supplied */ - 400: unknown; + '400': unknown; /** * Order not found */ - 404: unknown; + '404': unknown; }; }; delete: { @@ -488,11 +488,11 @@ export type $OpenApiTs = { /** * Invalid ID supplied */ - 400: unknown; + '400': unknown; /** * Order not found */ - 404: unknown; + '404': unknown; }; }; }; @@ -514,7 +514,7 @@ export type $OpenApiTs = { /** * Successful operation */ - 200: User; + '200': User; /** * successful operation */ @@ -529,11 +529,11 @@ export type $OpenApiTs = { /** * successful operation */ - 200: string; + '200': string; /** * Invalid username/password supplied */ - 400: unknown; + '400': unknown; }; }; }; @@ -554,15 +554,15 @@ export type $OpenApiTs = { /** * successful operation */ - 200: User; + '200': User; /** * Invalid username supplied */ - 400: unknown; + '400': unknown; /** * User not found */ - 404: unknown; + '404': unknown; }; }; put: { @@ -580,11 +580,11 @@ export type $OpenApiTs = { /** * Invalid username supplied */ - 400: unknown; + '400': unknown; /** * User not found */ - 404: unknown; + '404': unknown; }; }; }; diff --git a/package.json b/package.json index e9ebe48e3..da3a29a8f 100644 --- a/package.json +++ b/package.json @@ -34,11 +34,11 @@ "node": "^18.0.0 || >=20.0.0" }, "devDependencies": { + "@changesets/changelog-github": "0.5.0", "@changesets/cli": "2.27.3", - "@rollup/plugin-commonjs": "25.0.7", + "@rollup/plugin-commonjs": "25.0.8", "@rollup/plugin-terser": "0.4.4", "@rollup/plugin-typescript": "11.1.6", - "@svitejs/changesets-changelog-github-compact": "1.1.0", "@types/node": "20.12.12", "@vitest/coverage-v8": "1.6.0", "eslint": "9.3.0", @@ -47,10 +47,10 @@ "eslint-plugin-sort-keys-fix": "1.1.2", "globals": "15.3.0", "husky": "9.0.11", - "lint-staged": "15.2.2", + "lint-staged": "15.2.5", "prettier": "3.2.5", "rimraf": "5.0.7", - "rollup": "4.17.2", + "rollup": "4.18.0", "rollup-plugin-dts": "6.1.1", "typescript": "5.4.5", "typescript-eslint": "7.10.0", diff --git a/packages/client-axios/package.json b/packages/client-axios/package.json index df94ff19e..d3b6ab133 100644 --- a/packages/client-axios/package.json +++ b/packages/client-axios/package.json @@ -67,6 +67,6 @@ "axios": ">= 1.0.0 < 2" }, "devDependencies": { - "axios": "1.7.1" + "axios": "1.7.2" } } diff --git a/packages/client-core/src/types.ts b/packages/client-core/src/types.ts index d8f2892b5..be77f2a96 100644 --- a/packages/client-core/src/types.ts +++ b/packages/client-core/src/types.ts @@ -9,7 +9,7 @@ export type ApiResult = { export type ApiRequestOptions = { readonly body?: any; readonly cookies?: Record; - readonly errors?: Record; + readonly errors?: Record; readonly formData?: Record; readonly headers?: Record; readonly mediaType?: string; diff --git a/packages/client-fetch/CHANGELOG.md b/packages/client-fetch/CHANGELOG.md index 5d63988c1..da432f0ad 100644 --- a/packages/client-fetch/CHANGELOG.md +++ b/packages/client-fetch/CHANGELOG.md @@ -1,5 +1,23 @@ # @hey-api/client-fetch +## 0.1.3 + +### Patch Changes + +- [#639](https://github.com/hey-api/openapi-ts/pull/639) [`820002f`](https://github.com/hey-api/openapi-ts/commit/820002ffe687b01c7a9b2250e19ddbafd1aaed71) Thanks [@mrlubos](https://github.com/mrlubos)! - fix: do not widen body type on optional prop + +## 0.1.2 + +### Patch Changes + +- fix: JSON stringify object headers ([#616](https://github.com/hey-api/openapi-ts/pull/616)) + +## 0.1.1 + +### Patch Changes + +- fix: export Client interface ([#610](https://github.com/hey-api/openapi-ts/pull/610)) + ## 0.1.0 ### Minor Changes diff --git a/packages/client-fetch/package.json b/packages/client-fetch/package.json index 5f724fde5..abe89a2a8 100644 --- a/packages/client-fetch/package.json +++ b/packages/client-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@hey-api/client-fetch", - "version": "0.1.0", + "version": "0.1.3", "type": "module", "description": "Typesafe Fetch API client for your @hey-api/openapi-ts types", "homepage": "https://heyapi.vercel.app/", diff --git a/packages/client-fetch/src/types.ts b/packages/client-fetch/src/types.ts index a40ef8668..72cb406fa 100644 --- a/packages/client-fetch/src/types.ts +++ b/packages/client-fetch/src/types.ts @@ -56,6 +56,7 @@ export interface Config | (string | number | boolean)[] | null | undefined + | unknown >; /** * The request method. @@ -141,10 +142,10 @@ type OptionsBase = Omit & { client?: Client; }; -export type Options = T extends { body: any; headers: any } - ? OmitKeys & T - : T extends { body: any } - ? OmitKeys & T - : T extends { headers: any } - ? OmitKeys & T - : OptionsBase & T; +export type Options = T extends { body?: any } + ? T extends { headers?: any } + ? OmitKeys & T + : OmitKeys & T & Pick + : T extends { headers?: any } + ? OmitKeys & T & Pick + : OptionsBase & T; diff --git a/packages/client-fetch/src/utils.ts b/packages/client-fetch/src/utils.ts index 95e32c82e..bf6a1dc4a 100644 --- a/packages/client-fetch/src/utils.ts +++ b/packages/client-fetch/src/utils.ts @@ -402,7 +402,12 @@ export const mergeHeaders = ( mergedHeaders.append(key, v as string); } } else if (value !== undefined) { - mergedHeaders.set(key, value as string); + // assume object headers are meant to be JSON stringified, i.e. their + // content value in OpenAPI specification is 'application/json' + mergedHeaders.set( + key, + typeof value === 'object' ? JSON.stringify(value) : (value as string), + ); } } } diff --git a/packages/openapi-ts/CHANGELOG.md b/packages/openapi-ts/CHANGELOG.md index e20d77732..e2c5af4e0 100644 --- a/packages/openapi-ts/CHANGELOG.md +++ b/packages/openapi-ts/CHANGELOG.md @@ -1,5 +1,29 @@ # @hey-api/openapi-ts +## 0.46.3 + +### Patch Changes + +- [#594](https://github.com/hey-api/openapi-ts/pull/594) [`9878381`](https://github.com/hey-api/openapi-ts/commit/98783811e0c90705ddac2cc5e54c524aae634865) Thanks [@SimenB](https://github.com/SimenB)! - Add explicit type annotations to `Interceptors` + + This allows the generated code to work with TypeScript 5.5's new `isolatedDeclarations` configuration. + +- [#635](https://github.com/hey-api/openapi-ts/pull/635) [`0b09940`](https://github.com/hey-api/openapi-ts/commit/0b0994050dbcb6c17e8b78ca1c77738fc8e0d498) Thanks [@mrlubos](https://github.com/mrlubos)! - fix: handle 1XX response status codes + +- [#636](https://github.com/hey-api/openapi-ts/pull/636) [`498f459`](https://github.com/hey-api/openapi-ts/commit/498f45979b91bf93b319413c60492af94a08df48) Thanks [@mrlubos](https://github.com/mrlubos)! - fix: improve default response status code classification + +## 0.46.2 + +### Patch Changes + +- fix: do not transform property names for standalone clients ([#616](https://github.com/hey-api/openapi-ts/pull/616)) + +## 0.46.1 + +### Patch Changes + +- fix: handle application/json content type in parameter definitions ([#614](https://github.com/hey-api/openapi-ts/pull/614)) + ## 0.46.0 ### Minor Changes diff --git a/packages/openapi-ts/README.md b/packages/openapi-ts/README.md index 8ef2b3667..078ea19b4 100644 --- a/packages/openapi-ts/README.md +++ b/packages/openapi-ts/README.md @@ -10,7 +10,7 @@ Generate TypeScript interfaces, REST clients, and JSON Schemas from OpenAPI spec ## Features -- works with CLI, Node.js, or npx +- works with CLI, Node.js 18+, or npx - supports OpenAPI 2.0, 3.0, and 3.1 specifications - supports both JSON and YAML input files - generates TypeScript interfaces, REST clients, and JSON Schemas diff --git a/packages/openapi-ts/package.json b/packages/openapi-ts/package.json index 426c4fee8..3c9db5afe 100644 --- a/packages/openapi-ts/package.json +++ b/packages/openapi-ts/package.json @@ -1,6 +1,6 @@ { "name": "@hey-api/openapi-ts", - "version": "0.46.0", + "version": "0.46.3", "type": "module", "description": "Turn your OpenAPI specification into a beautiful TypeScript client", "homepage": "https://heyapi.vercel.app/", @@ -85,14 +85,14 @@ "@rollup/plugin-node-resolve": "15.2.3", "@types/cross-spawn": "6.0.6", "@types/express": "4.17.21", - "axios": "1.7.1", + "axios": "1.7.2", "cross-spawn": "7.0.3", "eslint": "9.3.0", "express": "4.19.2", - "glob": "10.3.15", + "glob": "10.4.1", "node-fetch": "3.3.2", "prettier": "3.2.5", - "puppeteer": "22.9.0", + "puppeteer": "22.10.0", "rxjs": "7.8.1", "ts-node": "10.9.2", "tslib": "2.6.2", diff --git a/packages/openapi-ts/src/openApi/common/interfaces/client.ts b/packages/openapi-ts/src/openApi/common/interfaces/client.ts index 0a27c01f3..e2f8a853b 100644 --- a/packages/openapi-ts/src/openApi/common/interfaces/client.ts +++ b/packages/openapi-ts/src/openApi/common/interfaces/client.ts @@ -1,3 +1,5 @@ +import type { OpenApiParameter } from '../../v3/interfaces/OpenApiParameter'; + export interface ModelComposition extends Pick { export: Extract; @@ -11,7 +13,7 @@ export interface Enum { } export interface OperationParameter extends Model { - in: 'path' | 'query' | 'header' | 'formData' | 'body' | 'cookie'; + in: 'body' | 'cookie' | 'formData' | 'header' | 'path' | 'query'; prop: string; mediaType: string | null; } @@ -27,8 +29,8 @@ export interface OperationParameters extends Pick { } export interface OperationResponse extends Model { - in: 'response' | 'header'; - code: number | 'default'; + in: 'header' | 'response'; + code: number | 'default' | '1XX' | '2XX' | '3XX' | '4XX' | '5XX'; } export type Method = @@ -53,6 +55,10 @@ export interface Operation extends OperationParameters { name: string; path: string; responseHeader: string | null; + /** + * All operation responses defined in OpenAPI specification. + * Sorted by status code. + */ results: OperationResponse[]; /** * Service name, might be without postfix. This will be used to name the @@ -130,6 +136,11 @@ export interface Model extends Schema { | 'one-of' | 'reference'; imports: string[]; + in: + | OperationParameter['in'] + | OpenApiParameter['in'] + | OperationResponse['in'] + | ''; link: Model | null; meta?: ModelMeta; /** diff --git a/packages/openapi-ts/src/openApi/common/parser/__tests__/operation.spec.ts b/packages/openapi-ts/src/openApi/common/parser/__tests__/operation.spec.ts index c55de64f8..616ab0bd5 100644 --- a/packages/openapi-ts/src/openApi/common/parser/__tests__/operation.spec.ts +++ b/packages/openapi-ts/src/openApi/common/parser/__tests__/operation.spec.ts @@ -1,11 +1,7 @@ import { describe, expect, it } from 'vitest'; import { setConfig } from '../../../../utils/config'; -import { - getOperationName, - getOperationParameterName, - getOperationResponseCode, -} from '../operation'; +import { getOperationName, parseResponseStatusCode } from '../operation'; describe('getOperationName', () => { const options1: Parameters[0] = { @@ -225,39 +221,17 @@ describe('getOperationName', () => { ); }); -describe('getOperationParameterName', () => { - it.each([ - { expected: '', input: '' }, - { expected: 'foobar', input: 'foobar' }, - { expected: 'fooBar', input: 'fooBar' }, - { expected: 'fooBar', input: 'foo_bar' }, - { expected: 'fooBar', input: 'foo-bar' }, - { expected: 'fooBar', input: 'foo.bar' }, - { expected: 'fooBar', input: '@foo.bar' }, - { expected: 'fooBar', input: '$foo.bar' }, - { expected: 'fooBar', input: '123.foo.bar' }, - { expected: 'fooBar', input: 'Foo-Bar' }, - { expected: 'fooBar', input: 'FOO-BAR' }, - { expected: 'fooBar', input: 'foo[bar]' }, - { expected: 'fooBarArray', input: 'foo.bar[]' }, - ])( - 'getOperationParameterName($input) -> $expected', - ({ input, expected }) => { - expect(getOperationParameterName(input)).toBe(expected); - }, - ); -}); - -describe('getOperationResponseCode', () => { +describe('parseResponseStatusCode', () => { it.each([ { expected: null, input: '' }, { expected: 'default', input: 'default' }, { expected: 200, input: '200' }, { expected: 300, input: '300' }, { expected: 400, input: '400' }, + { expected: '4XX', input: '4XX' }, { expected: null, input: 'abc' }, - { expected: 100, input: '-100' }, - ])('getOperationResponseCode($input) -> $expected', ({ input, expected }) => { - expect(getOperationResponseCode(input)).toBe(expected); + { expected: null, input: '-100' }, + ])('parseResponseStatusCode($input) -> $expected', ({ input, expected }) => { + expect(parseResponseStatusCode(input)).toBe(expected); }); }); diff --git a/packages/openapi-ts/src/openApi/common/parser/__tests__/type.spec.ts b/packages/openapi-ts/src/openApi/common/parser/__tests__/type.spec.ts index 4026faf3b..b21b36220 100644 --- a/packages/openapi-ts/src/openApi/common/parser/__tests__/type.spec.ts +++ b/packages/openapi-ts/src/openApi/common/parser/__tests__/type.spec.ts @@ -1,7 +1,8 @@ -import { describe, expect, it, vi } from 'vitest'; +import { describe, expect, it, type MockedFunction, vi } from 'vitest'; import type { Config } from '../../../../types/config'; -import { getMappedType, getType } from '../type'; +import { isStandaloneClient } from '../../../../utils/config'; +import { getMappedType, getType, transformTypeKeyName } from '../type'; vi.mock('../../../../utils/config', () => { const config: Partial = { @@ -9,6 +10,7 @@ vi.mock('../../../../utils/config', () => { }; return { getConfig: () => config, + isStandaloneClient: vi.fn().mockReturnValue(false), }; }); @@ -140,3 +142,51 @@ describe('getType', () => { expect(type.isNullable).toEqual(true); }); }); + +describe('transformTypeKeyName', () => { + describe('legacy client', () => { + it.each([ + { expected: '', input: '' }, + { expected: 'foobar', input: 'foobar' }, + { expected: 'fooBar', input: 'fooBar' }, + { expected: 'fooBar', input: 'foo_bar' }, + { expected: 'fooBar', input: 'foo-bar' }, + { expected: 'fooBar', input: 'foo.bar' }, + { expected: 'fooBar', input: '@foo.bar' }, + { expected: 'fooBar', input: '$foo.bar' }, + { expected: 'fooBar', input: '123.foo.bar' }, + { expected: 'fooBar', input: 'Foo-Bar' }, + { expected: 'fooBar', input: 'FOO-BAR' }, + { expected: 'fooBar', input: 'foo[bar]' }, + { expected: 'fooBarArray', input: 'foo.bar[]' }, + ])('$input -> $expected', ({ input, expected }) => { + (isStandaloneClient as MockedFunction).mockImplementationOnce( + () => false, + ); + expect(transformTypeKeyName(input)).toBe(expected); + }); + }); + + describe('standalone client', () => { + it.each([ + { expected: '', input: '' }, + { expected: 'foobar', input: 'foobar' }, + { expected: 'fooBar', input: 'fooBar' }, + { expected: 'fooBar', input: 'foo_bar' }, + { expected: 'fooBar', input: 'foo-bar' }, + { expected: 'fooBar', input: 'foo.bar' }, + { expected: 'fooBar', input: '@foo.bar' }, + { expected: 'fooBar', input: '$foo.bar' }, + { expected: 'fooBar', input: '123.foo.bar' }, + { expected: 'fooBar', input: 'Foo-Bar' }, + { expected: 'fooBar', input: 'FOO-BAR' }, + { expected: 'fooBar', input: 'foo[bar]' }, + { expected: 'fooBarArray', input: 'foo.bar[]' }, + ])('$input -> $input', ({ input }) => { + (isStandaloneClient as MockedFunction).mockImplementationOnce( + () => true, + ); + expect(transformTypeKeyName(input)).toBe(input); + }); + }); +}); diff --git a/packages/openapi-ts/src/openApi/common/parser/operation.ts b/packages/openapi-ts/src/openApi/common/parser/operation.ts index 6b4869281..8cdc0ee96 100644 --- a/packages/openapi-ts/src/openApi/common/parser/operation.ts +++ b/packages/openapi-ts/src/openApi/common/parser/operation.ts @@ -1,12 +1,17 @@ import camelCase from 'camelcase'; import { getConfig } from '../../../utils/config'; -import type { OperationResponse } from '../interfaces/client'; -import { reservedWords } from './reservedWords'; -import { - sanitizeNamespaceIdentifier, - sanitizeOperationParameterName, -} from './sanitize'; +import type { Model, OperationResponse } from '../interfaces/client'; +import { sanitizeNamespaceIdentifier } from './sanitize'; + +const areEqual = (a: Model, b: Model): boolean => { + const equal = + a.type === b.type && a.base === b.base && a.template === b.template; + if (equal && a.link && b.link) { + return areEqual(a.link, b.link); + } + return equal; +}; /** * Convert the input value to a correct operation (method) class name. @@ -32,15 +37,6 @@ export const getOperationName = ( return camelCase(`${method}-${urlWithoutPlaceholders}`); }; -/** - * Replaces any invalid characters from a parameter name. - * For example: 'filter.someProperty' becomes 'filterSomeProperty'. - */ -export const getOperationParameterName = (value: string): string => { - const clean = sanitizeOperationParameterName(value).trim(); - return camelCase(clean).replace(reservedWords, '_$1'); -}; - export const getOperationResponseHeader = ( operationResponses: OperationResponse[], ): string | null => { @@ -53,28 +49,107 @@ export const getOperationResponseHeader = ( return null; }; -export const getOperationResponseCode = ( - value: string | 'default', -): number | 'default' | null => { +/** + * Attempts to parse response status code from string into number. + * @param value string status code from OpenAPI definition + * @returns Parsed status code or null if invalid value + */ +export const parseResponseStatusCode = ( + value: string, +): OperationResponse['code'] | null => { if (value === 'default') { return 'default'; } - // Check if we can parse the code and return of successful. - if (/[0-9]+/g.test(value)) { - const code = Number.parseInt(value); - if (Number.isInteger(code)) { - return Math.abs(code); + if (value === '1XX') { + return '1XX'; + } + + if (value === '2XX') { + return '2XX'; + } + + if (value === '3XX') { + return '3XX'; + } + + if (value === '4XX') { + return '4XX'; + } + + if (value === '5XX') { + return '5XX'; + } + + if (/\d{3}/g.test(value)) { + const code = Number.parseInt(value, 10); + if (code >= 100 && code < 600) { + return code; } } return null; }; -export const getOperationErrors = ( - operationResponses: OperationResponse[], -): OperationResponse[] => - operationResponses.filter( - ({ code, description }) => - typeof code === 'number' && code >= 300 && description, +const isErrorStatusCode = (code: OperationResponse['code']) => + code === '3XX' || + code === '4XX' || + code === '5XX' || + (typeof code === 'number' && code >= 300); + +const isSuccessStatusCode = (code: OperationResponse['code']) => + code === '2XX' || (typeof code === 'number' && code >= 200 && code < 300); + +/** + * Returns only error status code responses. + */ +export const getErrorResponses = ( + responses: OperationResponse[], +): OperationResponse[] => { + const results = responses.filter( + ({ code }) => + (code === 'default' && inferDefaultResponse(responses) === 'error') || + isErrorStatusCode(code), + ); + return results; +}; + +/** + * Returns only successful status code responses. + */ +export const getSuccessResponses = ( + responses: OperationResponse[], +): OperationResponse[] => { + const results = responses.filter( + ({ code }) => + (code === 'default' && inferDefaultResponse(responses) === 'success') || + isSuccessStatusCode(code), + ); + return results.filter( + (result, index, arr) => + arr.findIndex((item) => areEqual(item, result)) === index, ); +}; + +/** + * Detects whether default response is meant to be used for errors or + * successful responses. Returns an empty string if there's no default + * response. + */ +export const inferDefaultResponse = ( + responses: OperationResponse[], +): 'error' | 'success' | '' => { + const defaultResponse = responses.find(({ code }) => code === 'default'); + if (!defaultResponse) { + return ''; + } + + const successResponses = responses.filter(({ code }) => + isSuccessStatusCode(code), + ); + if (!successResponses.length) { + return 'success'; + } + + return 'error'; +}; diff --git a/packages/openapi-ts/src/openApi/common/parser/type.ts b/packages/openapi-ts/src/openApi/common/parser/type.ts index 9d9084a97..69948ca5e 100644 --- a/packages/openapi-ts/src/openApi/common/parser/type.ts +++ b/packages/openapi-ts/src/openApi/common/parser/type.ts @@ -1,7 +1,14 @@ +import camelcase from 'camelcase'; + +import { getConfig, isStandaloneClient } from '../../../utils/config'; import { transformTypeName } from '../../../utils/transform'; import { isDefinitionTypeNullable } from '../../v3/parser/inferType'; import type { Type } from '../interfaces/Type'; -import { ensureValidTypeScriptJavaScriptIdentifier } from './sanitize'; +import { reservedWords } from './reservedWords'; +import { + ensureValidTypeScriptJavaScriptIdentifier, + sanitizeOperationParameterName, +} from './sanitize'; import { stripNamespace } from './stripNamespace'; /** @@ -145,3 +152,19 @@ export const getType = ({ return result; }; + +/** + * Replaces any invalid characters from a parameter name. + * For example: 'filter.someProperty' becomes 'filterSomeProperty'. + */ +export const transformTypeKeyName = (value: string): string => { + const config = getConfig(); + + // do not transform anything for standalone clients + if (isStandaloneClient(config)) { + return value; + } + + const clean = sanitizeOperationParameterName(value).trim(); + return camelcase(clean).replace(reservedWords, '_$1'); +}; diff --git a/packages/openapi-ts/src/openApi/v2/parser/getModel.ts b/packages/openapi-ts/src/openApi/v2/parser/getModel.ts index 4b98f53b8..58c4c32fd 100644 --- a/packages/openapi-ts/src/openApi/v2/parser/getModel.ts +++ b/packages/openapi-ts/src/openApi/v2/parser/getModel.ts @@ -31,6 +31,7 @@ export const getModel = ({ export: 'interface', format: definition.format, imports: [], + in: '', isDefinition, isNullable: definition['x-nullable'] === true, isReadOnly: definition.readOnly === true, diff --git a/packages/openapi-ts/src/openApi/v2/parser/getModelComposition.ts b/packages/openapi-ts/src/openApi/v2/parser/getModelComposition.ts index 2edd0ded0..48640cc6a 100644 --- a/packages/openapi-ts/src/openApi/v2/parser/getModelComposition.ts +++ b/packages/openapi-ts/src/openApi/v2/parser/getModelComposition.ts @@ -87,6 +87,7 @@ export const getModelComposition = ({ enums: [], export: 'interface', imports: [], + in: '', isDefinition: false, isNullable: false, isReadOnly: false, diff --git a/packages/openapi-ts/src/openApi/v2/parser/getModelProperties.ts b/packages/openapi-ts/src/openApi/v2/parser/getModelProperties.ts index 9b747b223..25f576710 100644 --- a/packages/openapi-ts/src/openApi/v2/parser/getModelProperties.ts +++ b/packages/openapi-ts/src/openApi/v2/parser/getModelProperties.ts @@ -38,6 +38,7 @@ export const getModelProperties = ({ export: 'reference', format: property.format, imports: model.imports, + in: '', isDefinition: false, isNullable: property['x-nullable'] === true, isReadOnly: property.readOnly === true, @@ -72,6 +73,7 @@ export const getModelProperties = ({ export: model.export, format: property.format, imports: model.imports, + in: '', isDefinition: false, isNullable: property['x-nullable'] === true, isReadOnly: property.readOnly === true, diff --git a/packages/openapi-ts/src/openApi/v2/parser/getOperation.ts b/packages/openapi-ts/src/openApi/v2/parser/getOperation.ts index 355c11f60..b66cef762 100644 --- a/packages/openapi-ts/src/openApi/v2/parser/getOperation.ts +++ b/packages/openapi-ts/src/openApi/v2/parser/getOperation.ts @@ -1,13 +1,13 @@ import type { Client } from '../../../types/client'; -import { getOperationResults } from '../../../utils/operation'; import type { Operation, OperationParameters, } from '../../common/interfaces/client'; import { - getOperationErrors, + getErrorResponses, getOperationName, getOperationResponseHeader, + getSuccessResponses, } from '../../common/parser/operation'; import { getServiceName } from '../../common/parser/service'; import { toSortedByRequired } from '../../common/parser/sort'; @@ -66,13 +66,28 @@ export const getOperation = ({ parameters: op.parameters, types, }); - operation.imports.push(...parameters.imports); - operation.parameters.push(...parameters.parameters); - operation.parametersPath.push(...parameters.parametersPath); - operation.parametersQuery.push(...parameters.parametersQuery); - operation.parametersForm.push(...parameters.parametersForm); - operation.parametersHeader.push(...parameters.parametersHeader); - operation.parametersCookie.push(...parameters.parametersCookie); + operation.imports = [...operation.imports, ...parameters.imports]; + operation.parameters = [...operation.parameters, ...parameters.parameters]; + operation.parametersPath = [ + ...operation.parametersPath, + ...parameters.parametersPath, + ]; + operation.parametersQuery = [ + ...operation.parametersQuery, + ...parameters.parametersQuery, + ]; + operation.parametersForm = [ + ...operation.parametersForm, + ...parameters.parametersForm, + ]; + operation.parametersHeader = [ + ...operation.parametersHeader, + ...parameters.parametersHeader, + ]; + operation.parametersCookie = [ + ...operation.parametersCookie, + ...parameters.parametersCookie, + ]; operation.parametersBody = parameters.parametersBody; } @@ -83,13 +98,14 @@ export const getOperation = ({ responses: op.responses, types, }); - const operationResults = getOperationResults(operationResponses); - operation.errors = getOperationErrors(operationResponses); - operation.responseHeader = getOperationResponseHeader(operationResults); + operation.errors = getErrorResponses(operationResponses); - operationResults.forEach((operationResult) => { - operation.results.push(operationResult); - operation.imports.push(...operationResult.imports); + const successResponses = getSuccessResponses(operationResponses); + operation.responseHeader = getOperationResponseHeader(successResponses); + + successResponses.forEach((operationResult) => { + operation.results = [...operation.results, operationResult]; + operation.imports = [...operation.imports, ...operationResult.imports]; }); } diff --git a/packages/openapi-ts/src/openApi/v2/parser/getOperationParameter.ts b/packages/openapi-ts/src/openApi/v2/parser/getOperationParameter.ts index 67d13eb50..724a6ecaf 100644 --- a/packages/openapi-ts/src/openApi/v2/parser/getOperationParameter.ts +++ b/packages/openapi-ts/src/openApi/v2/parser/getOperationParameter.ts @@ -1,11 +1,11 @@ import type { Client } from '../../../types/client'; +import { getConfig, isStandaloneClient } from '../../../utils/config'; import type { OperationParameter } from '../../common/interfaces/client'; import { getDefault } from '../../common/parser/getDefault'; import { getEnums } from '../../common/parser/getEnums'; import { getPattern } from '../../common/parser/getPattern'; import { getRef } from '../../common/parser/getRef'; -import { getOperationParameterName } from '../../common/parser/operation'; -import { getType } from '../../common/parser/type'; +import { getType, transformTypeKeyName } from '../../common/parser/type'; import type { OpenApi } from '../interfaces/OpenApi'; import type { OpenApiParameter } from '../interfaces/OpenApiParameter'; import type { OpenApiSchema } from '../interfaces/OpenApiSchema'; @@ -20,6 +20,8 @@ export const getOperationParameter = ({ parameter: OpenApiParameter; types: Client['types']; }): OperationParameter => { + const config = getConfig(); + const operationParameter: OperationParameter = { $refs: [], base: 'unknown', @@ -45,7 +47,9 @@ export const getOperationParameter = ({ minLength: parameter.minLength, minimum: parameter.minimum, multipleOf: parameter.multipleOf, - name: getOperationParameterName(parameter.name), + name: isStandaloneClient(config) + ? parameter.name + : transformTypeKeyName(parameter.name), pattern: getPattern(parameter.pattern), prop: parameter.name, properties: [], diff --git a/packages/openapi-ts/src/openApi/v2/parser/getOperationResponse.ts b/packages/openapi-ts/src/openApi/v2/parser/getOperationResponse.ts index e9b24bcb9..407975866 100644 --- a/packages/openapi-ts/src/openApi/v2/parser/getOperationResponse.ts +++ b/packages/openapi-ts/src/openApi/v2/parser/getOperationResponse.ts @@ -16,7 +16,7 @@ export const getOperationResponse = ({ }: { openApi: OpenApi; response: OpenApiResponse; - code: number | 'default'; + code: OperationResponse['code']; types: Client['types']; }): OperationResponse => { const operationResponse: OperationResponse = { @@ -40,64 +40,72 @@ export const getOperationResponse = ({ type: code !== 204 ? 'unknown' : 'void', }; - // If this response has a schema, then we need to check two things: - // if this is a reference then the parameter is just the 'name' of - // this reference type. Otherwise, it might be a complex schema, - // and then we need to parse the schema! let schema = response.schema; if (schema) { if (schema.$ref?.startsWith('#/responses/')) { schema = getRef(openApi, schema); } + if (schema.$ref) { const model = getType({ type: schema.$ref }); operationResponse.export = 'reference'; operationResponse.type = model.type; operationResponse.base = model.base; operationResponse.template = model.template; - operationResponse.imports.push(...model.imports); - return operationResponse; - } else { - const model = getModel({ definition: schema, openApi, types }); - operationResponse.export = model.export; - operationResponse.type = model.type; - operationResponse.base = model.base; - operationResponse.template = model.template; - operationResponse.link = model.link; - operationResponse.isReadOnly = model.isReadOnly; - operationResponse.isRequired = model.isRequired; - operationResponse.isNullable = model.isNullable; - operationResponse.format = model.format; - operationResponse.maximum = model.maximum; - operationResponse.exclusiveMaximum = model.exclusiveMaximum; - operationResponse.minimum = model.minimum; - operationResponse.exclusiveMinimum = model.exclusiveMinimum; - operationResponse.multipleOf = model.multipleOf; - operationResponse.maxLength = model.maxLength; - operationResponse.minLength = model.minLength; - operationResponse.maxItems = model.maxItems; - operationResponse.minItems = model.minItems; - operationResponse.uniqueItems = model.uniqueItems; - operationResponse.maxProperties = model.maxProperties; - operationResponse.minProperties = model.minProperties; - operationResponse.pattern = getPattern(model.pattern); - operationResponse.imports.push(...model.imports); - operationResponse.enum.push(...model.enum); - operationResponse.enums.push(...model.enums); - operationResponse.properties.push(...model.properties); + operationResponse.imports = [ + ...operationResponse.imports, + ...model.imports, + ]; return operationResponse; } + + const model = getModel({ definition: schema, openApi, types }); + operationResponse.export = model.export; + operationResponse.type = model.type; + operationResponse.base = model.base; + operationResponse.template = model.template; + operationResponse.link = model.link; + operationResponse.isReadOnly = model.isReadOnly; + operationResponse.isRequired = model.isRequired; + operationResponse.isNullable = model.isNullable; + operationResponse.format = model.format; + operationResponse.maximum = model.maximum; + operationResponse.exclusiveMaximum = model.exclusiveMaximum; + operationResponse.minimum = model.minimum; + operationResponse.exclusiveMinimum = model.exclusiveMinimum; + operationResponse.multipleOf = model.multipleOf; + operationResponse.maxLength = model.maxLength; + operationResponse.minLength = model.minLength; + operationResponse.maxItems = model.maxItems; + operationResponse.minItems = model.minItems; + operationResponse.uniqueItems = model.uniqueItems; + operationResponse.maxProperties = model.maxProperties; + operationResponse.minProperties = model.minProperties; + operationResponse.pattern = getPattern(model.pattern); + operationResponse.imports = [ + ...operationResponse.imports, + ...model.imports, + ]; + operationResponse.enum = [...operationResponse.enum, ...model.enum]; + operationResponse.enums = [...operationResponse.enums, ...model.enums]; + operationResponse.properties = [ + ...operationResponse.properties, + ...model.properties, + ]; + return operationResponse; } // We support basic properties from response headers, since both // fetch and XHR client just support string types. - Object.keys(response.headers ?? {}).forEach((name) => { - operationResponse.in = 'header'; - operationResponse.name = name; - operationResponse.type = 'string'; - operationResponse.base = 'string'; - return operationResponse; - }); + if (response.headers) { + for (const name in response.headers) { + operationResponse.in = 'header'; + operationResponse.name = name; + operationResponse.type = 'string'; + operationResponse.base = 'string'; + return operationResponse; + } + } return operationResponse; }; diff --git a/packages/openapi-ts/src/openApi/v2/parser/getOperationResponses.ts b/packages/openapi-ts/src/openApi/v2/parser/getOperationResponses.ts index 0b17c1690..4f56dae94 100644 --- a/packages/openapi-ts/src/openApi/v2/parser/getOperationResponses.ts +++ b/packages/openapi-ts/src/openApi/v2/parser/getOperationResponses.ts @@ -1,7 +1,7 @@ import type { Client } from '../../../types/client'; import type { OperationResponse } from '../../common/interfaces/client'; import { getRef } from '../../common/parser/getRef'; -import { getOperationResponseCode } from '../../common/parser/operation'; +import { parseResponseStatusCode } from '../../common/parser/operation'; import type { OpenApi } from '../interfaces/OpenApi'; import type { OpenApiResponse } from '../interfaces/OpenApiResponse'; import type { OpenApiResponses } from '../interfaces/OpenApiResponses'; @@ -16,23 +16,22 @@ export const getOperationResponses = ({ responses: OpenApiResponses; types: Client['types']; }): OperationResponse[] => { - const operationResponses: OperationResponse[] = []; + let operationResponses: OperationResponse[] = []; - // Iterate over each response code and get the - // status code and response message - Object.entries(responses).forEach(([code, responseOrReference]) => { - const response = getRef(openApi, responseOrReference); - const responseCode = getOperationResponseCode(code); - - if (responseCode) { - const operationResponse = getOperationResponse({ - code: responseCode, - openApi, - response, - types, - }); - operationResponses.push(operationResponse); + Object.entries(responses).forEach(([responseCode, responseOrReference]) => { + const code = parseResponseStatusCode(responseCode); + if (!code) { + return; } + + const response = getRef(openApi, responseOrReference); + const operationResponse = getOperationResponse({ + code, + openApi, + response, + types, + }); + operationResponses = [...operationResponses, operationResponse]; }); // Sort the responses to 2xx success codes come before 4xx and 5xx error codes. diff --git a/packages/openapi-ts/src/openApi/v3/interfaces/OpenApiParameter.ts b/packages/openapi-ts/src/openApi/v3/interfaces/OpenApiParameter.ts index f8b6b5222..b7ef453e0 100644 --- a/packages/openapi-ts/src/openApi/v3/interfaces/OpenApiParameter.ts +++ b/packages/openapi-ts/src/openApi/v3/interfaces/OpenApiParameter.ts @@ -3,21 +3,41 @@ import type { OpenApiExample } from './OpenApiExample'; import type { OpenApiReference } from './OpenApiReference'; import type { OpenApiSchema } from './OpenApiSchema'; +/** + * add only one type for now as that's needed to resolve the reported issue, + * more types should be added though + * {@link https://github.com/hey-api/openapi-ts/issues/612} + */ +type MediaType = 'application/json'; + +/** + * encoding interface should be added, not adding it for now as it's not needed + * to resolve the issue reported + * {@link https://github.com/hey-api/openapi-ts/issues/612} + */ +interface MediaTypeObject { + example?: unknown; + examples?: Dictionary; + schema: OpenApiSchema; + // encoding? +} + /** * {@link} https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#parameter-object */ export interface OpenApiParameter extends OpenApiReference { - name: string; - in: 'path' | 'query' | 'header' | 'formData' | 'cookie'; - description?: string; - required?: boolean; - nullable?: boolean; - deprecated?: boolean; allowEmptyValue?: boolean; - style?: string; - explode?: boolean; allowReserved?: boolean; - schema?: OpenApiSchema; + content?: Record; + deprecated?: boolean; + description?: string; example?: unknown; examples?: Dictionary; + explode?: boolean; + in: 'cookie' | 'formData' | 'header' | 'path' | 'query'; + name: string; + nullable?: boolean; + required?: boolean; + schema?: OpenApiSchema; + style?: string; } diff --git a/packages/openapi-ts/src/openApi/v3/parser/getModel.ts b/packages/openapi-ts/src/openApi/v3/parser/getModel.ts index fc4b2bd80..2e69ce6b4 100644 --- a/packages/openapi-ts/src/openApi/v3/parser/getModel.ts +++ b/packages/openapi-ts/src/openApi/v3/parser/getModel.ts @@ -55,6 +55,7 @@ export const getModel = ({ export: 'interface', format: definition.format, imports: [], + in: '', isDefinition, isNullable: isDefinitionNullable(definition), isReadOnly: definition.readOnly === true, diff --git a/packages/openapi-ts/src/openApi/v3/parser/getModelComposition.ts b/packages/openapi-ts/src/openApi/v3/parser/getModelComposition.ts index 98cb76f83..b9f8b65e9 100644 --- a/packages/openapi-ts/src/openApi/v3/parser/getModelComposition.ts +++ b/packages/openapi-ts/src/openApi/v3/parser/getModelComposition.ts @@ -131,6 +131,7 @@ export const getModelComposition = ({ enums: [], export: 'interface', imports: [], + in: '', isDefinition: false, isNullable: false, isReadOnly: false, diff --git a/packages/openapi-ts/src/openApi/v3/parser/getModelProperties.ts b/packages/openapi-ts/src/openApi/v3/parser/getModelProperties.ts index 4fed2276c..e0aae45ca 100644 --- a/packages/openapi-ts/src/openApi/v3/parser/getModelProperties.ts +++ b/packages/openapi-ts/src/openApi/v3/parser/getModelProperties.ts @@ -119,6 +119,7 @@ export const getModelProperties = ({ exclusiveMaximum: property.exclusiveMaximum, exclusiveMinimum: property.exclusiveMinimum, format: property.format, + in: '', isDefinition: false, isReadOnly: property.readOnly === true, isRequired: propertyRequired, diff --git a/packages/openapi-ts/src/openApi/v3/parser/getModels.ts b/packages/openapi-ts/src/openApi/v3/parser/getModels.ts index 1773bd156..86ed58e68 100644 --- a/packages/openapi-ts/src/openApi/v3/parser/getModels.ts +++ b/packages/openapi-ts/src/openApi/v3/parser/getModels.ts @@ -1,12 +1,16 @@ import type { Client } from '../../../types/client'; +import { getConfig } from '../../../utils/config'; import { reservedWords } from '../../common/parser/reservedWords'; import { getType } from '../../common/parser/type'; import type { OpenApi } from '../interfaces/OpenApi'; import { getModel } from './getModel'; +import { getParameterSchema } from './parameter'; export const getModels = ( openApi: OpenApi, ): Pick => { + const config = getConfig(); + const types: Client['types'] = {}; let models: Client['models'] = []; @@ -39,8 +43,11 @@ export const getModels = ( Object.entries(openApi.components.parameters ?? {}).forEach( ([definitionName, definition]) => { - const schema = definition.schema; + const schema = getParameterSchema(definition); if (!schema) { + if (config.debug) { + console.warn('Skipping generating parameter:', definitionName); + } return; } diff --git a/packages/openapi-ts/src/openApi/v3/parser/getOperationParameter.ts b/packages/openapi-ts/src/openApi/v3/parser/getOperationParameter.ts index f381f6aa5..ed49e7678 100644 --- a/packages/openapi-ts/src/openApi/v3/parser/getOperationParameter.ts +++ b/packages/openapi-ts/src/openApi/v3/parser/getOperationParameter.ts @@ -1,26 +1,32 @@ import type { Client } from '../../../types/client'; +import { getConfig, isStandaloneClient } from '../../../utils/config'; import { enumMeta } from '../../../utils/enum'; import type { OperationParameter } from '../../common/interfaces/client'; import { getDefault } from '../../common/parser/getDefault'; import { getPattern } from '../../common/parser/getPattern'; import { getRef } from '../../common/parser/getRef'; -import { getOperationParameterName } from '../../common/parser/operation'; -import { getType } from '../../common/parser/type'; +import { getType, transformTypeKeyName } from '../../common/parser/type'; import type { OpenApi } from '../interfaces/OpenApi'; import type { OpenApiParameter } from '../interfaces/OpenApiParameter'; import type { OpenApiSchema } from '../interfaces/OpenApiSchema'; import { getModel } from './getModel'; import { isDefinitionNullable } from './inferType'; +import { getParameterSchema } from './parameter'; export const getOperationParameter = ({ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + debug, openApi, parameter, types, }: { + debug?: boolean; openApi: OpenApi; parameter: OpenApiParameter; types: Client['types']; }): OperationParameter => { + const config = getConfig(); + let operationParameter: OperationParameter = { $refs: [], base: 'unknown', @@ -37,7 +43,9 @@ export const getOperationParameter = ({ isRequired: parameter.required === true, link: null, mediaType: null, - name: getOperationParameterName(parameter.name), + name: isStandaloneClient(config) + ? parameter.name + : transformTypeKeyName(parameter.name), prop: parameter.name, properties: [], template: null, @@ -61,11 +69,12 @@ export const getOperationParameter = ({ return operationParameter; } - let schema = parameter.schema; + let schema = getParameterSchema(parameter); if (schema) { if (schema.$ref?.startsWith('#/components/parameters/')) { schema = getRef(openApi, schema); } + if (schema.$ref) { const model = getType({ type: schema.$ref }); operationParameter.export = 'reference'; @@ -79,47 +88,47 @@ export const getOperationParameter = ({ ]; operationParameter.default = getDefault(schema); return operationParameter; - } else { - const model = getModel({ definition: schema, openApi, types }); - operationParameter = { - ...operationParameter, - $refs: [...operationParameter.$refs, ...model.$refs], - base: model.base, - enum: [...operationParameter.enum, ...model.enum], - enums: [...operationParameter.enums, ...model.enums], - exclusiveMaximum: model.exclusiveMaximum, - exclusiveMinimum: model.exclusiveMinimum, - export: model.export, - format: model.format, - imports: [...operationParameter.imports, ...model.imports], - isNullable: operationParameter.isNullable || model.isNullable, - isReadOnly: model.isReadOnly, - isRequired: operationParameter.isRequired || model.isRequired, - link: model.link, - maxItems: model.maxItems, - maxLength: model.maxLength, - maxProperties: model.maxProperties, - maximum: model.maximum, - minItems: model.minItems, - minLength: model.minLength, - minProperties: model.minProperties, - minimum: model.minimum, - multipleOf: model.multipleOf, - pattern: getPattern(model.pattern), - properties: [...operationParameter.properties, ...model.properties], - template: model.template, - type: model.type, - uniqueItems: model.uniqueItems, - }; - if ( - (operationParameter.enum.length || operationParameter.enums.length) && - !operationParameter.meta - ) { - operationParameter.meta = enumMeta(operationParameter); - } - operationParameter.default = model.default; - return operationParameter; } + + const model = getModel({ definition: schema, openApi, types }); + operationParameter = { + ...operationParameter, + $refs: [...operationParameter.$refs, ...model.$refs], + base: model.base, + enum: [...operationParameter.enum, ...model.enum], + enums: [...operationParameter.enums, ...model.enums], + exclusiveMaximum: model.exclusiveMaximum, + exclusiveMinimum: model.exclusiveMinimum, + export: model.export, + format: model.format, + imports: [...operationParameter.imports, ...model.imports], + isNullable: operationParameter.isNullable || model.isNullable, + isReadOnly: model.isReadOnly, + isRequired: operationParameter.isRequired || model.isRequired, + link: model.link, + maxItems: model.maxItems, + maxLength: model.maxLength, + maxProperties: model.maxProperties, + maximum: model.maximum, + minItems: model.minItems, + minLength: model.minLength, + minProperties: model.minProperties, + minimum: model.minimum, + multipleOf: model.multipleOf, + pattern: getPattern(model.pattern), + properties: [...operationParameter.properties, ...model.properties], + template: model.template, + type: model.type, + uniqueItems: model.uniqueItems, + }; + if ( + (operationParameter.enum.length || operationParameter.enums.length) && + !operationParameter.meta + ) { + operationParameter.meta = enumMeta(operationParameter); + } + operationParameter.default = model.default; + return operationParameter; } return operationParameter; diff --git a/packages/openapi-ts/src/openApi/v3/parser/getOperationParameters.ts b/packages/openapi-ts/src/openApi/v3/parser/getOperationParameters.ts index 4995de62b..78ea8dd22 100644 --- a/packages/openapi-ts/src/openApi/v3/parser/getOperationParameters.ts +++ b/packages/openapi-ts/src/openApi/v3/parser/getOperationParameters.ts @@ -8,10 +8,12 @@ import { getOperationParameter } from './getOperationParameter'; const allowedIn = ['cookie', 'formData', 'header', 'path', 'query'] as const; export const getOperationParameters = ({ + debug, openApi, parameters, types, }: { + debug?: boolean; openApi: OpenApi; parameters: OpenApiParameter[]; types: Client['types']; @@ -34,20 +36,22 @@ export const getOperationParameters = ({ parameterOrReference, ); const parameter = getOperationParameter({ + debug, openApi, parameter: parameterDef, types, }); - const defIn = parameterDef.in as (typeof allowedIn)[number]; - // ignore the "api-version" param since we do not want to add it // as the first/default parameter for each of the service calls - if (parameter.prop === 'api-version' || !allowedIn.includes(defIn)) { + if ( + parameter.prop === 'api-version' || + !allowedIn.includes(parameterDef.in) + ) { return; } - switch (defIn) { + switch (parameterDef.in) { case 'cookie': operationParameters.parametersCookie = [ ...operationParameters.parametersCookie, diff --git a/packages/openapi-ts/src/openApi/v3/parser/getOperationResponse.ts b/packages/openapi-ts/src/openApi/v3/parser/getOperationResponse.ts index e55ef99e2..e230fd345 100644 --- a/packages/openapi-ts/src/openApi/v3/parser/getOperationResponse.ts +++ b/packages/openapi-ts/src/openApi/v3/parser/getOperationResponse.ts @@ -17,7 +17,7 @@ export const getOperationResponse = ({ }: { openApi: OpenApi; response: OpenApiResponse; - code: number | 'default'; + code: OperationResponse['code']; types: Client['types']; }): OperationResponse => { const operationResponse: OperationResponse = { @@ -47,6 +47,7 @@ export const getOperationResponse = ({ if (content.schema.$ref?.startsWith('#/components/responses/')) { content.schema = getRef(openApi, content.schema); } + if (content.schema.$ref) { const model = getType({ type: content.schema.$ref }); operationResponse.base = model.base; @@ -59,52 +60,57 @@ export const getOperationResponse = ({ operationResponse.template = model.template; operationResponse.type = model.type; return operationResponse; - } else { - const model = getModel({ definition: content.schema, openApi, types }); - operationResponse.export = model.export; - operationResponse.type = model.type; - operationResponse.base = model.base; - operationResponse.template = model.template; - operationResponse.link = model.link; - operationResponse.isReadOnly = model.isReadOnly; - operationResponse.isRequired = model.isRequired; - operationResponse.isNullable = model.isNullable; - operationResponse.format = model.format; - operationResponse.maximum = model.maximum; - operationResponse.exclusiveMaximum = model.exclusiveMaximum; - operationResponse.minimum = model.minimum; - operationResponse.exclusiveMinimum = model.exclusiveMinimum; - operationResponse.multipleOf = model.multipleOf; - operationResponse.maxLength = model.maxLength; - operationResponse.minLength = model.minLength; - operationResponse.maxItems = model.maxItems; - operationResponse.minItems = model.minItems; - operationResponse.uniqueItems = model.uniqueItems; - operationResponse.maxProperties = model.maxProperties; - operationResponse.minProperties = model.minProperties; - operationResponse.pattern = getPattern(model.pattern); - operationResponse.$refs = [...operationResponse.$refs, ...model.$refs]; - operationResponse.imports = [ - ...operationResponse.imports, - ...model.imports, - ]; - operationResponse.enum.push(...model.enum); - operationResponse.enums.push(...model.enums); - operationResponse.properties.push(...model.properties); - return operationResponse; } + + const model = getModel({ definition: content.schema, openApi, types }); + operationResponse.export = model.export; + operationResponse.type = model.type; + operationResponse.base = model.base; + operationResponse.template = model.template; + operationResponse.link = model.link; + operationResponse.isReadOnly = model.isReadOnly; + operationResponse.isRequired = model.isRequired; + operationResponse.isNullable = model.isNullable; + operationResponse.format = model.format; + operationResponse.maximum = model.maximum; + operationResponse.exclusiveMaximum = model.exclusiveMaximum; + operationResponse.minimum = model.minimum; + operationResponse.exclusiveMinimum = model.exclusiveMinimum; + operationResponse.multipleOf = model.multipleOf; + operationResponse.maxLength = model.maxLength; + operationResponse.minLength = model.minLength; + operationResponse.maxItems = model.maxItems; + operationResponse.minItems = model.minItems; + operationResponse.uniqueItems = model.uniqueItems; + operationResponse.maxProperties = model.maxProperties; + operationResponse.minProperties = model.minProperties; + operationResponse.pattern = getPattern(model.pattern); + operationResponse.$refs = [...operationResponse.$refs, ...model.$refs]; + operationResponse.imports = [ + ...operationResponse.imports, + ...model.imports, + ]; + operationResponse.enum = [...operationResponse.enum, ...model.enum]; + operationResponse.enums = [...operationResponse.enums, ...model.enums]; + operationResponse.properties = [ + ...operationResponse.properties, + ...model.properties, + ]; + return operationResponse; } } // We support basic properties from response headers, since both // fetch and XHR client just support string types. - Object.keys(response.headers ?? {}).forEach((name) => { - operationResponse.in = 'header'; - operationResponse.name = name; - operationResponse.type = 'string'; - operationResponse.base = 'string'; - return operationResponse; - }); + if (response.headers) { + for (const name in response.headers) { + operationResponse.in = 'header'; + operationResponse.name = name; + operationResponse.type = 'string'; + operationResponse.base = 'string'; + return operationResponse; + } + } return operationResponse; }; diff --git a/packages/openapi-ts/src/openApi/v3/parser/getOperationResponses.ts b/packages/openapi-ts/src/openApi/v3/parser/getOperationResponses.ts index 0b17c1690..4f56dae94 100644 --- a/packages/openapi-ts/src/openApi/v3/parser/getOperationResponses.ts +++ b/packages/openapi-ts/src/openApi/v3/parser/getOperationResponses.ts @@ -1,7 +1,7 @@ import type { Client } from '../../../types/client'; import type { OperationResponse } from '../../common/interfaces/client'; import { getRef } from '../../common/parser/getRef'; -import { getOperationResponseCode } from '../../common/parser/operation'; +import { parseResponseStatusCode } from '../../common/parser/operation'; import type { OpenApi } from '../interfaces/OpenApi'; import type { OpenApiResponse } from '../interfaces/OpenApiResponse'; import type { OpenApiResponses } from '../interfaces/OpenApiResponses'; @@ -16,23 +16,22 @@ export const getOperationResponses = ({ responses: OpenApiResponses; types: Client['types']; }): OperationResponse[] => { - const operationResponses: OperationResponse[] = []; + let operationResponses: OperationResponse[] = []; - // Iterate over each response code and get the - // status code and response message - Object.entries(responses).forEach(([code, responseOrReference]) => { - const response = getRef(openApi, responseOrReference); - const responseCode = getOperationResponseCode(code); - - if (responseCode) { - const operationResponse = getOperationResponse({ - code: responseCode, - openApi, - response, - types, - }); - operationResponses.push(operationResponse); + Object.entries(responses).forEach(([responseCode, responseOrReference]) => { + const code = parseResponseStatusCode(responseCode); + if (!code) { + return; } + + const response = getRef(openApi, responseOrReference); + const operationResponse = getOperationResponse({ + code, + openApi, + response, + types, + }); + operationResponses = [...operationResponses, operationResponse]; }); // Sort the responses to 2xx success codes come before 4xx and 5xx error codes. diff --git a/packages/openapi-ts/src/openApi/v3/parser/getServices.ts b/packages/openapi-ts/src/openApi/v3/parser/getServices.ts index 18d034c2a..a0bbd730a 100644 --- a/packages/openapi-ts/src/openApi/v3/parser/getServices.ts +++ b/packages/openapi-ts/src/openApi/v3/parser/getServices.ts @@ -38,7 +38,7 @@ export const getServices = ({ for (const url in openApi.paths) { const path = openApi.paths[url]; - const pathParams = getOperationParameters({ + const pathParameters = getOperationParameters({ openApi, parameters: path.parameters ?? [], types, @@ -57,7 +57,7 @@ export const getServices = ({ method, op, openApi, - pathParams, + pathParams: pathParameters, tag, types, url, diff --git a/packages/openapi-ts/src/openApi/v3/parser/operation.ts b/packages/openapi-ts/src/openApi/v3/parser/operation.ts index 03c984f8c..b531e822b 100644 --- a/packages/openapi-ts/src/openApi/v3/parser/operation.ts +++ b/packages/openapi-ts/src/openApi/v3/parser/operation.ts @@ -1,5 +1,4 @@ import type { Client } from '../../../types/client'; -import { getOperationResults } from '../../../utils/operation'; import type { Operation, OperationParameter, @@ -7,9 +6,10 @@ import type { } from '../../common/interfaces/client'; import { getRef } from '../../common/parser/getRef'; import { - getOperationErrors, + getErrorResponses, getOperationName, getOperationResponseHeader, + getSuccessResponses, } from '../../common/parser/operation'; import { getServiceName } from '../../common/parser/service'; import { toSortedByRequired } from '../../common/parser/sort'; @@ -134,11 +134,12 @@ export const getOperation = ({ responses: op.responses, types, }); - const operationResults = getOperationResults(operationResponses); - operation.errors = getOperationErrors(operationResponses); - operation.responseHeader = getOperationResponseHeader(operationResults); + operation.errors = getErrorResponses(operationResponses); - operationResults.forEach((operationResult) => { + const successResponses = getSuccessResponses(operationResponses); + operation.responseHeader = getOperationResponseHeader(successResponses); + + successResponses.forEach((operationResult) => { operation.$refs = [...operation.$refs, ...operationResult.$refs]; operation.imports = [...operation.imports, ...operationResult.imports]; operation.results = [...operation.results, operationResult]; diff --git a/packages/openapi-ts/src/openApi/v3/parser/parameter.ts b/packages/openapi-ts/src/openApi/v3/parser/parameter.ts new file mode 100644 index 000000000..27baef3bd --- /dev/null +++ b/packages/openapi-ts/src/openApi/v3/parser/parameter.ts @@ -0,0 +1,23 @@ +import type { OpenApiParameter } from '../interfaces/OpenApiParameter'; +import type { OpenApiSchema } from '../interfaces/OpenApiSchema'; + +export const getParameterSchema = ( + definition: OpenApiParameter, +): OpenApiSchema | undefined => { + if (definition.schema) { + return definition.schema; + } + + if (definition.content) { + // treat every media type the same for now, types should be modified to + // preserve this data so client knows which headers to use and how to + // parse response bodies + const contents = Object.entries(definition.content); + for (const [key, mediaTypeObject] of contents) { + if (mediaTypeObject.schema) { + const mediaType = key as keyof Required['content']; + return definition.content[mediaType].schema; + } + } + } +}; diff --git a/packages/openapi-ts/src/templates/core/ApiRequestOptions.hbs b/packages/openapi-ts/src/templates/core/ApiRequestOptions.hbs index 00a93cc87..7c2f38e8e 100644 --- a/packages/openapi-ts/src/templates/core/ApiRequestOptions.hbs +++ b/packages/openapi-ts/src/templates/core/ApiRequestOptions.hbs @@ -9,5 +9,5 @@ export type ApiRequestOptions = { readonly body?: any; readonly mediaType?: string; readonly responseHeader?: string; - readonly errors?: Record; + readonly errors?: Record; }; diff --git a/packages/openapi-ts/src/templates/core/OpenAPI.hbs b/packages/openapi-ts/src/templates/core/OpenAPI.hbs index 2fcf933bf..9b501bf08 100644 --- a/packages/openapi-ts/src/templates/core/OpenAPI.hbs +++ b/packages/openapi-ts/src/templates/core/OpenAPI.hbs @@ -20,14 +20,14 @@ export class Interceptors { this._fns = []; } - eject(fn: Middleware) { + eject(fn: Middleware): void { const index = this._fns.indexOf(fn); if (index !== -1) { this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)]; } } - use(fn: Middleware) { + use(fn: Middleware): void { this._fns = [...this._fns, fn]; } } diff --git a/packages/openapi-ts/src/utils/__tests__/sort.spec.ts b/packages/openapi-ts/src/utils/__tests__/sort.spec.ts index 7eb64959f..3b4d2ac8e 100644 --- a/packages/openapi-ts/src/utils/__tests__/sort.spec.ts +++ b/packages/openapi-ts/src/utils/__tests__/sort.spec.ts @@ -26,6 +26,7 @@ describe('sortByName', () => { enums: [], export: 'interface', imports: [], + in: '', isDefinition: true, isNullable: false, isReadOnly: false, @@ -44,6 +45,7 @@ describe('sortByName', () => { enums: [], export: 'interface', imports: [], + in: '', isDefinition: true, isNullable: false, isReadOnly: false, @@ -62,6 +64,7 @@ describe('sortByName', () => { enums: [], export: 'interface', imports: [], + in: '', isDefinition: true, isNullable: false, isReadOnly: false, diff --git a/packages/openapi-ts/src/utils/operation.ts b/packages/openapi-ts/src/utils/operation.ts deleted file mode 100644 index 670597938..000000000 --- a/packages/openapi-ts/src/utils/operation.ts +++ /dev/null @@ -1,32 +0,0 @@ -import type { - Model, - OperationResponse, -} from '../openApi/common/interfaces/client'; - -const areEqual = (a: Model, b: Model): boolean => { - const equal = - a.type === b.type && a.base === b.base && a.template === b.template; - if (equal && a.link && b.link) { - return areEqual(a.link, b.link); - } - return equal; -}; - -export const getOperationResults = ( - operationResponses: OperationResponse[], -): OperationResponse[] => { - const operationResults: OperationResponse[] = []; - - // Filter out success response codes - operationResponses.forEach((operationResponse) => { - const { code } = operationResponse; - if (code && (code === 'default' || (code >= 200 && code < 300))) { - operationResults.push(operationResponse); - } - }); - - return operationResults.filter( - (operationResult, index, arr) => - arr.findIndex((item) => areEqual(item, operationResult)) === index, - ); -}; diff --git a/packages/openapi-ts/src/utils/write/__tests__/models.spec.ts b/packages/openapi-ts/src/utils/write/__tests__/models.spec.ts index 492c7d64a..1bd3205fa 100644 --- a/packages/openapi-ts/src/utils/write/__tests__/models.spec.ts +++ b/packages/openapi-ts/src/utils/write/__tests__/models.spec.ts @@ -39,6 +39,7 @@ describe('processTypes', () => { enums: [], export: 'interface', imports: [], + in: '', isDefinition: true, isNullable: false, isReadOnly: false, diff --git a/packages/openapi-ts/src/utils/write/type.ts b/packages/openapi-ts/src/utils/write/type.ts index df4d3f1ee..08e21bbe9 100644 --- a/packages/openapi-ts/src/utils/write/type.ts +++ b/packages/openapi-ts/src/utils/write/type.ts @@ -1,9 +1,10 @@ import { compiler, type Property, type TypeNode } from '../../compiler'; import type { Model } from '../../openApi'; +import { transformTypeKeyName } from '../../openApi/common/parser/type'; import type { Client } from '../../types/client'; -import { getConfig } from '../config'; +import { getConfig, isStandaloneClient } from '../config'; import { enumValue } from '../enum'; -import { escapeComment } from '../escape'; +import { escapeComment, escapeName, unescapeName } from '../escape'; import { unique } from '../unique'; const base = (model: Model) => { @@ -84,6 +85,10 @@ const typeInterface = (model: Model) => { return compiler.typedef.basic('unknown'); } + const config = getConfig(); + + const isStandalone = isStandaloneClient(config); + const properties: Property[] = model.properties.map((property) => { let maybeRequired = property.isRequired ? '' : '?'; let value = toType(property); @@ -99,7 +104,14 @@ const typeInterface = (model: Model) => { ], isReadOnly: property.isReadOnly, isRequired: maybeRequired === '', - name: property.name, + name: isStandalone + ? escapeName(unescapeName(transformTypeKeyName(property.name))) + : // special test for 1XX status codes. We need a more robust system + // for escaping values depending on context in which they're printed, + // but since this works for standalone client, it's not worth it right now + /^\dXX$/.test(property.name) + ? escapeName(property.name) + : property.name, type: value, }; }); diff --git a/packages/openapi-ts/src/utils/write/types.ts b/packages/openapi-ts/src/utils/write/types.ts index ca3b67419..349bbface 100644 --- a/packages/openapi-ts/src/utils/write/types.ts +++ b/packages/openapi-ts/src/utils/write/types.ts @@ -6,6 +6,10 @@ import { } from '../../compiler'; import type { Model, OperationParameter } from '../../openApi'; import type { Method } from '../../openApi/common/interfaces/client'; +import { + getErrorResponses, + getSuccessResponses, +} from '../../openApi/common/parser/operation'; import type { Client } from '../../types/client'; import { getConfig, isStandaloneClient } from '../config'; import { enumEntry, enumUnionType } from '../enum'; @@ -30,6 +34,7 @@ const emptyModel: Model = { enums: [], export: 'interface', imports: [], + in: '', isDefinition: false, isNullable: false, isReadOnly: false, @@ -220,119 +225,143 @@ const processServiceTypes = (client: Client, onNode: OnNode) => { const hasRes = operation.results.length; const hasErr = operation.errors.length; - if (hasReq || hasRes || hasErr) { - if (!pathsMap[operation.path]) { - pathsMap[operation.path] = {}; - } - const pathMap = pathsMap[operation.path]!; + if (!hasReq && !hasRes && !hasErr) { + return; + } - if (!pathMap[operation.method]) { - pathMap[operation.method] = {}; - } - const methodMap = pathMap[operation.method]!; - methodMap.$ref = operation.name; - - if (hasReq) { - const bodyParameter = operation.parameters - .filter((parameter) => parameter.in === 'body') - .sort(sorterByName)[0]; - const bodyParameters: OperationParameter = { - ...emptyModel, - ...bodyParameter, - in: 'body', - isRequired: bodyParameter ? bodyParameter.isRequired : false, - // mediaType: null, - name: 'body', - prop: 'body', - }; - const headerParameters: OperationParameter = { - ...emptyModel, - in: 'header', - isRequired: operation.parameters - .filter((parameter) => parameter.in === 'header') - .some((parameter) => parameter.isRequired), - mediaType: null, - name: isStandalone ? 'headers' : 'header', - prop: isStandalone ? 'headers' : 'header', - properties: operation.parameters - .filter((parameter) => parameter.in === 'header') - .sort(sorterByName), - }; - const pathParameters: OperationParameter = { - ...emptyModel, - in: 'path', - isRequired: operation.parameters - .filter((parameter) => parameter.in === 'path') - .some((parameter) => parameter.isRequired), - mediaType: null, - name: 'path', - prop: 'path', - properties: operation.parameters - .filter((parameter) => parameter.in === 'path') - .sort(sorterByName), - }; - const queryParameters: OperationParameter = { + if (!pathsMap[operation.path]) { + pathsMap[operation.path] = {}; + } + const pathMap = pathsMap[operation.path]!; + + if (!pathMap[operation.method]) { + pathMap[operation.method] = {}; + } + const methodMap = pathMap[operation.method]!; + methodMap.$ref = operation.name; + + if (hasReq) { + const bodyParameter = operation.parameters + .filter((parameter) => parameter.in === 'body') + .sort(sorterByName)[0]; + const bodyParameters: OperationParameter = { + ...emptyModel, + ...bodyParameter, + in: 'body', + isRequired: bodyParameter ? bodyParameter.isRequired : false, + // mediaType: null, + name: 'body', + prop: 'body', + }; + const headerParameters: OperationParameter = { + ...emptyModel, + in: 'header', + isRequired: operation.parameters + .filter((parameter) => parameter.in === 'header') + .some((parameter) => parameter.isRequired), + mediaType: null, + name: isStandalone ? 'headers' : 'header', + prop: isStandalone ? 'headers' : 'header', + properties: operation.parameters + .filter((parameter) => parameter.in === 'header') + .sort(sorterByName), + }; + const pathParameters: OperationParameter = { + ...emptyModel, + in: 'path', + isRequired: operation.parameters + .filter((parameter) => parameter.in === 'path') + .some((parameter) => parameter.isRequired), + mediaType: null, + name: 'path', + prop: 'path', + properties: operation.parameters + .filter((parameter) => parameter.in === 'path') + .sort(sorterByName), + }; + const queryParameters: OperationParameter = { + ...emptyModel, + in: 'query', + isRequired: operation.parameters + .filter((parameter) => parameter.in === 'query') + .some((parameter) => parameter.isRequired), + mediaType: null, + name: 'query', + prop: 'query', + properties: operation.parameters + .filter((parameter) => parameter.in === 'query') + .sort(sorterByName), + }; + const operationProperties = isStandalone + ? [ + bodyParameters, + headerParameters, + pathParameters, + queryParameters, + ].filter( + (param) => + param.properties.length || + param.$refs.length || + param.mediaType, + ) + : sortByName([...operation.parameters]); + + methodMap.req = operationProperties; + + // create type export for operation data + generateType({ + client, + meta: { + // TODO: this should be exact ref to operation for consistency, + // but name should work too as operation ID is unique + $ref: operation.name, + name: operation.name, + }, + nameTransformer: operationDataTypeName, + onNode, + type: toType({ ...emptyModel, - in: 'query', - isRequired: operation.parameters - .filter((parameter) => parameter.in === 'query') - .some((parameter) => parameter.isRequired), - mediaType: null, - name: 'query', - prop: 'query', - properties: operation.parameters - .filter((parameter) => parameter.in === 'query') - .sort(sorterByName), - }; - const operationProperties = isStandalone - ? [ - bodyParameters, - headerParameters, - pathParameters, - queryParameters, - ].filter( - (param) => - param.properties.length || - param.$refs.length || - param.mediaType, - ) - : sortByName([...operation.parameters]); - - methodMap.req = operationProperties; - - // create type export for operation data - generateType({ - client, - meta: { - // TODO: this should be exact ref to operation for consistency, - // but name should work too as operation ID is unique - $ref: operation.name, - name: operation.name, - }, - nameTransformer: operationDataTypeName, - onNode, - type: toType({ - ...emptyModel, - isRequired: true, - properties: operationProperties, - }), - }); + isRequired: true, + properties: operationProperties, + }), + }); + } + + if (hasRes) { + if (!methodMap.res) { + methodMap.res = {}; } - if (hasRes) { - if (!methodMap.res) { - methodMap.res = {}; - } + if (Array.isArray(methodMap.res)) { + return; + } - if (Array.isArray(methodMap.res)) { - return; - } + operation.results.forEach((result) => { + methodMap.res![result.code] = result; + }); - operation.results.forEach((result) => { - methodMap.res![result.code] = result; - }); + // create type export for operation response + generateType({ + client, + meta: { + // TODO: this should be exact ref to operation for consistency, + // but name should work too as operation ID is unique + $ref: operation.name, + name: operation.name, + }, + nameTransformer: operationResponseTypeName, + onNode, + type: toType({ + ...emptyModel, + export: 'any-of', + isRequired: true, + properties: getSuccessResponses(operation.results), + }), + }); - // create type export for operation response + if (isStandaloneClient(config)) { + const errorResults = getErrorResponses(operation.results); + // create type export for operation error generateType({ client, meta: { @@ -341,71 +370,39 @@ const processServiceTypes = (client: Client, onNode: OnNode) => { $ref: operation.name, name: operation.name, }, - nameTransformer: operationResponseTypeName, + nameTransformer: operationErrorTypeName, onNode, - type: toType({ - ...emptyModel, - export: 'any-of', - isRequired: true, - // TODO: improve response type detection - properties: operation.results.filter( - (result) => - result.code === 'default' || - (result.code >= 200 && result.code < 300), - ), - }), + type: toType( + errorResults.length + ? { + ...emptyModel, + export: 'all-of', + isRequired: true, + properties: errorResults, + } + : { + ...emptyModel, + base: 'unknown', + isRequired: true, + type: 'unknown', + }, + ), }); - - if (isStandaloneClient(config)) { - // TODO: improve error type detection - const errorResults = operation.errors.filter( - (result) => - result.code === 'default' || - (result.code >= 400 && result.code < 600), - ); - // create type export for operation error - generateType({ - client, - meta: { - // TODO: this should be exact ref to operation for consistency, - // but name should work too as operation ID is unique - $ref: operation.name, - name: operation.name, - }, - nameTransformer: operationErrorTypeName, - onNode, - type: toType( - errorResults.length - ? { - ...emptyModel, - export: 'all-of', - isRequired: true, - properties: errorResults, - } - : { - ...emptyModel, - base: 'unknown', - isRequired: true, - type: 'unknown', - }, - ), - }); - } } + } - if (hasErr) { - if (!methodMap.res) { - methodMap.res = {}; - } - - if (Array.isArray(methodMap.res)) { - return; - } + if (hasErr) { + if (!methodMap.res) { + methodMap.res = {}; + } - operation.errors.forEach((error) => { - methodMap.res![error.code] = error; - }); + if (Array.isArray(methodMap.res)) { + return; } + + operation.errors.forEach((error) => { + methodMap.res![error.code] = error; + }); } }); }); diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v2/core/ApiRequestOptions.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v2/core/ApiRequestOptions.ts.snap index 8f8d4d159..f25a8910f 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v2/core/ApiRequestOptions.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v2/core/ApiRequestOptions.ts.snap @@ -9,5 +9,5 @@ export type ApiRequestOptions = { readonly body?: any; readonly mediaType?: string; readonly responseHeader?: string; - readonly errors?: Record; + readonly errors?: Record; }; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v2/core/OpenAPI.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v2/core/OpenAPI.ts.snap index 7286660a4..438d879ee 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v2/core/OpenAPI.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v2/core/OpenAPI.ts.snap @@ -11,14 +11,14 @@ export class Interceptors { this._fns = []; } - eject(fn: Middleware) { + eject(fn: Middleware): void { const index = this._fns.indexOf(fn); if (index !== -1) { this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)]; } } - use(fn: Middleware) { + use(fn: Middleware): void { this._fns = [...this._fns, fn]; } } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v2/services.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v2/services.gen.ts.snap index d3b5f31a2..53b073e2b 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v2/services.gen.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v2/services.gen.ts.snap @@ -371,7 +371,8 @@ export class ResponseService { errors: { 500: 'Message for 500 error', 501: 'Message for 501 error', - 502: 'Message for 502 error' + 502: 'Message for 502 error', + default: 'Message for default response' } }); } @@ -380,7 +381,6 @@ export class ResponseService { * @returns unknown Message for 200 response * @returns ModelThatExtends Message for 201 response * @returns ModelThatExtendsExtends Message for 202 response - * @returns ModelWithString Message for default response * @throws ApiError */ public static callWithResponses(): CancelablePromise { @@ -390,7 +390,8 @@ export class ResponseService { errors: { 500: 'Message for 500 error', 501: 'Message for 501 error', - 502: 'Message for 502 error' + 502: 'Message for 502 error', + default: 'Message for default response' } }); } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v2/types.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v2/types.gen.ts.snap index 32f27f4a8..7070f4ad6 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v2/types.gen.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v2/types.gen.ts.snap @@ -619,7 +619,7 @@ export type CallWithResponsesResponse = { readonly '@namespace.string'?: string; readonly '@namespace.integer'?: number; readonly value?: Array; -} | ModelThatExtends | ModelThatExtendsExtends | ModelWithString; +} | ModelThatExtends | ModelThatExtendsExtends; export type DummyAResponse = void; @@ -804,6 +804,10 @@ export type $OpenApiTs = { * Message for 502 error */ 502: ModelWithStringError; + /** + * Message for default response + */ + default: ModelWithString; }; }; put: { diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3/core/ApiRequestOptions.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3/core/ApiRequestOptions.ts.snap index 8f8d4d159..f25a8910f 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3/core/ApiRequestOptions.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3/core/ApiRequestOptions.ts.snap @@ -9,5 +9,5 @@ export type ApiRequestOptions = { readonly body?: any; readonly mediaType?: string; readonly responseHeader?: string; - readonly errors?: Record; + readonly errors?: Record; }; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3/core/OpenAPI.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3/core/OpenAPI.ts.snap index 7286660a4..438d879ee 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3/core/OpenAPI.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3/core/OpenAPI.ts.snap @@ -11,14 +11,14 @@ export class Interceptors { this._fns = []; } - eject(fn: Middleware) { + eject(fn: Middleware): void { const index = this._fns.indexOf(fn); if (index !== -1) { this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)]; } } - use(fn: Middleware) { + use(fn: Middleware): void { this._fns = [...this._fns, fn]; } } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3/services.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3/services.gen.ts.snap index ea62bddba..3f9634a77 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3/services.gen.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3/services.gen.ts.snap @@ -120,17 +120,21 @@ export class SimpleService { export class ParametersService { /** * @param data The data for the request. - * @param data.foo foo in method - * @param data.bar bar in method + * @param data.fooParam foo in method + * @param data.barParam bar in method + * @param data.xFooBar Parameter with illegal characters * @throws ApiError */ public static deleteFoo(data: DeleteFooData3): CancelablePromise { return __request(OpenAPI, { method: 'DELETE', - url: '/api/v{api-version}/foo/{foo}/bar/{bar}', + url: '/api/v{api-version}/foo/{foo_param}/bar/{BarParam}', path: { - foo: data.foo, - bar: data.bar + foo_param: data.fooParam, + BarParam: data.barParam + }, + headers: { + 'x-Foo-Bar': data.xFooBar } }); } @@ -517,7 +521,6 @@ export class ResponseService { /** * @returns unknown Message for 200 response * @returns ModelWithString Message for 201 response - * @returns ModelWithBoolean Message for default response * @throws ApiError */ public static callWithDuplicateResponses(): CancelablePromise { @@ -527,7 +530,9 @@ export class ResponseService { errors: { 500: 'Message for 500 error', 501: 'Message for 501 error', - 502: 'Message for 502 error' + 502: 'Message for 502 error', + '4XX': 'Message for 4XX errors', + default: 'Message for default response' } }); } @@ -536,7 +541,6 @@ export class ResponseService { * @returns unknown Message for 200 response * @returns ModelThatExtends Message for 201 response * @returns ModelThatExtendsExtends Message for 202 response - * @returns ModelWithString Message for default response * @throws ApiError */ public static callWithResponses(): CancelablePromise { @@ -546,7 +550,8 @@ export class ResponseService { errors: { 500: 'Message for 500 error', 501: 'Message for 501 error', - 502: 'Message for 502 error' + 502: 'Message for 502 error', + default: 'Message for default response' } }); } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3/types.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3/types.gen.ts.snap index 334830756..2c0f942e6 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3/types.gen.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3/types.gen.ts.snap @@ -985,7 +985,7 @@ export type ParameterSimpleParameter = string; /** * Parameter with illegal characters */ -export type Parameterx_Foo_Bar = string; +export type Parameterx_Foo_Bar = ModelWithString; export type PostServiceWithEmptyTagData = { requestBody: ModelWithReadOnlyAndWriteOnly | ModelWithArrayReadOnlyAndWriteOnly; @@ -999,11 +999,15 @@ export type DeleteFooData3 = { /** * bar in method */ - bar: string; + barParam: string; /** * foo in method */ - foo: string; + fooParam: string; + /** + * Parameter with illegal characters + */ + xFooBar: ModelWithString; }; export type CallWithParametersData = { @@ -1243,13 +1247,13 @@ export type CallWithResponseAndNoContentResponseResponse = number | void; export type CallWithResponseResponse = ModelWithString; -export type CallWithDuplicateResponsesResponse = ModelWithBoolean & ModelWithInteger | ModelWithString | ModelWithBoolean; +export type CallWithDuplicateResponsesResponse = ModelWithBoolean & ModelWithInteger | ModelWithString; export type CallWithResponsesResponse = { readonly '@namespace.string'?: string; readonly '@namespace.integer'?: number; readonly value?: Array; -} | ModelThatExtends | ModelThatExtendsExtends | ModelWithString; +} | ModelThatExtends | ModelThatExtendsExtends; export type DummyAResponse = void; @@ -1428,7 +1432,7 @@ export type $OpenApiTs = { }; }; }; - '/api/v{api-version}/foo/{foo}/bar/{bar}': { + '/api/v{api-version}/foo/{foo_param}/bar/{BarParam}': { delete: { req: DeleteFooData3; }; @@ -1534,6 +1538,10 @@ export type $OpenApiTs = { * Message for 502 error */ 502: ModelWithStringError; + /** + * Message for 4XX errors + */ + '4XX': DictionaryWithArray; /** * Message for default response */ diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/core/ApiRequestOptions.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/core/ApiRequestOptions.ts.snap index 8f8d4d159..f25a8910f 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/core/ApiRequestOptions.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/core/ApiRequestOptions.ts.snap @@ -9,5 +9,5 @@ export type ApiRequestOptions = { readonly body?: any; readonly mediaType?: string; readonly responseHeader?: string; - readonly errors?: Record; + readonly errors?: Record; }; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/core/OpenAPI.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/core/OpenAPI.ts.snap index 5f049af07..eda4c9d4b 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/core/OpenAPI.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/core/OpenAPI.ts.snap @@ -12,14 +12,14 @@ export class Interceptors { this._fns = []; } - eject(fn: Middleware) { + eject(fn: Middleware): void { const index = this._fns.indexOf(fn); if (index !== -1) { this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)]; } } - use(fn: Middleware) { + use(fn: Middleware): void { this._fns = [...this._fns, fn]; } } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/services.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/services.gen.ts.snap index bd22322f7..2edde6e8d 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/services.gen.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/services.gen.ts.snap @@ -137,17 +137,21 @@ export class ParametersService { /** * @param data The data for the request. - * @param data.foo foo in method - * @param data.bar bar in method + * @param data.fooParam foo in method + * @param data.barParam bar in method + * @param data.xFooBar Parameter with illegal characters * @throws ApiError */ public deleteFoo(data: DeleteFooData3): Observable { return __request(OpenAPI, this.http, { method: 'DELETE', - url: '/api/v{api-version}/foo/{foo}/bar/{bar}', + url: '/api/v{api-version}/foo/{foo_param}/bar/{BarParam}', path: { - foo: data.foo, - bar: data.bar + foo_param: data.fooParam, + BarParam: data.barParam + }, + headers: { + 'x-Foo-Bar': data.xFooBar } }); } @@ -574,7 +578,6 @@ export class ResponseService { /** * @returns unknown Message for 200 response * @returns ModelWithString Message for 201 response - * @returns ModelWithBoolean Message for default response * @throws ApiError */ public callWithDuplicateResponses(): Observable { @@ -584,7 +587,9 @@ export class ResponseService { errors: { 500: 'Message for 500 error', 501: 'Message for 501 error', - 502: 'Message for 502 error' + 502: 'Message for 502 error', + '4XX': 'Message for 4XX errors', + default: 'Message for default response' } }); } @@ -593,7 +598,6 @@ export class ResponseService { * @returns unknown Message for 200 response * @returns ModelThatExtends Message for 201 response * @returns ModelThatExtendsExtends Message for 202 response - * @returns ModelWithString Message for default response * @throws ApiError */ public callWithResponses(): Observable { @@ -603,7 +607,8 @@ export class ResponseService { errors: { 500: 'Message for 500 error', 501: 'Message for 501 error', - 502: 'Message for 502 error' + 502: 'Message for 502 error', + default: 'Message for default response' } }); } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/types.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/types.gen.ts.snap index 0d0f9ec43..f3c3fdece 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/types.gen.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_angular/types.gen.ts.snap @@ -862,7 +862,7 @@ export type ParameterSimpleParameter = string; /** * Parameter with illegal characters */ -export type Parameterx_Foo_Bar = string; +export type Parameterx_Foo_Bar = ModelWithString; export type PostServiceWithEmptyTagData = { requestBody: ModelWithReadOnlyAndWriteOnly | ModelWithArrayReadOnlyAndWriteOnly; @@ -876,11 +876,15 @@ export type DeleteFooData3 = { /** * bar in method */ - bar: string; + barParam: string; /** * foo in method */ - foo: string; + fooParam: string; + /** + * Parameter with illegal characters + */ + xFooBar: ModelWithString; }; export type CallWithParametersData = { @@ -1120,13 +1124,13 @@ export type CallWithResponseAndNoContentResponseResponse = number | void; export type CallWithResponseResponse = ModelWithString; -export type CallWithDuplicateResponsesResponse = ModelWithBoolean & ModelWithInteger | ModelWithString | ModelWithBoolean; +export type CallWithDuplicateResponsesResponse = ModelWithBoolean & ModelWithInteger | ModelWithString; export type CallWithResponsesResponse = { readonly '@namespace.string'?: string; readonly '@namespace.integer'?: number; readonly value?: Array; -} | ModelThatExtends | ModelThatExtendsExtends | ModelWithString; +} | ModelThatExtends | ModelThatExtendsExtends; export type DummyAResponse = void; @@ -1305,7 +1309,7 @@ export type $OpenApiTs = { }; }; }; - '/api/v{api-version}/foo/{foo}/bar/{bar}': { + '/api/v{api-version}/foo/{foo_param}/bar/{BarParam}': { delete: { req: DeleteFooData3; }; @@ -1411,6 +1415,10 @@ export type $OpenApiTs = { * Message for 502 error */ 502: ModelWithStringError; + /** + * Message for 4XX errors + */ + '4XX': DictionaryWithArray; /** * Message for default response */ diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_axios/core/ApiRequestOptions.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_axios/core/ApiRequestOptions.ts.snap index 8f8d4d159..f25a8910f 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_axios/core/ApiRequestOptions.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_axios/core/ApiRequestOptions.ts.snap @@ -9,5 +9,5 @@ export type ApiRequestOptions = { readonly body?: any; readonly mediaType?: string; readonly responseHeader?: string; - readonly errors?: Record; + readonly errors?: Record; }; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_axios/core/OpenAPI.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_axios/core/OpenAPI.ts.snap index f08bd7576..4bbc86a7f 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_axios/core/OpenAPI.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_axios/core/OpenAPI.ts.snap @@ -12,14 +12,14 @@ export class Interceptors { this._fns = []; } - eject(fn: Middleware) { + eject(fn: Middleware): void { const index = this._fns.indexOf(fn); if (index !== -1) { this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)]; } } - use(fn: Middleware) { + use(fn: Middleware): void { this._fns = [...this._fns, fn]; } } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/core/ApiRequestOptions.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/core/ApiRequestOptions.ts.snap index 8f8d4d159..f25a8910f 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/core/ApiRequestOptions.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/core/ApiRequestOptions.ts.snap @@ -9,5 +9,5 @@ export type ApiRequestOptions = { readonly body?: any; readonly mediaType?: string; readonly responseHeader?: string; - readonly errors?: Record; + readonly errors?: Record; }; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/core/OpenAPI.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/core/OpenAPI.ts.snap index 7286660a4..438d879ee 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/core/OpenAPI.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/core/OpenAPI.ts.snap @@ -11,14 +11,14 @@ export class Interceptors { this._fns = []; } - eject(fn: Middleware) { + eject(fn: Middleware): void { const index = this._fns.indexOf(fn); if (index !== -1) { this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)]; } } - use(fn: Middleware) { + use(fn: Middleware): void { this._fns = [...this._fns, fn]; } } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/services.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/services.gen.ts.snap index 034c3c5ca..20b28b252 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/services.gen.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/services.gen.ts.snap @@ -125,17 +125,21 @@ export class ParametersService { /** * @param data The data for the request. - * @param data.foo foo in method - * @param data.bar bar in method + * @param data.fooParam foo in method + * @param data.barParam bar in method + * @param data.xFooBar Parameter with illegal characters * @throws ApiError */ public deleteFoo(data: DeleteFooData3): CancelablePromise { return this.httpRequest.request({ method: 'DELETE', - url: '/api/v{api-version}/foo/{foo}/bar/{bar}', + url: '/api/v{api-version}/foo/{foo_param}/bar/{BarParam}', path: { - foo: data.foo, - bar: data.bar + foo_param: data.fooParam, + BarParam: data.barParam + }, + headers: { + 'x-Foo-Bar': data.xFooBar } }); } @@ -538,7 +542,6 @@ export class ResponseService { /** * @returns unknown Message for 200 response * @returns ModelWithString Message for 201 response - * @returns ModelWithBoolean Message for default response * @throws ApiError */ public callWithDuplicateResponses(): CancelablePromise { @@ -548,7 +551,9 @@ export class ResponseService { errors: { 500: 'Message for 500 error', 501: 'Message for 501 error', - 502: 'Message for 502 error' + 502: 'Message for 502 error', + '4XX': 'Message for 4XX errors', + default: 'Message for default response' } }); } @@ -557,7 +562,6 @@ export class ResponseService { * @returns unknown Message for 200 response * @returns ModelThatExtends Message for 201 response * @returns ModelThatExtendsExtends Message for 202 response - * @returns ModelWithString Message for default response * @throws ApiError */ public callWithResponses(): CancelablePromise { @@ -567,7 +571,8 @@ export class ResponseService { errors: { 500: 'Message for 500 error', 501: 'Message for 501 error', - 502: 'Message for 502 error' + 502: 'Message for 502 error', + default: 'Message for default response' } }); } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/types.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/types.gen.ts.snap index 18243c90e..453abba61 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/types.gen.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_client/types.gen.ts.snap @@ -862,7 +862,7 @@ export type ParameterSimpleParameter = string; /** * Parameter with illegal characters */ -export type Parameterx_Foo_Bar = string; +export type Parameterx_Foo_Bar = ModelWithString; export type PostServiceWithEmptyTagData = { requestBody: ModelWithReadOnlyAndWriteOnly | ModelWithArrayReadOnlyAndWriteOnly; @@ -876,11 +876,15 @@ export type DeleteFooData3 = { /** * bar in method */ - bar: string; + barParam: string; /** * foo in method */ - foo: string; + fooParam: string; + /** + * Parameter with illegal characters + */ + xFooBar: ModelWithString; }; export type CallWithParametersData = { @@ -1120,13 +1124,13 @@ export type CallWithResponseAndNoContentResponseResponse = number | void; export type CallWithResponseResponse = ModelWithString; -export type CallWithDuplicateResponsesResponse = ModelWithBoolean & ModelWithInteger | ModelWithString | ModelWithBoolean; +export type CallWithDuplicateResponsesResponse = ModelWithBoolean & ModelWithInteger | ModelWithString; export type CallWithResponsesResponse = { readonly '@namespace.string'?: string; readonly '@namespace.integer'?: number; readonly value?: Array; -} | ModelThatExtends | ModelThatExtendsExtends | ModelWithString; +} | ModelThatExtends | ModelThatExtendsExtends; export type DummyAResponse = void; @@ -1305,7 +1309,7 @@ export type $OpenApiTs = { }; }; }; - '/api/v{api-version}/foo/{foo}/bar/{bar}': { + '/api/v{api-version}/foo/{foo_param}/bar/{BarParam}': { delete: { req: DeleteFooData3; }; @@ -1411,6 +1415,10 @@ export type $OpenApiTs = { * Message for 502 error */ 502: ModelWithStringError; + /** + * Message for 4XX errors + */ + '4XX': DictionaryWithArray; /** * Message for default response */ diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/core/ApiRequestOptions.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/core/ApiRequestOptions.ts.snap index 8f8d4d159..f25a8910f 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/core/ApiRequestOptions.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/core/ApiRequestOptions.ts.snap @@ -9,5 +9,5 @@ export type ApiRequestOptions = { readonly body?: any; readonly mediaType?: string; readonly responseHeader?: string; - readonly errors?: Record; + readonly errors?: Record; }; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/core/OpenAPI.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/core/OpenAPI.ts.snap index 7286660a4..438d879ee 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/core/OpenAPI.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/core/OpenAPI.ts.snap @@ -11,14 +11,14 @@ export class Interceptors { this._fns = []; } - eject(fn: Middleware) { + eject(fn: Middleware): void { const index = this._fns.indexOf(fn); if (index !== -1) { this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)]; } } - use(fn: Middleware) { + use(fn: Middleware): void { this._fns = [...this._fns, fn]; } } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/services.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/services.gen.ts.snap index ea62bddba..3f9634a77 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/services.gen.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/services.gen.ts.snap @@ -120,17 +120,21 @@ export class SimpleService { export class ParametersService { /** * @param data The data for the request. - * @param data.foo foo in method - * @param data.bar bar in method + * @param data.fooParam foo in method + * @param data.barParam bar in method + * @param data.xFooBar Parameter with illegal characters * @throws ApiError */ public static deleteFoo(data: DeleteFooData3): CancelablePromise { return __request(OpenAPI, { method: 'DELETE', - url: '/api/v{api-version}/foo/{foo}/bar/{bar}', + url: '/api/v{api-version}/foo/{foo_param}/bar/{BarParam}', path: { - foo: data.foo, - bar: data.bar + foo_param: data.fooParam, + BarParam: data.barParam + }, + headers: { + 'x-Foo-Bar': data.xFooBar } }); } @@ -517,7 +521,6 @@ export class ResponseService { /** * @returns unknown Message for 200 response * @returns ModelWithString Message for 201 response - * @returns ModelWithBoolean Message for default response * @throws ApiError */ public static callWithDuplicateResponses(): CancelablePromise { @@ -527,7 +530,9 @@ export class ResponseService { errors: { 500: 'Message for 500 error', 501: 'Message for 501 error', - 502: 'Message for 502 error' + 502: 'Message for 502 error', + '4XX': 'Message for 4XX errors', + default: 'Message for default response' } }); } @@ -536,7 +541,6 @@ export class ResponseService { * @returns unknown Message for 200 response * @returns ModelThatExtends Message for 201 response * @returns ModelThatExtendsExtends Message for 202 response - * @returns ModelWithString Message for default response * @throws ApiError */ public static callWithResponses(): CancelablePromise { @@ -546,7 +550,8 @@ export class ResponseService { errors: { 500: 'Message for 500 error', 501: 'Message for 501 error', - 502: 'Message for 502 error' + 502: 'Message for 502 error', + default: 'Message for default response' } }); } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/types.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/types.gen.ts.snap index 4158bae43..0e75172a9 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/types.gen.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_enums_typescript/types.gen.ts.snap @@ -941,7 +941,7 @@ export type ParameterSimpleParameter = string; /** * Parameter with illegal characters */ -export type Parameterx_Foo_Bar = string; +export type Parameterx_Foo_Bar = ModelWithString; export type PostServiceWithEmptyTagData = { requestBody: ModelWithReadOnlyAndWriteOnly | ModelWithArrayReadOnlyAndWriteOnly; @@ -955,11 +955,15 @@ export type DeleteFooData3 = { /** * bar in method */ - bar: string; + barParam: string; /** * foo in method */ - foo: string; + fooParam: string; + /** + * Parameter with illegal characters + */ + xFooBar: ModelWithString; }; export type CallWithParametersData = { @@ -1199,13 +1203,13 @@ export type CallWithResponseAndNoContentResponseResponse = number | void; export type CallWithResponseResponse = ModelWithString; -export type CallWithDuplicateResponsesResponse = ModelWithBoolean & ModelWithInteger | ModelWithString | ModelWithBoolean; +export type CallWithDuplicateResponsesResponse = ModelWithBoolean & ModelWithInteger | ModelWithString; export type CallWithResponsesResponse = { readonly '@namespace.string'?: string; readonly '@namespace.integer'?: number; readonly value?: Array; -} | ModelThatExtends | ModelThatExtendsExtends | ModelWithString; +} | ModelThatExtends | ModelThatExtendsExtends; export type DummyAResponse = void; @@ -1384,7 +1388,7 @@ export type $OpenApiTs = { }; }; }; - '/api/v{api-version}/foo/{foo}/bar/{bar}': { + '/api/v{api-version}/foo/{foo_param}/bar/{BarParam}': { delete: { req: DeleteFooData3; }; @@ -1490,6 +1494,10 @@ export type $OpenApiTs = { * Message for 502 error */ 502: ModelWithStringError; + /** + * Message for 4XX errors + */ + '4XX': DictionaryWithArray; /** * Message for default response */ diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_hey-api_client-fetch/index.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_hey-api_client-fetch/index.ts.snap new file mode 100644 index 000000000..0a2b84bae --- /dev/null +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_hey-api_client-fetch/index.ts.snap @@ -0,0 +1,4 @@ +// This file is auto-generated by @hey-api/openapi-ts +export * from './schemas.gen'; +export * from './services.gen'; +export * from './types.gen'; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_hey-api_client-fetch/schemas.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_hey-api_client-fetch/schemas.gen.ts.snap new file mode 100644 index 000000000..2c8c2f435 --- /dev/null +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_hey-api_client-fetch/schemas.gen.ts.snap @@ -0,0 +1,1713 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export const $camelCaseCommentWithBreaks = { + description: `Testing multiline comments in string: First line +Second line + +Fourth line`, + type: 'integer' +} as const; + +export const $CommentWithBreaks = { + description: `Testing multiline comments in string: First line +Second line + +Fourth line`, + type: 'integer' +} as const; + +export const $CommentWithBackticks = { + description: 'Testing backticks in string: `backticks` and ```multiple backticks``` should work', + type: 'integer' +} as const; + +export const $CommentWithBackticksAndQuotes = { + description: `Testing backticks and quotes in string: \`backticks\`, 'quotes', "double quotes" and \`\`\`multiple backticks\`\`\` should work`, + type: 'integer' +} as const; + +export const $CommentWithSlashes = { + description: 'Testing slashes in string: \\backwards\\\\\\ and /forwards/// should work', + type: 'integer' +} as const; + +export const $CommentWithExpressionPlaceholders = { + description: 'Testing expression placeholders in string: ${expression} should work', + type: 'integer' +} as const; + +export const $CommentWithQuotes = { + description: `Testing quotes in string: 'single quote''' and "double quotes""" should work`, + type: 'integer' +} as const; + +export const $CommentWithReservedCharacters = { + description: 'Testing reserved characters in string: /* inline */ and /** inline **/ should work', + type: 'integer' +} as const; + +export const $SimpleInteger = { + description: 'This is a simple number', + type: 'integer' +} as const; + +export const $SimpleBoolean = { + description: 'This is a simple boolean', + type: 'boolean' +} as const; + +export const $SimpleString = { + description: 'This is a simple string', + type: 'string' +} as const; + +export const $NonAsciiStringÃĶÃļÃĨÆØÅÃķÃīÊÊ字įŽĶäļē = { + description: 'A string with non-ascii (unicode) characters valid in typescript identifiers (ÃĶÃļÃĨÆØÅÃķÔÃĻÈ字įŽĶäļē)', + type: 'string' +} as const; + +export const $SimpleFile = { + description: 'This is a simple file', + type: 'file' +} as const; + +export const $SimpleReference = { + description: 'This is a simple reference', + '$ref': '#/components/schemas/ModelWithString' +} as const; + +export const $SimpleStringWithPattern = { + description: 'This is a simple string', + type: 'string', + nullable: true, + maxLength: 64, + pattern: '^[a-zA-Z0-9_]*$' +} as const; + +export const $EnumWithStrings = { + description: 'This is a simple enum with strings', + enum: ['Success', 'Warning', 'Error', "'Single Quote'", '"Double Quotes"', 'Non-ascii: ÃļÃĶÃĨÃīÃķØÆÅÔÖ字įŽĶäļē'] +} as const; + +export const $EnumWithReplacedCharacters = { + enum: ["'Single Quote'", '"Double Quotes"', 'ÃļÃĶÃĨÃīÃķØÆÅÔÖ字įŽĶäļē', 3.1, ''], + type: 'string' +} as const; + +export const $EnumWithNumbers = { + description: 'This is a simple enum with numbers', + enum: [1, 2, 3, 1.1, 1.2, 1.3, 100, 200, 300, -100, -200, -300, -1.1, -1.2, -1.3], + default: 200 +} as const; + +export const $EnumFromDescription = { + description: 'Success=1,Warning=2,Error=3', + type: 'number' +} as const; + +export const $EnumWithExtensions = { + description: 'This is a simple enum with numbers', + enum: [200, 400, 500], + 'x-enum-varnames': ['CUSTOM_SUCCESS', 'CUSTOM_WARNING', 'CUSTOM_ERROR'], + 'x-enum-descriptions': ['Used when the status of something is successful', 'Used when the status of something has a warning', 'Used when the status of something has an error'] +} as const; + +export const $EnumWithXEnumNames = { + enum: [0, 1, 2], + 'x-enumNames': ['zero', 'one', 'two'] +} as const; + +export const $ArrayWithNumbers = { + description: 'This is a simple array with numbers', + type: 'array', + items: { + type: 'integer' + } +} as const; + +export const $ArrayWithBooleans = { + description: 'This is a simple array with booleans', + type: 'array', + items: { + type: 'boolean' + } +} as const; + +export const $ArrayWithStrings = { + description: 'This is a simple array with strings', + type: 'array', + items: { + type: 'string' + }, + default: ['test'] +} as const; + +export const $ArrayWithReferences = { + description: 'This is a simple array with references', + type: 'array', + items: { + '$ref': '#/components/schemas/ModelWithString' + } +} as const; + +export const $ArrayWithArray = { + description: 'This is a simple array containing an array', + type: 'array', + items: { + type: 'array', + items: { + '$ref': '#/components/schemas/ModelWithString' + } + } +} as const; + +export const $ArrayWithProperties = { + description: 'This is a simple array with properties', + type: 'array', + items: { + type: 'object', + properties: { + '16x16': { + '$ref': '#/components/schemas/camelCaseCommentWithBreaks' + }, + bar: { + type: 'string' + } + } + } +} as const; + +export const $ArrayWithAnyOfProperties = { + description: 'This is a simple array with any of properties', + type: 'array', + items: { + anyOf: [ + { + type: 'object', + properties: { + foo: { + type: 'string', + default: 'test' + } + } + }, + { + type: 'object', + properties: { + bar: { + type: 'string' + } + } + } + ] + } +} as const; + +export const $AnyOfAnyAndNull = { + type: 'object', + properties: { + data: { + anyOf: [ + {}, + { + type: 'null' + } + ] + } + } +} as const; + +export const $AnyOfArrays = { + description: 'This is a simple array with any of properties', + type: 'object', + properties: { + results: { + items: { + anyOf: [ + { + type: 'object', + properties: { + foo: { + type: 'string' + } + } + }, + { + type: 'object', + properties: { + bar: { + type: 'string' + } + } + } + ] + }, + type: 'array' + } + } +} as const; + +export const $DictionaryWithString = { + description: 'This is a string dictionary', + type: 'object', + additionalProperties: { + type: 'string' + } +} as const; + +export const $DictionaryWithPropertiesAndAdditionalProperties = { + type: 'object', + properties: { + foo: { + type: 'number' + }, + bar: { + type: 'boolean' + } + }, + additionalProperties: { + type: 'string' + } +} as const; + +export const $DictionaryWithReference = { + description: 'This is a string reference', + type: 'object', + additionalProperties: { + '$ref': '#/components/schemas/ModelWithString' + } +} as const; + +export const $DictionaryWithArray = { + description: 'This is a complex dictionary', + type: 'object', + additionalProperties: { + type: 'array', + items: { + '$ref': '#/components/schemas/ModelWithString' + } + } +} as const; + +export const $DictionaryWithDictionary = { + description: 'This is a string dictionary', + type: 'object', + additionalProperties: { + type: 'object', + additionalProperties: { + type: 'string' + } + } +} as const; + +export const $DictionaryWithProperties = { + description: 'This is a complex dictionary', + type: 'object', + additionalProperties: { + type: 'object', + properties: { + foo: { + type: 'string' + }, + bar: { + type: 'string' + } + } + } +} as const; + +export const $ModelWithInteger = { + description: 'This is a model with one number property', + type: 'object', + properties: { + prop: { + description: 'This is a simple number property', + type: 'integer' + } + } +} as const; + +export const $ModelWithBoolean = { + description: 'This is a model with one boolean property', + type: 'object', + properties: { + prop: { + description: 'This is a simple boolean property', + type: 'boolean' + } + } +} as const; + +export const $ModelWithString = { + description: 'This is a model with one string property', + type: 'object', + properties: { + prop: { + description: 'This is a simple string property', + type: 'string' + } + } +} as const; + +export const $ModelWithStringError = { + description: 'This is a model with one string property', + type: 'object', + properties: { + prop: { + description: 'This is a simple string property', + type: 'string' + } + } +} as const; + +export const $Model_From_Zendesk = { + description: `\`Comment\` or \`VoiceComment\`. The JSON object for adding voice comments to tickets is different. See [Adding voice comments to tickets](/documentation/ticketing/managing-tickets/adding-voice-comments-to-tickets)`, + type: 'string' +} as const; + +export const $ModelWithNullableString = { + description: 'This is a model with one string property', + type: 'object', + required: ['nullableRequiredProp1', 'nullableRequiredProp2'], + properties: { + nullableProp1: { + description: 'This is a simple string property', + type: 'string', + nullable: true + }, + nullableRequiredProp1: { + description: 'This is a simple string property', + type: 'string', + nullable: true + }, + nullableProp2: { + description: 'This is a simple string property', + type: ['string', 'null'] + }, + nullableRequiredProp2: { + description: 'This is a simple string property', + type: ['string', 'null'] + }, + 'foo_bar-enum': { + description: 'This is a simple enum with strings', + enum: ['Success', 'Warning', 'Error', 'ØÆÅ字įŽĶäļē'] + } + } +} as const; + +export const $ModelWithEnum = { + description: 'This is a model with one enum', + type: 'object', + properties: { + 'foo_bar-enum': { + description: 'This is a simple enum with strings', + enum: ['Success', 'Warning', 'Error', 'ØÆÅ字įŽĶäļē'] + }, + statusCode: { + description: 'These are the HTTP error code enums', + enum: ['100', '200 FOO', '300 FOO_BAR', '400 foo-bar', '500 foo.bar', '600 foo&bar'] + }, + bool: { + description: 'Simple boolean enum', + type: 'boolean', + enum: [true] + } + } +} as const; + +export const $ModelWithEnumWithHyphen = { + description: 'This is a model with one enum with escaped name', + type: 'object', + properties: { + 'foo-bar-baz-qux': { + type: 'string', + enum: ['3.0'], + title: 'Foo-Bar-Baz-Qux', + default: '3.0' + } + } +} as const; + +export const $ModelWithEnumFromDescription = { + description: 'This is a model with one enum', + type: 'object', + properties: { + test: { + type: 'integer', + description: 'Success=1,Warning=2,Error=3' + } + } +} as const; + +export const $ModelWithNestedEnums = { + description: 'This is a model with nested enums', + type: 'object', + properties: { + dictionaryWithEnum: { + type: 'object', + additionalProperties: { + enum: ['Success', 'Warning', 'Error'] + } + }, + dictionaryWithEnumFromDescription: { + type: 'object', + additionalProperties: { + type: 'integer', + description: 'Success=1,Warning=2,Error=3' + } + }, + arrayWithEnum: { + type: 'array', + items: { + enum: ['Success', 'Warning', 'Error'] + } + }, + arrayWithDescription: { + type: 'array', + items: { + type: 'integer', + description: 'Success=1,Warning=2,Error=3' + } + }, + 'foo_bar-enum': { + description: 'This is a simple enum with strings', + enum: ['Success', 'Warning', 'Error', 'ØÆÅ字įŽĶäļē'] + } + } +} as const; + +export const $ModelWithReference = { + description: 'This is a model with one property containing a reference', + type: 'object', + properties: { + prop: { + '$ref': '#/components/schemas/ModelWithProperties' + } + } +} as const; + +export const $ModelWithArrayReadOnlyAndWriteOnly = { + description: 'This is a model with one property containing an array', + type: 'object', + properties: { + prop: { + type: 'array', + items: { + '$ref': '#/components/schemas/ModelWithReadOnlyAndWriteOnly' + } + }, + propWithFile: { + type: 'array', + items: { + type: 'file' + } + }, + propWithNumber: { + type: 'array', + items: { + type: 'number' + } + } + } +} as const; + +export const $ModelWithArray = { + description: 'This is a model with one property containing an array', + type: 'object', + properties: { + prop: { + type: 'array', + items: { + '$ref': '#/components/schemas/ModelWithString' + } + }, + propWithFile: { + type: 'array', + items: { + type: 'file' + } + }, + propWithNumber: { + type: 'array', + items: { + type: 'number' + } + } + } +} as const; + +export const $ModelWithDictionary = { + description: 'This is a model with one property containing a dictionary', + type: 'object', + properties: { + prop: { + type: 'object', + additionalProperties: { + type: 'string' + } + } + } +} as const; + +export const $DeprecatedModel = { + deprecated: true, + description: 'This is a deprecated model with a deprecated property', + type: 'object', + properties: { + prop: { + deprecated: true, + description: 'This is a deprecated property', + type: 'string' + } + } +} as const; + +export const $ModelWithCircularReference = { + description: 'This is a model with one property containing a circular reference', + type: 'object', + properties: { + prop: { + '$ref': '#/components/schemas/ModelWithCircularReference' + } + } +} as const; + +export const $CompositionWithOneOf = { + description: "This is a model with one property with a 'one of' relationship", + type: 'object', + properties: { + propA: { + type: 'object', + oneOf: [ + { + '$ref': '#/components/schemas/ModelWithString' + }, + { + '$ref': '#/components/schemas/ModelWithEnum' + }, + { + '$ref': '#/components/schemas/ModelWithArray' + }, + { + '$ref': '#/components/schemas/ModelWithDictionary' + } + ] + } + } +} as const; + +export const $CompositionWithOneOfAnonymous = { + description: "This is a model with one property with a 'one of' relationship where the options are not $ref", + type: 'object', + properties: { + propA: { + type: 'object', + oneOf: [ + { + description: 'Anonymous object type', + type: 'object', + properties: { + propA: { + type: 'string' + } + } + }, + { + description: 'Anonymous string type', + type: 'string' + }, + { + description: 'Anonymous integer type', + type: 'integer' + } + ] + } + } +} as const; + +export const $ModelCircle = { + description: 'Circle', + type: 'object', + required: ['kind'], + properties: { + kind: { + type: 'string' + }, + radius: { + type: 'number' + } + } +} as const; + +export const $ModelSquare = { + description: 'Square', + type: 'object', + required: ['kind'], + properties: { + kind: { + type: 'string' + }, + sideLength: { + type: 'number' + } + } +} as const; + +export const $CompositionWithOneOfDiscriminator = { + description: "This is a model with one property with a 'one of' relationship where the options are not $ref", + type: 'object', + oneOf: [ + { + '$ref': '#/components/schemas/ModelCircle' + }, + { + '$ref': '#/components/schemas/ModelSquare' + } + ], + discriminator: { + propertyName: 'kind', + mapping: { + circle: '#/components/schemas/ModelCircle', + square: '#/components/schemas/ModelSquare' + } + } +} as const; + +export const $CompositionWithAnyOf = { + description: "This is a model with one property with a 'any of' relationship", + type: 'object', + properties: { + propA: { + type: 'object', + anyOf: [ + { + '$ref': '#/components/schemas/ModelWithString' + }, + { + '$ref': '#/components/schemas/ModelWithEnum' + }, + { + '$ref': '#/components/schemas/ModelWithArray' + }, + { + '$ref': '#/components/schemas/ModelWithDictionary' + } + ] + } + } +} as const; + +export const $CompositionWithAnyOfAnonymous = { + description: "This is a model with one property with a 'any of' relationship where the options are not $ref", + type: 'object', + properties: { + propA: { + type: 'object', + anyOf: [ + { + description: 'Anonymous object type', + type: 'object', + properties: { + propA: { + type: 'string' + } + } + }, + { + description: 'Anonymous string type', + type: 'string' + }, + { + description: 'Anonymous integer type', + type: 'integer' + } + ] + } + } +} as const; + +export const $CompositionWithNestedAnyAndTypeNull = { + description: "This is a model with nested 'any of' property with a type null", + type: 'object', + properties: { + propA: { + type: 'object', + anyOf: [ + { + items: { + anyOf: [ + { + '$ref': '#/components/schemas/ModelWithDictionary' + }, + { + type: 'null' + } + ] + }, + type: 'array' + }, + { + items: { + anyOf: [ + { + '$ref': '#/components/schemas/ModelWithArray' + }, + { + type: 'null' + } + ] + }, + type: 'array' + } + ] + } + } +} as const; + +export const $e_num_1ПÐĩŅ€ÐļÐūÐī = { + enum: ['Bird', 'Dog'], + type: 'string' +} as const; + +export const $ConstValue = { + type: 'string', + const: 'ConstValue' +} as const; + +export const $CompositionWithNestedAnyOfAndNull = { + description: "This is a model with one property with a 'any of' relationship where the options are not $ref", + type: 'object', + properties: { + propA: { + anyOf: [ + { + items: { + anyOf: [ + { + '$ref': '#/components/schemas/3e-num_1ПÐĩŅ€ÐļÐūÐī' + }, + { + '$ref': '#/components/schemas/ConstValue' + } + ] + }, + type: 'array' + }, + { + type: 'null' + } + ], + title: 'Scopes' + } + } +} as const; + +export const $CompositionWithOneOfAndNullable = { + description: "This is a model with one property with a 'one of' relationship", + type: 'object', + properties: { + propA: { + nullable: true, + type: 'object', + oneOf: [ + { + type: 'object', + properties: { + boolean: { + type: 'boolean' + } + } + }, + { + '$ref': '#/components/schemas/ModelWithEnum' + }, + { + '$ref': '#/components/schemas/ModelWithArray' + }, + { + '$ref': '#/components/schemas/ModelWithDictionary' + } + ] + } + } +} as const; + +export const $CompositionWithOneOfAndSimpleDictionary = { + description: 'This is a model that contains a simple dictionary within composition', + type: 'object', + properties: { + propA: { + oneOf: [ + { + type: 'boolean' + }, + { + type: 'object', + additionalProperties: { + type: 'number' + } + } + ] + } + } +} as const; + +export const $CompositionWithOneOfAndSimpleArrayDictionary = { + description: 'This is a model that contains a dictionary of simple arrays within composition', + type: 'object', + properties: { + propA: { + oneOf: [ + { + type: 'boolean' + }, + { + type: 'object', + additionalProperties: { + type: 'array', + items: { + type: 'boolean' + } + } + } + ] + } + } +} as const; + +export const $CompositionWithOneOfAndComplexArrayDictionary = { + description: 'This is a model that contains a dictionary of complex arrays (composited) within composition', + type: 'object', + properties: { + propA: { + oneOf: [ + { + type: 'boolean' + }, + { + type: 'object', + additionalProperties: { + type: 'array', + items: { + oneOf: [ + { + type: 'number' + }, + { + type: 'string' + } + ] + } + } + } + ] + } + } +} as const; + +export const $CompositionWithAllOfAndNullable = { + description: "This is a model with one property with a 'all of' relationship", + type: 'object', + properties: { + propA: { + nullable: true, + type: 'object', + allOf: [ + { + type: 'object', + properties: { + boolean: { + type: 'boolean' + } + } + }, + { + '$ref': '#/components/schemas/ModelWithEnum' + }, + { + '$ref': '#/components/schemas/ModelWithArray' + }, + { + '$ref': '#/components/schemas/ModelWithDictionary' + } + ] + } + } +} as const; + +export const $CompositionWithAnyOfAndNullable = { + description: "This is a model with one property with a 'any of' relationship", + type: 'object', + properties: { + propA: { + nullable: true, + type: 'object', + anyOf: [ + { + type: 'object', + properties: { + boolean: { + type: 'boolean' + } + } + }, + { + '$ref': '#/components/schemas/ModelWithEnum' + }, + { + '$ref': '#/components/schemas/ModelWithArray' + }, + { + '$ref': '#/components/schemas/ModelWithDictionary' + } + ] + } + } +} as const; + +export const $CompositionBaseModel = { + description: 'This is a base model with two simple optional properties', + type: 'object', + properties: { + firstName: { + type: 'string' + }, + lastname: { + type: 'string' + } + } +} as const; + +export const $CompositionExtendedModel = { + description: 'This is a model that extends the base model', + type: 'object', + allOf: [ + { + '$ref': '#/components/schemas/CompositionBaseModel' + } + ], + properties: { + age: { + type: 'number' + } + }, + required: ['firstName', 'lastname', 'age'] +} as const; + +export const $ModelWithProperties = { + description: 'This is a model with one nested property', + type: 'object', + required: ['required', 'requiredAndReadOnly', 'requiredAndNullable'], + properties: { + required: { + type: 'string' + }, + requiredAndReadOnly: { + type: 'string', + readOnly: true + }, + requiredAndNullable: { + type: 'string', + nullable: true + }, + string: { + type: 'string' + }, + number: { + type: 'number' + }, + boolean: { + type: 'boolean' + }, + reference: { + '$ref': '#/components/schemas/ModelWithString' + }, + 'property with space': { + type: 'string' + }, + default: { + type: 'string' + }, + try: { + type: 'string' + }, + '@namespace.string': { + type: 'string', + readOnly: true + }, + '@namespace.integer': { + type: 'integer', + readOnly: true + } + } +} as const; + +export const $ModelWithNestedProperties = { + description: 'This is a model with one nested property', + type: 'object', + required: ['first'], + properties: { + first: { + type: 'object', + required: ['second'], + readOnly: true, + nullable: true, + properties: { + second: { + type: 'object', + required: ['third'], + readOnly: true, + nullable: true, + properties: { + third: { + type: 'string', + required: true, + readOnly: true, + nullable: true + } + } + } + } + } + } +} as const; + +export const $ModelWithDuplicateProperties = { + description: 'This is a model with duplicated properties', + type: 'object', + properties: { + prop: { + '$ref': '#/components/schemas/ModelWithString' + } + } +} as const; + +export const $ModelWithOrderedProperties = { + description: 'This is a model with ordered properties', + type: 'object', + properties: { + zebra: { + type: 'string' + }, + apple: { + type: 'string' + }, + hawaii: { + type: 'string' + } + } +} as const; + +export const $ModelWithDuplicateImports = { + description: 'This is a model with duplicated imports', + type: 'object', + properties: { + propA: { + '$ref': '#/components/schemas/ModelWithString' + }, + propB: { + '$ref': '#/components/schemas/ModelWithString' + }, + propC: { + '$ref': '#/components/schemas/ModelWithString' + } + } +} as const; + +export const $ModelThatExtends = { + description: 'This is a model that extends another model', + type: 'object', + allOf: [ + { + '$ref': '#/components/schemas/ModelWithString' + }, + { + type: 'object', + properties: { + propExtendsA: { + type: 'string' + }, + propExtendsB: { + '$ref': '#/components/schemas/ModelWithString' + } + } + } + ] +} as const; + +export const $ModelThatExtendsExtends = { + description: 'This is a model that extends another model', + type: 'object', + allOf: [ + { + '$ref': '#/components/schemas/ModelWithString' + }, + { + '$ref': '#/components/schemas/ModelThatExtends' + }, + { + type: 'object', + properties: { + propExtendsC: { + type: 'string' + }, + propExtendsD: { + '$ref': '#/components/schemas/ModelWithString' + } + } + } + ] +} as const; + +export const $ModelWithPattern = { + description: 'This is a model that contains a some patterns', + type: 'object', + required: ['key', 'name'], + properties: { + key: { + maxLength: 64, + pattern: '^[a-zA-Z0-9_]*$', + type: 'string' + }, + name: { + maxLength: 255, + type: 'string' + }, + enabled: { + type: 'boolean', + readOnly: true + }, + modified: { + type: 'string', + format: 'date-time', + readOnly: true + }, + id: { + type: 'string', + pattern: '^\\d{2}-\\d{3}-\\d{4}$' + }, + text: { + type: 'string', + pattern: '^\\w+$' + }, + patternWithSingleQuotes: { + type: 'string', + pattern: "^[a-zA-Z0-9']*$" + }, + patternWithNewline: { + type: 'string', + pattern: `aaa +bbb` + }, + patternWithBacktick: { + type: 'string', + pattern: 'aaa`bbb' + } + } +} as const; + +export const $File = { + required: ['mime'], + type: 'object', + properties: { + id: { + title: 'Id', + type: 'string', + readOnly: true, + minLength: 1 + }, + updated_at: { + title: 'Updated at', + type: 'string', + format: 'date-time', + readOnly: true + }, + created_at: { + title: 'Created at', + type: 'string', + format: 'date-time', + readOnly: true + }, + mime: { + title: 'Mime', + type: 'string', + maxLength: 24, + minLength: 1 + }, + file: { + title: 'File', + type: 'string', + readOnly: true, + format: 'uri' + } + } +} as const; + +export const $default = { + type: 'object', + properties: { + name: { + type: 'string' + } + } +} as const; + +export const $Pageable = { + type: 'object', + properties: { + page: { + minimum: 0, + type: 'integer', + format: 'int32', + default: 0 + }, + size: { + minimum: 1, + type: 'integer', + format: 'int32' + }, + sort: { + type: 'array', + items: { + type: 'string' + } + } + } +} as const; + +export const $FreeFormObjectWithoutAdditionalProperties = { + description: 'This is a free-form object without additionalProperties.', + type: 'object' +} as const; + +export const $FreeFormObjectWithAdditionalPropertiesEqTrue = { + description: 'This is a free-form object with additionalProperties: true.', + type: 'object', + additionalProperties: true +} as const; + +export const $FreeFormObjectWithAdditionalPropertiesEqEmptyObject = { + description: 'This is a free-form object with additionalProperties: {}.', + type: 'object', + additionalProperties: {} +} as const; + +export const $ModelWithConst = { + type: 'object', + properties: { + String: { + const: 'String' + }, + number: { + const: 0 + }, + null: { + const: null + }, + withType: { + type: 'string', + const: 'Some string' + } + } +} as const; + +export const $ModelWithAdditionalPropertiesEqTrue = { + description: 'This is a model with one property and additionalProperties: true', + type: 'object', + properties: { + prop: { + description: 'This is a simple string property', + type: 'string' + } + }, + additionalProperties: true +} as const; + +export const $NestedAnyOfArraysNullable = { + properties: { + nullableArray: { + anyOf: [ + { + items: { + anyOf: [ + { + type: 'string' + }, + { + type: 'boolean' + } + ] + }, + type: 'array' + }, + { + type: 'null' + } + ] + } + }, + type: 'object' +} as const; + +export const $CompositionWithOneOfAndProperties = { + type: 'object', + oneOf: [ + { + type: 'object', + required: ['foo'], + properties: { + foo: { + '$ref': '#/components/parameters/SimpleParameter' + } + }, + additionalProperties: false + }, + { + type: 'object', + required: ['bar'], + properties: { + bar: { + '$ref': '#/components/schemas/NonAsciiStringÃĶÃļÃĨÆØÅÃķÃīÊÊ字įŽĶäļē' + } + }, + additionalProperties: false + } + ], + required: ['baz', 'qux'], + properties: { + baz: { + type: 'integer', + format: 'uint16', + minimum: 0, + nullable: true + }, + qux: { + type: 'integer', + format: 'uint8', + minimum: 0 + } + } +} as const; + +export const $NullableObject = { + type: ['object', 'null'], + description: 'An object that can be null', + properties: { + foo: { + type: 'string' + } + }, + default: null +} as const; + +export const $CharactersInDescription = { + type: 'string', + description: 'Some % character' +} as const; + +export const $ModelWithNullableObject = { + type: 'object', + properties: { + data: { + '$ref': '#/components/schemas/NullableObject' + } + } +} as const; + +export const $ModelWithOneOfEnum = { + oneOf: [ + { + type: 'object', + required: ['foo'], + properties: { + foo: { + type: 'string', + enum: ['Bar'] + } + } + }, + { + type: 'object', + required: ['foo'], + properties: { + foo: { + type: 'string', + enum: ['Baz'] + } + } + }, + { + type: 'object', + required: ['foo'], + properties: { + foo: { + type: 'string', + enum: ['Qux'] + } + } + }, + { + type: 'object', + required: ['content', 'foo'], + properties: { + content: { + type: 'string', + format: 'date-time' + }, + foo: { + type: 'string', + enum: ['Quux'] + } + } + }, + { + type: 'object', + required: ['content', 'foo'], + properties: { + content: { + type: 'array', + items: [ + { + type: 'string', + format: 'date-time' + }, + { + type: 'string' + } + ], + maxItems: 2, + minItems: 2 + }, + foo: { + type: 'string', + enum: ['Corge'] + } + } + } + ] +} as const; + +export const $ModelWithNestedArrayEnumsDataFoo = { + enum: ['foo', 'bar'], + type: 'string' +} as const; + +export const $ModelWithNestedArrayEnumsDataBar = { + enum: ['baz', 'qux'], + type: 'string' +} as const; + +export const $ModelWithNestedArrayEnumsData = { + type: 'object', + properties: { + foo: { + type: 'array', + items: { + '$ref': '#/components/schemas/ModelWithNestedArrayEnumsDataFoo' + } + }, + bar: { + type: 'array', + items: { + '$ref': '#/components/schemas/ModelWithNestedArrayEnumsDataBar' + } + } + } +} as const; + +export const $ModelWithNestedArrayEnums = { + type: 'object', + properties: { + array_strings: { + type: 'array', + items: { + type: 'string' + } + }, + data: { + allOf: [ + { + '$ref': '#/components/schemas/ModelWithNestedArrayEnumsData' + } + ] + } + } +} as const; + +export const $ModelWithNestedCompositionEnums = { + type: 'object', + properties: { + foo: { + allOf: [ + { + '$ref': '#/components/schemas/ModelWithNestedArrayEnumsDataFoo' + } + ] + } + } +} as const; + +export const $ModelWithReadOnlyAndWriteOnly = { + type: 'object', + required: ['foo', 'bar', 'baz'], + properties: { + foo: { + type: 'string' + }, + bar: { + readOnly: true, + type: 'string' + }, + baz: { + type: 'string', + writeOnly: true + } + } +} as const; + +export const $ModelWithConstantSizeArray = { + type: 'array', + items: { + type: 'number' + }, + minItems: 2, + maxItems: 2 +} as const; + +export const $ModelWithAnyOfConstantSizeArray = { + type: 'array', + items: { + oneOf: [ + { + type: 'number' + }, + { + type: 'string' + } + ] + }, + minItems: 3, + maxItems: 3 +} as const; + +export const $ModelWithAnyOfConstantSizeArrayNullable = { + type: ['array'], + items: { + oneOf: [ + { + type: 'number', + nullable: true + }, + { + type: 'string' + } + ] + }, + minItems: 3, + maxItems: 3 +} as const; + +export const $ModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = { + type: 'array', + items: { + oneOf: [ + { + type: 'number' + }, + { + type: 'string' + } + ] + }, + minItems: 2, + maxItems: 2 +} as const; + +export const $ModelWithAnyOfConstantSizeArrayAndIntersect = { + type: 'array', + items: { + allOf: [ + { + type: 'number' + }, + { + type: 'string' + } + ] + }, + minItems: 2, + maxItems: 2 +} as const; + +export const $ModelWithNumericEnumUnion = { + type: 'object', + properties: { + value: { + type: 'number', + description: 'ПÐĩŅ€ÐļÐūÐī', + enum: [-10, -1, 0, 1, 3, 6, 12] + } + } +} as const; + +export const $ModelWithBackticksInDescription = { + description: 'Some description with `back ticks`', + type: 'object', + properties: { + template: { + type: 'string', + description: `The template \`that\` should be used for parsing and importing the contents of the CSV file. + +

There is one placeholder currently supported:

  • \${x} - refers to the n-th column in the CSV file, e.g. \${1}, \${2}, ...)

Example of a correct JSON template:

+
+[
+  {
+    "resourceType": "Asset",
+    "identifier": {
+      "name": "\${1}",
+      "domain": {
+        "name": "\${2}",
+        "community": {
+          "name": "Some Community"
+        }
+      }
+    },
+    "attributes" : {
+      "00000000-0000-0000-0000-000000003115" : [ {
+        "value" : "\${3}" 
+      } ],
+      "00000000-0000-0000-0000-000000000222" : [ {
+        "value" : "\${4}"
+      } ]
+    }
+  }
+]
+
` + } + } +} as const; + +export const $ParameterSimpleParameterUnused = { + description: 'Model used to test deduplication strategy (unused)', + type: 'string' +} as const; + +export const $PostServiceWithEmptyTagResponse = { + description: 'Model used to test deduplication strategy', + type: 'string' +} as const; + +export const $PostServiceWithEmptyTagResponse2 = { + description: 'Model used to test deduplication strategy', + type: 'string' +} as const; + +export const $DeleteFooData = { + description: 'Model used to test deduplication strategy', + type: 'string' +} as const; + +export const $DeleteFooData2 = { + description: 'Model used to test deduplication strategy', + type: 'string' +} as const; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_hey-api_client-fetch/services.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_hey-api_client-fetch/services.gen.ts.snap new file mode 100644 index 000000000..aeadf8755 --- /dev/null +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_hey-api_client-fetch/services.gen.ts.snap @@ -0,0 +1,229 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import { client, type Options, formDataBodySerializer } from '@hey-api/client-fetch'; +import type { PostServiceWithEmptyTagData, PostServiceWithEmptyTagError, PostServiceWithEmptyTagResponse3, ApiVversionOdataControllerCountError, ApiVversionOdataControllerCountResponse, DeleteFooData3, CallWithDescriptionsData, DeprecatedCallData, CallWithParametersData, CallWithWeirdParameterNamesData, GetCallWithOptionalParamData, PostCallWithOptionalParamData, PostApiRequestBodyData, PostApiFormDataData, CallWithDefaultParametersData, CallWithDefaultOptionalParametersData, CallToTestOrderOfParamsData, CallWithNoContentResponseError, CallWithNoContentResponseResponse, CallWithResponseAndNoContentResponseError, CallWithResponseAndNoContentResponseResponse, DummyAError, DummyAResponse, DummyBError, DummyBResponse, CallWithResponseError, CallWithResponseResponse, CallWithDuplicateResponsesError, CallWithDuplicateResponsesResponse, CallWithResponsesError, CallWithResponsesResponse, CollectionFormatData, TypesData, TypesError, TypesResponse, UploadFileData, UploadFileError, UploadFileResponse, FileResponseData, FileResponseError, FileResponseResponse, ComplexTypesData, ComplexTypesError, ComplexTypesResponse, MultipartRequestData, MultipartResponseError, MultipartResponseResponse, ComplexParamsData, ComplexParamsError, ComplexParamsResponse, CallWithResultFromHeaderError, CallWithResultFromHeaderResponse, TestErrorCodeData, TestErrorCodeError, TestErrorCodeResponse, NonAsciiÃĶÃļÃĨÆÃļÅÃķÃīÊÊ字įŽĶäļēData, NonAsciiÃĶÃļÃĨÆÃļÅÃķÃīÊÊ字įŽĶäļēError, NonAsciiÃĶÃļÃĨÆÃļÅÃķÃīÊÊ字įŽĶäļēResponse } from './types.gen'; + +export const serviceWithEmptyTag = (options?: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/no-tag' +}); }; + +export const postServiceWithEmptyTag = (options: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/no-tag' +}); }; + +export const apiVVersionOdataControllerCount = (options?: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/simple/$count' +}); }; + +export const getCallWithoutParametersAndResponse = (options?: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/simple' +}); }; + +export const putCallWithoutParametersAndResponse = (options?: Options) => { return (options?.client ?? client).put({ + ...options, + url: '/api/v{api-version}/simple' +}); }; + +export const postCallWithoutParametersAndResponse = (options?: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/simple' +}); }; + +export const deleteCallWithoutParametersAndResponse = (options?: Options) => { return (options?.client ?? client).delete({ + ...options, + url: '/api/v{api-version}/simple' +}); }; + +export const optionsCallWithoutParametersAndResponse = (options?: Options) => { return (options?.client ?? client).options({ + ...options, + url: '/api/v{api-version}/simple' +}); }; + +export const headCallWithoutParametersAndResponse = (options?: Options) => { return (options?.client ?? client).head({ + ...options, + url: '/api/v{api-version}/simple' +}); }; + +export const patchCallWithoutParametersAndResponse = (options?: Options) => { return (options?.client ?? client).patch({ + ...options, + url: '/api/v{api-version}/simple' +}); }; + +export const deleteFoo = (options: Options) => { return (options?.client ?? client).delete({ + ...options, + url: '/api/v{api-version}/foo/{foo_param}/bar/{BarParam}' +}); }; + +export const callWithDescriptions = (options?: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/descriptions/' +}); }; + +/** + * @deprecated + */ +export const deprecatedCall = (options: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/parameters/deprecated' +}); }; + +export const callWithParameters = (options: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/parameters/{parameterPath}' +}); }; + +export const callWithWeirdParameterNames = (options: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/parameters/{parameter.path.1}/{parameter-path-2}/{PARAMETER-PATH-3}' +}); }; + +export const getCallWithOptionalParam = (options: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/parameters/' +}); }; + +export const postCallWithOptionalParam = (options: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/parameters/' +}); }; + +export const postApiRequestBody = (options?: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/requestBody/' +}); }; + +export const postApiFormData = (options?: Options) => { return (options?.client ?? client).post({ + ...options, + ...formDataBodySerializer, + url: '/api/v{api-version}/formData/' +}); }; + +export const callWithDefaultParameters = (options?: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/defaults' +}); }; + +export const callWithDefaultOptionalParameters = (options?: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/defaults' +}); }; + +export const callToTestOrderOfParams = (options: Options) => { return (options?.client ?? client).put({ + ...options, + url: '/api/v{api-version}/defaults' +}); }; + +export const duplicateName = (options?: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/duplicate' +}); }; + +export const duplicateName1 = (options?: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/duplicate' +}); }; + +export const duplicateName2 = (options?: Options) => { return (options?.client ?? client).put({ + ...options, + url: '/api/v{api-version}/duplicate' +}); }; + +export const duplicateName3 = (options?: Options) => { return (options?.client ?? client).delete({ + ...options, + url: '/api/v{api-version}/duplicate' +}); }; + +export const callWithNoContentResponse = (options?: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/no-content' +}); }; + +export const callWithResponseAndNoContentResponse = (options?: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/multiple-tags/response-and-no-content' +}); }; + +export const dummyA = (options?: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/multiple-tags/a' +}); }; + +export const dummyB = (options?: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/multiple-tags/b' +}); }; + +export const callWithResponse = (options?: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/response' +}); }; + +export const callWithDuplicateResponses = (options?: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/response' +}); }; + +export const callWithResponses = (options?: Options) => { return (options?.client ?? client).put({ + ...options, + url: '/api/v{api-version}/response' +}); }; + +export const collectionFormat = (options: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/collectionFormat' +}); }; + +export const types = (options: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/types' +}); }; + +export const uploadFile = (options: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/upload' +}); }; + +export const fileResponse = (options: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/file/{id}' +}); }; + +export const complexTypes = (options: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/complex' +}); }; + +export const multipartRequest = (options?: Options) => { return (options?.client ?? client).post({ + ...options, + ...formDataBodySerializer, + url: '/api/v{api-version}/multipart' +}); }; + +export const multipartResponse = (options?: Options) => { return (options?.client ?? client).get({ + ...options, + url: '/api/v{api-version}/multipart' +}); }; + +export const complexParams = (options: Options) => { return (options?.client ?? client).put({ + ...options, + url: '/api/v{api-version}/complex/{id}' +}); }; + +export const callWithResultFromHeader = (options?: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/header' +}); }; + +export const testErrorCode = (options: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/error' +}); }; + +export const nonAsciiÃĶÃļÃĨÆÃļÅÃķÃīÊÊ字įŽĶäļē = (options: Options) => { return (options?.client ?? client).post({ + ...options, + url: '/api/v{api-version}/non-ascii-ÃĶÃļÃĨÆØÅÃķÃīÊÊ字įŽĶäļē' +}); }; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_hey-api_client-fetch/types.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_hey-api_client-fetch/types.gen.ts.snap new file mode 100644 index 000000000..9827a6129 --- /dev/null +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_hey-api_client-fetch/types.gen.ts.snap @@ -0,0 +1,1818 @@ +// This file is auto-generated by @hey-api/openapi-ts + +/** + * Testing multiline comments in string: First line + * Second line + * + * Fourth line + */ +export type camelCaseCommentWithBreaks = number; + +/** + * Testing multiline comments in string: First line + * Second line + * + * Fourth line + */ +export type CommentWithBreaks = number; + +/** + * Testing backticks in string: `backticks` and ```multiple backticks``` should work + */ +export type CommentWithBackticks = number; + +/** + * Testing backticks and quotes in string: `backticks`, 'quotes', "double quotes" and ```multiple backticks``` should work + */ +export type CommentWithBackticksAndQuotes = number; + +/** + * Testing slashes in string: \backwards\\\ and /forwards/// should work + */ +export type CommentWithSlashes = number; + +/** + * Testing expression placeholders in string: ${expression} should work + */ +export type CommentWithExpressionPlaceholders = number; + +/** + * Testing quotes in string: 'single quote''' and "double quotes""" should work + */ +export type CommentWithQuotes = number; + +/** + * Testing reserved characters in string: * inline * and ** inline ** should work + */ +export type CommentWithReservedCharacters = number; + +/** + * This is a simple number + */ +export type SimpleInteger = number; + +/** + * This is a simple boolean + */ +export type SimpleBoolean = boolean; + +/** + * This is a simple string + */ +export type SimpleString = string; + +/** + * A string with non-ascii (unicode) characters valid in typescript identifiers (ÃĶÃļÃĨÆØÅÃķÔÃĻÈ字įŽĶäļē) + */ +export type NonAsciiStringÃĶÃļÃĨÆØÅÃķÃīÊÊ字įŽĶäļē = string; + +/** + * This is a simple file + */ +export type SimpleFile = (Blob | File); + +/** + * This is a simple reference + */ +export type SimpleReference = ModelWithString; + +/** + * This is a simple string + */ +export type SimpleStringWithPattern = string | null; + +/** + * This is a simple enum with strings + */ +export type EnumWithStrings = 'Success' | 'Warning' | 'Error' | "'Single Quote'" | '"Double Quotes"' | 'Non-ascii: ÃļÃĶÃĨÃīÃķØÆÅÔÖ字įŽĶäļē'; + +/** + * This is a simple enum with strings + */ +export const EnumWithStrings = { + SUCCESS: 'Success', + WARNING: 'Warning', + ERROR: 'Error', + _SINGLE_QUOTE_: "'Single Quote'", + _DOUBLE_QUOTES_: '"Double Quotes"', + 'NON_ASCII__ØÆÅÔÖ_ØÆÅÔÖ字įŽĶäļē': 'Non-ascii: ÃļÃĶÃĨÃīÃķØÆÅÔÖ字įŽĶäļē' +} as const; + +export type EnumWithReplacedCharacters = "'Single Quote'" | '"Double Quotes"' | 'ÃļÃĶÃĨÃīÃķØÆÅÔÖ字įŽĶäļē' | 3.1 | ''; + +export const EnumWithReplacedCharacters = { + _SINGLE_QUOTE_: "'Single Quote'", + _DOUBLE_QUOTES_: '"Double Quotes"', + 'ØÆÅÔÖ_ØÆÅÔÖ字įŽĶäļē': 'ÃļÃĶÃĨÃīÃķØÆÅÔÖ字įŽĶäļē', + '_3.1': 3.1, + EMPTY_STRING: '' +} as const; + +/** + * This is a simple enum with numbers + */ +export type EnumWithNumbers = 1 | 2 | 3 | 1.1 | 1.2 | 1.3 | 100 | 200 | 300 | -100 | -200 | -300 | -1.1 | -1.2 | -1.3; + +/** + * This is a simple enum with numbers + */ +export const EnumWithNumbers = { + '_1': 1, + '_2': 2, + '_3': 3, + '_1.1': 1.1, + '_1.2': 1.2, + '_1.3': 1.3, + '_100': 100, + '_200': 200, + '_300': 300, + '_-100': -100, + '_-200': -200, + '_-300': -300, + '_-1.1': -1.1, + '_-1.2': -1.2, + '_-1.3': -1.3 +} as const; + +/** + * Success=1,Warning=2,Error=3 + */ +export type EnumFromDescription = number; + +/** + * This is a simple enum with numbers + */ +export type EnumWithExtensions = 200 | 400 | 500; + +/** + * This is a simple enum with numbers + */ +export const EnumWithExtensions = { + /** + * Used when the status of something is successful + */ + CUSTOM_SUCCESS: 200, + /** + * Used when the status of something has a warning + */ + CUSTOM_WARNING: 400, + /** + * Used when the status of something has an error + */ + CUSTOM_ERROR: 500 +} as const; + +export type EnumWithXEnumNames = 0 | 1 | 2; + +export const EnumWithXEnumNames = { + zero: 0, + one: 1, + two: 2 +} as const; + +/** + * This is a simple array with numbers + */ +export type ArrayWithNumbers = Array<(number)>; + +/** + * This is a simple array with booleans + */ +export type ArrayWithBooleans = Array<(boolean)>; + +/** + * This is a simple array with strings + */ +export type ArrayWithStrings = Array<(string)>; + +/** + * This is a simple array with references + */ +export type ArrayWithReferences = Array; + +/** + * This is a simple array containing an array + */ +export type ArrayWithArray = Array>; + +/** + * This is a simple array with properties + */ +export type ArrayWithProperties = Array<{ + '16x16'?: camelCaseCommentWithBreaks; + bar?: string; +}>; + +/** + * This is a simple array with any of properties + */ +export type ArrayWithAnyOfProperties = Array<({ + foo?: string; +} | { + bar?: string; +})>; + +export type AnyOfAnyAndNull = { + data?: unknown | null; +}; + +/** + * This is a simple array with any of properties + */ +export type AnyOfArrays = { + results?: Array<({ + foo?: string; +} | { + bar?: string; +})>; +}; + +/** + * This is a string dictionary + */ +export type DictionaryWithString = { + [key: string]: (string); +}; + +export type DictionaryWithPropertiesAndAdditionalProperties = { + foo?: number; + bar?: boolean; + '[key: string]': (string | number | boolean) | undefined; +}; + +/** + * This is a string reference + */ +export type DictionaryWithReference = { + [key: string]: ModelWithString; +}; + +/** + * This is a complex dictionary + */ +export type DictionaryWithArray = { + [key: string]: Array; +}; + +/** + * This is a string dictionary + */ +export type DictionaryWithDictionary = { + [key: string]: { + [key: string]: (string); + }; +}; + +/** + * This is a complex dictionary + */ +export type DictionaryWithProperties = { + [key: string]: { + foo?: string; + bar?: string; + }; +}; + +/** + * This is a model with one number property + */ +export type ModelWithInteger = { + /** + * This is a simple number property + */ + prop?: number; +}; + +/** + * This is a model with one boolean property + */ +export type ModelWithBoolean = { + /** + * This is a simple boolean property + */ + prop?: boolean; +}; + +/** + * This is a model with one string property + */ +export type ModelWithString = { + /** + * This is a simple string property + */ + prop?: string; +}; + +/** + * This is a model with one string property + */ +export type ModelWithStringError = { + /** + * This is a simple string property + */ + prop?: string; +}; + +/** + * `Comment` or `VoiceComment`. The JSON object for adding voice comments to tickets is different. See [Adding voice comments to tickets](/documentation/ticketing/managing-tickets/adding-voice-comments-to-tickets) + */ +export type Model_From_Zendesk = string; + +/** + * This is a model with one string property + */ +export type ModelWithNullableString = { + /** + * This is a simple string property + */ + nullableProp1?: string | null; + /** + * This is a simple string property + */ + nullableRequiredProp1: string | null; + /** + * This is a simple string property + */ + nullableProp2?: string | null; + /** + * This is a simple string property + */ + nullableRequiredProp2: string | null; + /** + * This is a simple enum with strings + */ + 'foo_bar-enum'?: 'Success' | 'Warning' | 'Error' | 'ØÆÅ字įŽĶäļē'; +}; + +/** + * This is a simple enum with strings + */ +export type foo_bar_enum = 'Success' | 'Warning' | 'Error' | 'ØÆÅ字įŽĶäļē'; + +/** + * This is a simple enum with strings + */ +export const foo_bar_enum = { + SUCCESS: 'Success', + WARNING: 'Warning', + ERROR: 'Error', + 'ØÆÅ字įŽĶäļē': 'ØÆÅ字įŽĶäļē' +} as const; + +/** + * This is a model with one enum + */ +export type ModelWithEnum = { + /** + * This is a simple enum with strings + */ + 'foo_bar-enum'?: 'Success' | 'Warning' | 'Error' | 'ØÆÅ字įŽĶäļē'; + /** + * These are the HTTP error code enums + */ + statusCode?: '100' | '200 FOO' | '300 FOO_BAR' | '400 foo-bar' | '500 foo.bar' | '600 foo&bar'; + /** + * Simple boolean enum + */ + bool?: boolean; +}; + +/** + * These are the HTTP error code enums + */ +export type statusCode = '100' | '200 FOO' | '300 FOO_BAR' | '400 foo-bar' | '500 foo.bar' | '600 foo&bar'; + +/** + * These are the HTTP error code enums + */ +export const statusCode = { + _100: '100', + _200_FOO: '200 FOO', + _300_FOO_BAR: '300 FOO_BAR', + _400_FOO_BAR: '400 foo-bar', + _500_FOO_BAR: '500 foo.bar', + _600_FOO_BAR: '600 foo&bar' +} as const; + +/** + * This is a model with one enum with escaped name + */ +export type ModelWithEnumWithHyphen = { + 'foo-bar-baz-qux'?: '3.0'; +}; + +export type foo_bar_baz_qux = '3.0'; + +export const foo_bar_baz_qux = { + _3_0: '3.0' +} as const; + +/** + * This is a model with one enum + */ +export type ModelWithEnumFromDescription = { + /** + * Success=1,Warning=2,Error=3 + */ + test?: number; +}; + +/** + * This is a model with nested enums + */ +export type ModelWithNestedEnums = { + dictionaryWithEnum?: { + [key: string]: ('Success' | 'Warning' | 'Error'); + }; + dictionaryWithEnumFromDescription?: { + [key: string]: (number); + }; + arrayWithEnum?: Array<('Success' | 'Warning' | 'Error')>; + arrayWithDescription?: Array<(number)>; + /** + * This is a simple enum with strings + */ + 'foo_bar-enum'?: 'Success' | 'Warning' | 'Error' | 'ØÆÅ字įŽĶäļē'; +}; + +/** + * This is a model with one property containing a reference + */ +export type ModelWithReference = { + prop?: ModelWithProperties; +}; + +/** + * This is a model with one property containing an array + */ +export type ModelWithArrayReadOnlyAndWriteOnly = { + prop?: Array; + propWithFile?: Array<((Blob | File))>; + propWithNumber?: Array<(number)>; +}; + +/** + * This is a model with one property containing an array + */ +export type ModelWithArray = { + prop?: Array; + propWithFile?: Array<((Blob | File))>; + propWithNumber?: Array<(number)>; +}; + +/** + * This is a model with one property containing a dictionary + */ +export type ModelWithDictionary = { + prop?: { + [key: string]: (string); + }; +}; + +/** + * This is a deprecated model with a deprecated property + * @deprecated + */ +export type DeprecatedModel = { + /** + * This is a deprecated property + * @deprecated + */ + prop?: string; +}; + +/** + * This is a model with one property containing a circular reference + */ +export type ModelWithCircularReference = { + prop?: ModelWithCircularReference; +}; + +/** + * This is a model with one property with a 'one of' relationship + */ +export type CompositionWithOneOf = { + propA?: ModelWithString | ModelWithEnum | ModelWithArray | ModelWithDictionary; +}; + +/** + * This is a model with one property with a 'one of' relationship where the options are not $ref + */ +export type CompositionWithOneOfAnonymous = { + propA?: { + propA?: string; +} | string | number; +}; + +/** + * Circle + */ +export type ModelCircle = { + kind: 'circle'; + radius?: number; +}; + +/** + * Square + */ +export type ModelSquare = { + kind: 'square'; + sideLength?: number; +}; + +/** + * This is a model with one property with a 'one of' relationship where the options are not $ref + */ +export type CompositionWithOneOfDiscriminator = ModelCircle | ModelSquare; + +/** + * This is a model with one property with a 'any of' relationship + */ +export type CompositionWithAnyOf = { + propA?: ModelWithString | ModelWithEnum | ModelWithArray | ModelWithDictionary; +}; + +/** + * This is a model with one property with a 'any of' relationship where the options are not $ref + */ +export type CompositionWithAnyOfAnonymous = { + propA?: { + propA?: string; +} | string | number; +}; + +/** + * This is a model with nested 'any of' property with a type null + */ +export type CompositionWithNestedAnyAndTypeNull = { + propA?: Array<(ModelWithDictionary | null)> | Array<(ModelWithArray | null)>; +}; + +export type e_num_1ПÐĩŅ€ÐļÐūÐī = 'Bird' | 'Dog'; + +export const e_num_1ПÐĩŅ€ÐļÐūÐī = { + BIRD: 'Bird', + DOG: 'Dog' +} as const; + +export type ConstValue = "ConstValue"; + +/** + * This is a model with one property with a 'any of' relationship where the options are not $ref + */ +export type CompositionWithNestedAnyOfAndNull = { + propA?: Array<(e_num_1ПÐĩŅ€ÐļÐūÐī | ConstValue)> | null; +}; + +/** + * This is a model with one property with a 'one of' relationship + */ +export type CompositionWithOneOfAndNullable = { + propA?: { + boolean?: boolean; +} | ModelWithEnum | ModelWithArray | ModelWithDictionary | null; +}; + +/** + * This is a model that contains a simple dictionary within composition + */ +export type CompositionWithOneOfAndSimpleDictionary = { + propA?: boolean | { + [key: string]: (number); +}; +}; + +/** + * This is a model that contains a dictionary of simple arrays within composition + */ +export type CompositionWithOneOfAndSimpleArrayDictionary = { + propA?: boolean | { + [key: string]: Array<(boolean)>; +}; +}; + +/** + * This is a model that contains a dictionary of complex arrays (composited) within composition + */ +export type CompositionWithOneOfAndComplexArrayDictionary = { + propA?: boolean | { + [key: string]: Array<(number | string)>; +}; +}; + +/** + * This is a model with one property with a 'all of' relationship + */ +export type CompositionWithAllOfAndNullable = { + propA?: ({ + boolean?: boolean; +} & ModelWithEnum & ModelWithArray & ModelWithDictionary) | null; +}; + +/** + * This is a model with one property with a 'any of' relationship + */ +export type CompositionWithAnyOfAndNullable = { + propA?: { + boolean?: boolean; +} | ModelWithEnum | ModelWithArray | ModelWithDictionary | null; +}; + +/** + * This is a base model with two simple optional properties + */ +export type CompositionBaseModel = { + firstName?: string; + lastname?: string; +}; + +/** + * This is a model that extends the base model + */ +export type CompositionExtendedModel = CompositionBaseModel & { + firstName: string; + lastname: string; + age: number; +}; + +/** + * This is a model with one nested property + */ +export type ModelWithProperties = { + required: string; + readonly requiredAndReadOnly: string; + requiredAndNullable: string | null; + string?: string; + number?: number; + boolean?: boolean; + reference?: ModelWithString; + 'property with space'?: string; + default?: string; + try?: string; + readonly '@namespace.string'?: string; + readonly '@namespace.integer'?: number; +}; + +/** + * This is a model with one nested property + */ +export type ModelWithNestedProperties = { + readonly first: { + readonly second: { + readonly third: string | null; + } | null; + } | null; +}; + +/** + * This is a model with duplicated properties + */ +export type ModelWithDuplicateProperties = { + prop?: ModelWithString; +}; + +/** + * This is a model with ordered properties + */ +export type ModelWithOrderedProperties = { + zebra?: string; + apple?: string; + hawaii?: string; +}; + +/** + * This is a model with duplicated imports + */ +export type ModelWithDuplicateImports = { + propA?: ModelWithString; + propB?: ModelWithString; + propC?: ModelWithString; +}; + +/** + * This is a model that extends another model + */ +export type ModelThatExtends = ModelWithString & { + propExtendsA?: string; + propExtendsB?: ModelWithString; +}; + +/** + * This is a model that extends another model + */ +export type ModelThatExtendsExtends = ModelWithString & ModelThatExtends & { + propExtendsC?: string; + propExtendsD?: ModelWithString; +}; + +/** + * This is a model that contains a some patterns + */ +export type ModelWithPattern = { + key: string; + name: string; + readonly enabled?: boolean; + readonly modified?: string; + id?: string; + text?: string; + patternWithSingleQuotes?: string; + patternWithNewline?: string; + patternWithBacktick?: string; +}; + +export type File = { + readonly id?: string; + readonly updated_at?: string; + readonly created_at?: string; + mime: string; + readonly file?: string; +}; + +export type _default = { + name?: string; +}; + +export type Pageable = { + page?: number; + size?: number; + sort?: Array<(string)>; +}; + +/** + * This is a free-form object without additionalProperties. + */ +export type FreeFormObjectWithoutAdditionalProperties = { + [key: string]: unknown; +}; + +/** + * This is a free-form object with additionalProperties: true. + */ +export type FreeFormObjectWithAdditionalPropertiesEqTrue = { + [key: string]: unknown; +}; + +/** + * This is a free-form object with additionalProperties: {}. + */ +export type FreeFormObjectWithAdditionalPropertiesEqEmptyObject = { + [key: string]: unknown; +}; + +export type ModelWithConst = { + String?: "String"; + number?: 0; + null?: null; + withType?: "Some string"; +}; + +/** + * This is a model with one property and additionalProperties: true + */ +export type ModelWithAdditionalPropertiesEqTrue = { + /** + * This is a simple string property + */ + prop?: string; + '[key: string]': unknown | string; +}; + +export type NestedAnyOfArraysNullable = { + nullableArray?: Array<(string | boolean)> | null; +}; + +export type CompositionWithOneOfAndProperties = { + foo: ParameterSimpleParameter; + baz: number | null; + qux: number; +} | { + bar: NonAsciiStringÃĶÃļÃĨÆØÅÃķÃīÊÊ字įŽĶäļē; + baz: number | null; + qux: number; +}; + +/** + * An object that can be null + */ +export type NullableObject = { + foo?: string; +} | null; + +/** + * Some % character + */ +export type CharactersInDescription = string; + +export type ModelWithNullableObject = { + data?: NullableObject; +}; + +export type ModelWithOneOfEnum = { + foo: 'Bar'; +} | { + foo: 'Baz'; +} | { + foo: 'Qux'; +} | { + content: string; + foo: 'Quux'; +} | { + content: [ + string, + string + ]; + foo: 'Corge'; +}; + +export type foo = 'Bar'; + +export const foo = { + BAR: 'Bar' +} as const; + +export type ModelWithNestedArrayEnumsDataFoo = 'foo' | 'bar'; + +export const ModelWithNestedArrayEnumsDataFoo = { + FOO: 'foo', + BAR: 'bar' +} as const; + +export type ModelWithNestedArrayEnumsDataBar = 'baz' | 'qux'; + +export const ModelWithNestedArrayEnumsDataBar = { + BAZ: 'baz', + QUX: 'qux' +} as const; + +export type ModelWithNestedArrayEnumsData = { + foo?: Array; + bar?: Array; +}; + +export type ModelWithNestedArrayEnums = { + array_strings?: Array<(string)>; + data?: ModelWithNestedArrayEnumsData; +}; + +export type ModelWithNestedCompositionEnums = { + foo?: ModelWithNestedArrayEnumsDataFoo; +}; + +export type ModelWithReadOnlyAndWriteOnly = { + foo: string; + readonly bar: string; + baz: string; +}; + +export type ModelWithConstantSizeArray = [ + number, + number +]; + +export type ModelWithAnyOfConstantSizeArray = [ + number | string, + number | string, + number | string +]; + +export type ModelWithAnyOfConstantSizeArrayNullable = [ + number | null | string, + number | null | string, + number | null | string +]; + +export type ModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = [ + number | string, + number | string +]; + +export type ModelWithAnyOfConstantSizeArrayAndIntersect = [ + number & string, + number & string +]; + +export type ModelWithNumericEnumUnion = { + /** + * ПÐĩŅ€ÐļÐūÐī + */ + value?: -10 | -1 | 0 | 1 | 3 | 6 | 12; +}; + +/** + * ПÐĩŅ€ÐļÐūÐī + */ +export type value = -10 | -1 | 0 | 1 | 3 | 6 | 12; + +/** + * ПÐĩŅ€ÐļÐūÐī + */ +export const value = { + '_-10': -10, + '_-1': -1, + '_0': 0, + '_1': 1, + '_3': 3, + '_6': 6, + '_12': 12 +} as const; + +/** + * Some description with `back ticks` + */ +export type ModelWithBackticksInDescription = { + /** + * The template `that` should be used for parsing and importing the contents of the CSV file. + * + *

There is one placeholder currently supported:

  • ${x} - refers to the n-th column in the CSV file, e.g. ${1}, ${2}, ...)

Example of a correct JSON template:

+ *
+     * [
+     * {
+     * "resourceType": "Asset",
+     * "identifier": {
+     * "name": "${1}",
+     * "domain": {
+     * "name": "${2}",
+     * "community": {
+     * "name": "Some Community"
+     * }
+     * }
+     * },
+     * "attributes" : {
+     * "00000000-0000-0000-0000-000000003115" : [ {
+     * "value" : "${3}"
+     * } ],
+     * "00000000-0000-0000-0000-000000000222" : [ {
+     * "value" : "${4}"
+     * } ]
+     * }
+     * }
+     * ]
+     * 
+ */ + template?: string; +}; + +/** + * Model used to test deduplication strategy (unused) + */ +export type ParameterSimpleParameterUnused = string; + +/** + * Model used to test deduplication strategy + */ +export type PostServiceWithEmptyTagResponse = string; + +/** + * Model used to test deduplication strategy + */ +export type PostServiceWithEmptyTagResponse2 = string; + +/** + * Model used to test deduplication strategy + */ +export type DeleteFooData = string; + +/** + * Model used to test deduplication strategy + */ +export type DeleteFooData2 = string; + +/** + * This is a reusable parameter + */ +export type ParameterSimpleParameter = string; + +/** + * Parameter with illegal characters + */ +export type Parameterx_Foo_Bar = ModelWithString; + +export type PostServiceWithEmptyTagData = { + body: ModelWithReadOnlyAndWriteOnly | ModelWithArrayReadOnlyAndWriteOnly; +}; + +export type PostServiceWithEmptyTagResponse3 = ModelWithReadOnlyAndWriteOnly; + +export type PostServiceWithEmptyTagError = unknown; + +export type ApiVversionOdataControllerCountResponse = Model_From_Zendesk; + +export type ApiVversionOdataControllerCountError = unknown; + +export type DeleteFooData3 = { + headers: { + /** + * Parameter with illegal characters + */ + 'x-Foo-Bar': ModelWithString; + }; + path: { + /** + * bar in method + */ + BarParam: string; + /** + * foo in method + */ + foo_param: string; + }; +}; + +export type CallWithDescriptionsData = { + query?: { + /** + * Testing backticks in string: `backticks` and ```multiple backticks``` should work + */ + parameterWithBackticks?: unknown; + /** + * Testing multiline comments in string: First line + * Second line + * + * Fourth line + */ + parameterWithBreaks?: unknown; + /** + * Testing expression placeholders in string: ${expression} should work + */ + parameterWithExpressionPlaceholders?: unknown; + /** + * Testing quotes in string: 'single quote''' and "double quotes""" should work + */ + parameterWithQuotes?: unknown; + /** + * Testing reserved characters in string: * inline * and ** inline ** should work + */ + parameterWithReservedCharacters?: unknown; + /** + * Testing slashes in string: \backwards\\\ and /forwards/// should work + */ + parameterWithSlashes?: unknown; + }; +}; + +export type DeprecatedCallData = { + headers: { + /** + * This parameter is deprecated + * @deprecated + */ + parameter: DeprecatedModel | null; + }; +}; + +export type CallWithParametersData = { + /** + * This is the parameter that goes into the body + */ + body: ModelWithString | null; + headers: { + /** + * This is the parameter that goes into the header + */ + parameterHeader: string | null; + }; + path: { + /** + * This is the parameter that goes into the path + */ + parameterPath: string | null; + }; + query: { + foo_all_of_enum: ModelWithNestedArrayEnumsDataFoo; + foo_ref_enum?: ModelWithNestedArrayEnumsDataFoo; + /** + * This is the parameter that goes into the query params + */ + parameterQuery: string | null; + }; +}; + +export type CallWithWeirdParameterNamesData = { + /** + * This is the parameter that goes into the body + */ + body: ModelWithString | null; + headers: { + /** + * This is the parameter that goes into the request header + */ + 'parameter.header': string | null; + }; + path?: { + /** + * This is the parameter that goes into the path + */ + 'parameter-path-2'?: string; + /** + * This is the parameter that goes into the path + */ + 'PARAMETER-PATH-3'?: string; + /** + * This is the parameter that goes into the path + */ + 'parameter.path.1'?: string; + }; + query: { + /** + * This is the parameter with a reserved keyword + */ + default?: string; + /** + * This is the parameter that goes into the request query params + */ + 'parameter-query': string | null; + }; +}; + +export type GetCallWithOptionalParamData = { + /** + * This is a required parameter + */ + body: ModelWithOneOfEnum; + query?: { + /** + * This is an optional parameter + */ + parameter?: string; + }; +}; + +export type PostCallWithOptionalParamData = { + /** + * This is an optional parameter + */ + body?: ModelWithString; + query: { + /** + * This is a required parameter + */ + parameter: Pageable; + }; +}; + +export type PostApiRequestBodyData = { + /** + * A reusable request body + */ + body?: ModelWithString; + query?: { + /** + * This is a reusable parameter + */ + parameter?: string; + }; +}; + +export type PostApiFormDataData = { + query?: { + /** + * This is a reusable parameter + */ + parameter?: string; + }; +}; + +export type CallWithDefaultParametersData = { + query?: { + /** + * This is a simple boolean with default value + */ + parameterBoolean?: boolean | null; + /** + * This is a simple enum with default value + */ + parameterEnum?: 'Success' | 'Warning' | 'Error'; + /** + * This is a simple model with default value + */ + parameterModel?: ModelWithString | null; + /** + * This is a simple number with default value + */ + parameterNumber?: number | null; + /** + * This is a simple string with default value + */ + parameterString?: string | null; + }; +}; + +export type CallWithDefaultOptionalParametersData = { + query?: { + /** + * This is a simple boolean that is optional with default value + */ + parameterBoolean?: boolean; + /** + * This is a simple enum that is optional with default value + */ + parameterEnum?: 'Success' | 'Warning' | 'Error'; + /** + * This is a simple model that is optional with default value + */ + parameterModel?: ModelWithString; + /** + * This is a simple number that is optional with default value + */ + parameterNumber?: number; + /** + * This is a simple string that is optional with default value + */ + parameterString?: string; + }; +}; + +export type CallToTestOrderOfParamsData = { + query: { + /** + * This is a optional string with default + */ + parameterOptionalStringWithDefault?: string; + /** + * This is a optional string with empty default + */ + parameterOptionalStringWithEmptyDefault?: string; + /** + * This is a optional string with no default + */ + parameterOptionalStringWithNoDefault?: string; + /** + * This is a string that can be null with default + */ + parameterStringNullableWithDefault?: string | null; + /** + * This is a string that can be null with no default + */ + parameterStringNullableWithNoDefault?: string | null; + /** + * This is a string with default + */ + parameterStringWithDefault: string; + /** + * This is a string with empty default + */ + parameterStringWithEmptyDefault: string; + /** + * This is a string with no default + */ + parameterStringWithNoDefault: string; + }; +}; + +export type CallWithNoContentResponseResponse = void; + +export type CallWithNoContentResponseError = unknown; + +export type CallWithResponseAndNoContentResponseResponse = number | void; + +export type CallWithResponseAndNoContentResponseError = unknown; + +export type DummyAResponse = void; + +export type DummyAError = unknown; + +export type DummyBResponse = void; + +export type DummyBError = unknown; + +export type CallWithResponseResponse = ModelWithString; + +export type CallWithResponseError = unknown; + +export type CallWithDuplicateResponsesResponse = ModelWithBoolean & ModelWithInteger | ModelWithString; + +export type CallWithDuplicateResponsesError = unknown; + +export type CallWithResponsesResponse = { + readonly '@namespace.string'?: string; + readonly '@namespace.integer'?: number; + readonly value?: Array; +} | ModelThatExtends | ModelThatExtendsExtends; + +export type CallWithResponsesError = unknown; + +export type CollectionFormatData = { + query: { + /** + * This is an array parameter that is sent as csv format (comma-separated values) + */ + parameterArrayCSV: Array<(string)> | null; + /** + * This is an array parameter that is sent as multi format (multiple parameter instances) + */ + parameterArrayMulti: Array<(string)> | null; + /** + * This is an array parameter that is sent as pipes format (pipe-separated values) + */ + parameterArrayPipes: Array<(string)> | null; + /** + * This is an array parameter that is sent as ssv format (space-separated values) + */ + parameterArraySSV: Array<(string)> | null; + /** + * This is an array parameter that is sent as tsv format (tab-separated values) + */ + parameterArrayTSV: Array<(string)> | null; + }; +}; + +export type TypesData = { + path?: { + /** + * This is a number parameter + */ + id?: number; + }; + query: { + /** + * This is an array parameter + */ + parameterArray: Array<(string)> | null; + /** + * This is a boolean parameter + */ + parameterBoolean: boolean | null; + /** + * This is a dictionary parameter + */ + parameterDictionary: { + [key: string]: unknown; + } | null; + /** + * This is an enum parameter + */ + parameterEnum: 'Success' | 'Warning' | 'Error' | null; + /** + * This is a number parameter + */ + parameterNumber: number; + /** + * This is an object parameter + */ + parameterObject: { + [key: string]: unknown; + } | null; + /** + * This is a string parameter + */ + parameterString: string | null; + }; +}; + +export type TypesResponse = number | string | boolean | { + [key: string]: unknown; +}; + +export type TypesError = unknown; + +export type UploadFileData = unknown; + +export type UploadFileResponse = boolean; + +export type UploadFileError = unknown; + +export type FileResponseData = { + path: { + id: string; + }; +}; + +export type FileResponseResponse = (Blob | File); + +export type FileResponseError = unknown; + +export type ComplexTypesData = { + query: { + /** + * Parameter containing object + */ + parameterObject: { + first?: { + second?: { + third?: string; + }; + }; + }; + /** + * Parameter containing reference + */ + parameterReference: ModelWithString; + }; +}; + +export type ComplexTypesResponse = Array; + +export type ComplexTypesError = unknown; + +export type MultipartRequestData = unknown; + +export type MultipartResponseResponse = { + file?: (Blob | File); + metadata?: { + foo?: string; + bar?: string; + }; +}; + +export type MultipartResponseError = unknown; + +export type ComplexParamsData = { + body?: { + readonly key: string | null; + name: string | null; + enabled?: boolean; + readonly type: 'Monkey' | 'Horse' | 'Bird'; + listOfModels?: Array | null; + listOfStrings?: Array<(string)> | null; + parameters: ModelWithString | ModelWithEnum | ModelWithArray | ModelWithDictionary; + readonly user?: { + readonly id?: number; + readonly name?: string | null; + }; + }; + path: { + id: number; + }; +}; + +export type ComplexParamsResponse = ModelWithString; + +export type ComplexParamsError = unknown; + +export type CallWithResultFromHeaderResponse = string; + +export type CallWithResultFromHeaderError = unknown; + +export type TestErrorCodeData = { + query: { + /** + * Status code to return + */ + status: number; + }; +}; + +export type TestErrorCodeResponse = unknown; + +export type TestErrorCodeError = unknown; + +export type NonAsciiÃĶÃļÃĨÆÃļÅÃķÃīÊÊ字įŽĶäļēData = { + query: { + /** + * Dummy input param + */ + nonAsciiParamÃĶÃļÃĨÆØÅÃķÃīÊÊ: number; + }; +}; + +export type NonAsciiÃĶÃļÃĨÆÃļÅÃķÃīÊÊ字įŽĶäļēResponse = Array; + +export type NonAsciiÃĶÃļÃĨÆÃļÅÃķÃīÊÊ字įŽĶäļēError = unknown; + +export type $OpenApiTs = { + '/api/v{api-version}/no-tag': { + post: { + req: PostServiceWithEmptyTagData; + res: { + default: ModelWithReadOnlyAndWriteOnly; + }; + }; + }; + '/api/v{api-version}/simple/$count': { + get: { + res: { + /** + * Success + */ + '200': Model_From_Zendesk; + }; + }; + }; + '/api/v{api-version}/foo/{foo_param}/bar/{BarParam}': { + delete: { + req: DeleteFooData3; + }; + }; + '/api/v{api-version}/descriptions/': { + post: { + req: CallWithDescriptionsData; + }; + }; + '/api/v{api-version}/parameters/deprecated': { + post: { + req: DeprecatedCallData; + }; + }; + '/api/v{api-version}/parameters/{parameterPath}': { + post: { + req: CallWithParametersData; + }; + }; + '/api/v{api-version}/parameters/{parameter.path.1}/{parameter-path-2}/{PARAMETER-PATH-3}': { + post: { + req: CallWithWeirdParameterNamesData; + }; + }; + '/api/v{api-version}/parameters/': { + get: { + req: GetCallWithOptionalParamData; + }; + post: { + req: PostCallWithOptionalParamData; + }; + }; + '/api/v{api-version}/requestBody/': { + post: { + req: PostApiRequestBodyData; + }; + }; + '/api/v{api-version}/formData/': { + post: { + req: PostApiFormDataData; + }; + }; + '/api/v{api-version}/defaults': { + get: { + req: CallWithDefaultParametersData; + }; + post: { + req: CallWithDefaultOptionalParametersData; + }; + put: { + req: CallToTestOrderOfParamsData; + }; + }; + '/api/v{api-version}/no-content': { + get: { + res: { + /** + * Success + */ + '204': void; + }; + }; + }; + '/api/v{api-version}/multiple-tags/response-and-no-content': { + get: { + res: { + /** + * Response is a simple number + */ + '200': number; + /** + * Success + */ + '204': void; + }; + }; + }; + '/api/v{api-version}/multiple-tags/a': { + get: { + res: { + /** + * Success + */ + '204': void; + }; + }; + }; + '/api/v{api-version}/multiple-tags/b': { + get: { + res: { + /** + * Success + */ + '204': void; + }; + }; + }; + '/api/v{api-version}/response': { + get: { + res: { + default: ModelWithString; + }; + }; + post: { + res: { + /** + * Message for 200 response + */ + '200': ModelWithBoolean & ModelWithInteger; + /** + * Message for 201 response + */ + '201': ModelWithString; + /** + * Message for 500 error + */ + '500': ModelWithStringError; + /** + * Message for 501 error + */ + '501': ModelWithStringError; + /** + * Message for 502 error + */ + '502': ModelWithStringError; + /** + * Message for 4XX errors + */ + '4XX': DictionaryWithArray; + /** + * Message for default response + */ + default: ModelWithBoolean; + }; + }; + put: { + res: { + /** + * Message for 200 response + */ + '200': { + readonly '@namespace.string'?: string; + readonly '@namespace.integer'?: number; + readonly value?: Array; + }; + /** + * Message for 201 response + */ + '201': ModelThatExtends; + /** + * Message for 202 response + */ + '202': ModelThatExtendsExtends; + /** + * Message for 500 error + */ + '500': ModelWithStringError; + /** + * Message for 501 error + */ + '501': ModelWithStringError; + /** + * Message for 502 error + */ + '502': ModelWithStringError; + /** + * Message for default response + */ + default: ModelWithString; + }; + }; + }; + '/api/v{api-version}/collectionFormat': { + get: { + req: CollectionFormatData; + }; + }; + '/api/v{api-version}/types': { + get: { + req: TypesData; + res: { + /** + * Response is a simple number + */ + '200': number; + /** + * Response is a simple string + */ + '201': string; + /** + * Response is a simple boolean + */ + '202': boolean; + /** + * Response is a simple object + */ + '203': { + [key: string]: unknown; + }; + }; + }; + }; + '/api/v{api-version}/upload': { + post: { + req: UploadFileData; + res: { + '200': boolean; + }; + }; + }; + '/api/v{api-version}/file/{id}': { + get: { + req: FileResponseData; + res: { + /** + * Success + */ + '200': (Blob | File); + }; + }; + }; + '/api/v{api-version}/complex': { + get: { + req: ComplexTypesData; + res: { + /** + * Successful response + */ + '200': Array; + /** + * 400 `server` error + */ + '400': unknown; + /** + * 500 server error + */ + '500': unknown; + }; + }; + }; + '/api/v{api-version}/multipart': { + post: { + req: MultipartRequestData; + }; + get: { + res: { + /** + * OK + */ + '200': { + file?: (Blob | File); + metadata?: { + foo?: string; + bar?: string; + }; + }; + }; + }; + }; + '/api/v{api-version}/complex/{id}': { + put: { + req: ComplexParamsData; + res: { + /** + * Success + */ + '200': ModelWithString; + }; + }; + }; + '/api/v{api-version}/header': { + post: { + res: { + /** + * Successful response + */ + '200': string; + /** + * 400 server error + */ + '400': unknown; + /** + * 500 server error + */ + '500': unknown; + }; + }; + }; + '/api/v{api-version}/error': { + post: { + req: TestErrorCodeData; + res: { + /** + * Custom message: Successful response + */ + '200': unknown; + /** + * Custom message: Internal Server Error + */ + '500': unknown; + /** + * Custom message: Not Implemented + */ + '501': unknown; + /** + * Custom message: Bad Gateway + */ + '502': unknown; + /** + * Custom message: Service Unavailable + */ + '503': unknown; + }; + }; + }; + '/api/v{api-version}/non-ascii-ÃĶÃļÃĨÆØÅÃķÃīÊÊ字įŽĶäļē': { + post: { + req: NonAsciiÃĶÃļÃĨÆÃļÅÃķÃīÊÊ字įŽĶäļēData; + res: { + /** + * Successful response + */ + '200': Array; + }; + }; + }; +}; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_legacy_positional_args/core/ApiRequestOptions.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_legacy_positional_args/core/ApiRequestOptions.ts.snap index 8f8d4d159..f25a8910f 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_legacy_positional_args/core/ApiRequestOptions.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_legacy_positional_args/core/ApiRequestOptions.ts.snap @@ -9,5 +9,5 @@ export type ApiRequestOptions = { readonly body?: any; readonly mediaType?: string; readonly responseHeader?: string; - readonly errors?: Record; + readonly errors?: Record; }; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_legacy_positional_args/core/OpenAPI.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_legacy_positional_args/core/OpenAPI.ts.snap index 7286660a4..438d879ee 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_legacy_positional_args/core/OpenAPI.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_legacy_positional_args/core/OpenAPI.ts.snap @@ -11,14 +11,14 @@ export class Interceptors { this._fns = []; } - eject(fn: Middleware) { + eject(fn: Middleware): void { const index = this._fns.indexOf(fn); if (index !== -1) { this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)]; } } - use(fn: Middleware) { + use(fn: Middleware): void { this._fns = [...this._fns, fn]; } } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_models/types.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_models/types.gen.ts.snap index 1c6f51faa..dcfdce99d 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_models/types.gen.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_models/types.gen.ts.snap @@ -862,4 +862,4 @@ export type ParameterSimpleParameter = string; /** * Parameter with illegal characters */ -export type Parameterx_Foo_Bar = string; \ No newline at end of file +export type Parameterx_Foo_Bar = ModelWithString; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_node/core/ApiRequestOptions.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_node/core/ApiRequestOptions.ts.snap index 8f8d4d159..f25a8910f 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_node/core/ApiRequestOptions.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_node/core/ApiRequestOptions.ts.snap @@ -9,5 +9,5 @@ export type ApiRequestOptions = { readonly body?: any; readonly mediaType?: string; readonly responseHeader?: string; - readonly errors?: Record; + readonly errors?: Record; }; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_node/core/OpenAPI.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_node/core/OpenAPI.ts.snap index 091d25a4e..e62d0c4ce 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_node/core/OpenAPI.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_node/core/OpenAPI.ts.snap @@ -12,14 +12,14 @@ export class Interceptors { this._fns = []; } - eject(fn: Middleware) { + eject(fn: Middleware): void { const index = this._fns.indexOf(fn); if (index !== -1) { this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)]; } } - use(fn: Middleware) { + use(fn: Middleware): void { this._fns = [...this._fns, fn]; } } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_options/core/ApiRequestOptions.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_options/core/ApiRequestOptions.ts.snap index 8f8d4d159..f25a8910f 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_options/core/ApiRequestOptions.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_options/core/ApiRequestOptions.ts.snap @@ -9,5 +9,5 @@ export type ApiRequestOptions = { readonly body?: any; readonly mediaType?: string; readonly responseHeader?: string; - readonly errors?: Record; + readonly errors?: Record; }; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_options/core/OpenAPI.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_options/core/OpenAPI.ts.snap index 7286660a4..438d879ee 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_options/core/OpenAPI.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_options/core/OpenAPI.ts.snap @@ -11,14 +11,14 @@ export class Interceptors { this._fns = []; } - eject(fn: Middleware) { + eject(fn: Middleware): void { const index = this._fns.indexOf(fn); if (index !== -1) { this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)]; } } - use(fn: Middleware) { + use(fn: Middleware): void { this._fns = [...this._fns, fn]; } } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_services_name/services.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_services_name/services.gen.ts.snap index 3e31453b3..5ed28b187 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_services_name/services.gen.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_services_name/services.gen.ts.snap @@ -91,17 +91,21 @@ export class myAwesomeSimpleApi { export class myAwesomeParametersApi { /** * @param data The data for the request. - * @param data.foo foo in method - * @param data.bar bar in method + * @param data.fooParam foo in method + * @param data.barParam bar in method + * @param data.xFooBar Parameter with illegal characters * @throws ApiError */ public static deleteFoo(data: DeleteFooData3): CancelablePromise { return __request(OpenAPI, { method: 'DELETE', - url: '/api/v{api-version}/foo/{foo}/bar/{bar}', + url: '/api/v{api-version}/foo/{foo_param}/bar/{BarParam}', path: { - foo: data.foo, - bar: data.bar + foo_param: data.fooParam, + BarParam: data.barParam + }, + headers: { + 'x-Foo-Bar': data.xFooBar } }); } diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_tree_shakeable/services.gen.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_tree_shakeable/services.gen.ts.snap index f31221258..998bf0081 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_tree_shakeable/services.gen.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_tree_shakeable/services.gen.ts.snap @@ -93,16 +93,20 @@ export const patchCallWithoutParametersAndResponse = (): CancelablePromise /** * @param data The data for the request. - * @param data.foo foo in method - * @param data.bar bar in method + * @param data.fooParam foo in method + * @param data.barParam bar in method + * @param data.xFooBar Parameter with illegal characters * @throws ApiError */ export const deleteFoo = (data: DeleteFooData3): CancelablePromise => { return __request(OpenAPI, { method: 'DELETE', - url: '/api/v{api-version}/foo/{foo}/bar/{bar}', + url: '/api/v{api-version}/foo/{foo_param}/bar/{BarParam}', path: { - foo: data.foo, - bar: data.bar + foo_param: data.fooParam, + BarParam: data.barParam + }, + headers: { + 'x-Foo-Bar': data.xFooBar } }); }; @@ -434,7 +438,6 @@ export const callWithResponse = (): CancelablePromise /** * @returns unknown Message for 200 response * @returns ModelWithString Message for 201 response - * @returns ModelWithBoolean Message for default response * @throws ApiError */ export const callWithDuplicateResponses = (): CancelablePromise => { return __request(OpenAPI, { @@ -443,7 +446,9 @@ export const callWithDuplicateResponses = (): CancelablePromise => { return __request(OpenAPI, { @@ -460,7 +464,8 @@ export const callWithResponses = (): CancelablePromise; -} | ModelThatExtends | ModelThatExtendsExtends | ModelWithString; +} | ModelThatExtends | ModelThatExtendsExtends; export type CollectionFormatData = { /** @@ -1428,7 +1432,7 @@ export type $OpenApiTs = { }; }; }; - '/api/v{api-version}/foo/{foo}/bar/{bar}': { + '/api/v{api-version}/foo/{foo_param}/bar/{BarParam}': { delete: { req: DeleteFooData3; }; @@ -1554,6 +1558,10 @@ export type $OpenApiTs = { * Message for 502 error */ 502: ModelWithStringError; + /** + * Message for 4XX errors + */ + '4XX': DictionaryWithArray; /** * Message for default response */ diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_xhr/core/ApiRequestOptions.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_xhr/core/ApiRequestOptions.ts.snap index 8f8d4d159..f25a8910f 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_xhr/core/ApiRequestOptions.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_xhr/core/ApiRequestOptions.ts.snap @@ -9,5 +9,5 @@ export type ApiRequestOptions = { readonly body?: any; readonly mediaType?: string; readonly responseHeader?: string; - readonly errors?: Record; + readonly errors?: Record; }; \ No newline at end of file diff --git a/packages/openapi-ts/test/__snapshots__/test/generated/v3_xhr/core/OpenAPI.ts.snap b/packages/openapi-ts/test/__snapshots__/test/generated/v3_xhr/core/OpenAPI.ts.snap index ec476fed8..afe4ec663 100644 --- a/packages/openapi-ts/test/__snapshots__/test/generated/v3_xhr/core/OpenAPI.ts.snap +++ b/packages/openapi-ts/test/__snapshots__/test/generated/v3_xhr/core/OpenAPI.ts.snap @@ -11,14 +11,14 @@ export class Interceptors { this._fns = []; } - eject(fn: Middleware) { + eject(fn: Middleware): void { const index = this._fns.indexOf(fn); if (index !== -1) { this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)]; } } - use(fn: Middleware) { + use(fn: Middleware): void { this._fns = [...this._fns, fn]; } } diff --git a/packages/openapi-ts/test/index.spec.ts b/packages/openapi-ts/test/index.spec.ts index 3f1525fd2..e26aace0a 100644 --- a/packages/openapi-ts/test/index.spec.ts +++ b/packages/openapi-ts/test/index.spec.ts @@ -105,6 +105,16 @@ describe('OpenAPI v3', () => { description: 'generate axios client', name: 'v3_axios', }, + { + config: createConfig({ + client: '@hey-api/client-fetch', + services: { + asClass: false, + }, + }), + description: 'generate axios client', + name: 'v3_hey-api_client-fetch', + }, { config: createConfig({ client: 'xhr', diff --git a/packages/openapi-ts/test/sample.cjs b/packages/openapi-ts/test/sample.cjs index 7b391170d..82577fc69 100644 --- a/packages/openapi-ts/test/sample.cjs +++ b/packages/openapi-ts/test/sample.cjs @@ -3,7 +3,7 @@ const path = require('node:path'); const main = async () => { /** @type {import('../src/node/index').UserConfig} */ const config = { - client: 'fetch', + client: '@hey-api/client-fetch', input: './test/spec/v3.json', // input: 'https://mongodb-mms-prod-build-server.s3.amazonaws.com/openapi/2caffd88277a4e27c95dcefc7e3b6a63a3b03297-v2-2023-11-15.json', output: { @@ -13,7 +13,9 @@ const main = async () => { export: false, }, services: { - export: false, + asClass: true, + // export: false, + // name: '^Parameters', }, types: { enums: 'typescript', diff --git a/packages/openapi-ts/test/spec/v3.json b/packages/openapi-ts/test/spec/v3.json index 713c1065f..44c06dcff 100644 --- a/packages/openapi-ts/test/spec/v3.json +++ b/packages/openapi-ts/test/spec/v3.json @@ -96,7 +96,7 @@ "operationId": "PatchCallWithoutParametersAndResponse" } }, - "/api/v{api-version}/foo/{foo}/bar/{bar}": { + "/api/v{api-version}/foo/{foo_param}/bar/{BarParam}": { "delete": { "tags": ["Parameters"], "operationId": "deleteFoo", @@ -104,7 +104,7 @@ { "description": "foo in method", "in": "path", - "name": "foo", + "name": "foo_param", "required": true, "schema": { "type": "string" @@ -113,11 +113,24 @@ { "description": "bar in method", "in": "path", - "name": "bar", + "name": "BarParam", "required": true, "schema": { "type": "string" } + }, + { + "description": "Parameter with illegal characters", + "name": "x-Foo-Bar", + "in": "header", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModelWithString" + } + } + } } ] }, @@ -125,7 +138,7 @@ { "description": "foo in global parameters", "in": "path", - "name": "foo", + "name": "foo_param", "required": true, "schema": { "type": "string" @@ -134,7 +147,7 @@ { "description": "bar in global parameters", "in": "path", - "name": "bar", + "name": "BarParam", "required": true, "schema": { "type": "string" @@ -835,6 +848,16 @@ } } }, + "4XX": { + "description": "Message for 4XX errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DictionaryWithArray" + } + } + } + }, "500": { "description": "Message for 500 error", "content": { @@ -1636,8 +1659,12 @@ "name": "x-Foo-Bar", "in": "header", "required": true, - "schema": { - "type": "string" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModelWithString" + } + } } } }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 768fe9d74..e9734fb2d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,27 +8,27 @@ importers: .: devDependencies: + '@changesets/changelog-github': + specifier: 0.5.0 + version: 0.5.0(encoding@0.1.13) '@changesets/cli': specifier: 2.27.3 version: 2.27.3 '@rollup/plugin-commonjs': - specifier: 25.0.7 - version: 25.0.7(rollup@4.17.2) + specifier: 25.0.8 + version: 25.0.8(rollup@4.18.0) '@rollup/plugin-terser': specifier: 0.4.4 - version: 0.4.4(rollup@4.17.2) + version: 0.4.4(rollup@4.18.0) '@rollup/plugin-typescript': specifier: 11.1.6 - version: 11.1.6(rollup@4.17.2)(typescript@5.4.5) - '@svitejs/changesets-changelog-github-compact': - specifier: 1.1.0 - version: 1.1.0 + version: 11.1.6(rollup@4.18.0)(tslib@2.6.2)(typescript@5.4.5) '@types/node': specifier: 20.12.12 version: 20.12.12 '@vitest/coverage-v8': specifier: 1.6.0 - version: 1.6.0(vitest@1.6.0) + version: 1.6.0(vitest@1.6.0(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0)) eslint: specifier: 9.3.0 version: 9.3.0 @@ -48,8 +48,8 @@ importers: specifier: 9.0.11 version: 9.0.11 lint-staged: - specifier: 15.2.2 - version: 15.2.2 + specifier: 15.2.5 + version: 15.2.5 prettier: specifier: 3.2.5 version: 3.2.5 @@ -57,11 +57,11 @@ importers: specifier: 5.0.7 version: 5.0.7 rollup: - specifier: 4.17.2 - version: 4.17.2 + specifier: 4.18.0 + version: 4.18.0 rollup-plugin-dts: specifier: 6.1.1 - version: 6.1.1(rollup@4.17.2)(typescript@5.4.5) + version: 6.1.1(rollup@4.18.0)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -70,7 +70,7 @@ importers: version: 7.10.0(eslint@9.3.0)(typescript@5.4.5) vitest: specifier: 1.6.0 - version: 1.6.0(@types/node@20.12.12) + version: 1.6.0(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0) docs: dependencies: @@ -80,7 +80,7 @@ importers: devDependencies: vitepress: specifier: 1.2.2 - version: 1.2.2(@algolia/client-search@4.23.3)(@types/node@20.12.12)(search-insights@2.13.0)(typescript@5.4.5) + version: 1.2.2(@algolia/client-search@4.23.3)(@types/node@20.12.12)(@types/react@18.3.3)(axios@1.7.2)(less@4.2.0)(postcss@8.4.38)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.71.1)(search-insights@2.14.0)(terser@5.31.0)(typescript@5.4.5) examples/openapi-ts-axios: dependencies: @@ -88,8 +88,8 @@ importers: specifier: workspace:* version: link:../../packages/client-axios axios: - specifier: 1.7.1 - version: 1.7.1 + specifier: 1.7.2 + version: 1.7.2 react: specifier: 18.3.1 version: 18.3.1 @@ -101,20 +101,20 @@ importers: specifier: workspace:* version: link:../../packages/openapi-ts '@types/react': - specifier: 18.3.2 - version: 18.3.2 + specifier: 18.3.3 + version: 18.3.3 '@types/react-dom': specifier: 18.3.0 version: 18.3.0 '@typescript-eslint/eslint-plugin': specifier: 7.10.0 - version: 7.10.0(@typescript-eslint/parser@7.10.0)(eslint@9.3.0)(typescript@5.4.5) + version: 7.10.0(@typescript-eslint/parser@7.10.0(eslint@9.3.0)(typescript@5.4.5))(eslint@9.3.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: 7.10.0 version: 7.10.0(eslint@9.3.0)(typescript@5.4.5) '@vitejs/plugin-react': - specifier: 4.2.1 - version: 4.2.1(vite@5.2.11) + specifier: 4.3.0 + version: 4.3.0(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0)) eslint: specifier: 9.3.0 version: 9.3.0 @@ -132,7 +132,7 @@ importers: version: 5.4.5 vite: specifier: 5.2.11 - version: 5.2.11(@types/node@20.12.12) + version: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0) examples/openapi-ts-fetch: dependencies: @@ -141,13 +141,13 @@ importers: version: link:../../packages/client-fetch '@radix-ui/react-form': specifier: 0.0.3 - version: 0.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 0.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-icons': specifier: 1.3.0 version: 1.3.0(react@18.3.1) '@radix-ui/themes': specifier: 3.0.5 - version: 3.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) + version: 3.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: 18.3.1 version: 18.3.1 @@ -159,20 +159,20 @@ importers: specifier: workspace:* version: link:../../packages/openapi-ts '@types/react': - specifier: 18.3.2 - version: 18.3.2 + specifier: 18.3.3 + version: 18.3.3 '@types/react-dom': specifier: 18.3.0 version: 18.3.0 '@typescript-eslint/eslint-plugin': specifier: 7.10.0 - version: 7.10.0(@typescript-eslint/parser@7.10.0)(eslint@9.3.0)(typescript@5.4.5) + version: 7.10.0(@typescript-eslint/parser@7.10.0(eslint@9.3.0)(typescript@5.4.5))(eslint@9.3.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: 7.10.0 version: 7.10.0(eslint@9.3.0)(typescript@5.4.5) '@vitejs/plugin-react': - specifier: 4.2.1 - version: 4.2.1(vite@5.2.11) + specifier: 4.3.0 + version: 4.3.0(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0)) autoprefixer: specifier: 10.4.19 version: 10.4.19(postcss@8.4.38) @@ -193,19 +193,19 @@ importers: version: 3.2.5 tailwindcss: specifier: 3.4.3 - version: 3.4.3 + version: 3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) typescript: specifier: 5.4.5 version: 5.4.5 vite: specifier: 5.2.11 - version: 5.2.11(@types/node@20.12.12) + version: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0) packages/client-axios: devDependencies: axios: - specifier: 1.7.1 - version: 1.7.1 + specifier: 1.7.2 + version: 1.7.2 packages/client-core: {} @@ -231,43 +231,43 @@ importers: devDependencies: '@angular-devkit/build-angular': specifier: 17.3.7 - version: 17.3.7(@angular/compiler-cli@17.3.9)(@types/express@4.17.21)(@types/node@20.12.12)(typescript@5.4.5) + version: 17.3.7(@angular/compiler-cli@17.3.9(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(typescript@5.4.5))(@types/express@4.17.21)(@types/node@20.12.12)(chokidar@3.6.0)(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))(typescript@5.4.5) '@angular/animations': specifier: 17.3.9 - version: 17.3.9(@angular/core@17.3.9) + version: 17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)) '@angular/cli': specifier: 17.3.7 - version: 17.3.7 + version: 17.3.7(chokidar@3.6.0) '@angular/common': specifier: 17.3.9 - version: 17.3.9(@angular/core@17.3.9)(rxjs@7.8.1) + version: 17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1) '@angular/compiler': specifier: 17.3.9 - version: 17.3.9(@angular/core@17.3.9) + version: 17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)) '@angular/compiler-cli': specifier: 17.3.9 - version: 17.3.9(@angular/compiler@17.3.9)(typescript@5.4.5) + version: 17.3.9(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(typescript@5.4.5) '@angular/core': specifier: 17.3.9 version: 17.3.9(rxjs@7.8.1)(zone.js@0.14.6) '@angular/forms': specifier: 17.3.9 - version: 17.3.9(@angular/common@17.3.9)(@angular/core@17.3.9)(@angular/platform-browser@17.3.9)(rxjs@7.8.1) + version: 17.3.9(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(@angular/platform-browser@17.3.9(@angular/animations@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(rxjs@7.8.1) '@angular/platform-browser': specifier: 17.3.9 - version: 17.3.9(@angular/animations@17.3.9)(@angular/common@17.3.9)(@angular/core@17.3.9) + version: 17.3.9(@angular/animations@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)) '@angular/platform-browser-dynamic': specifier: 17.3.9 - version: 17.3.9(@angular/common@17.3.9)(@angular/compiler@17.3.9)(@angular/core@17.3.9)(@angular/platform-browser@17.3.9) + version: 17.3.9(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(@angular/platform-browser@17.3.9(@angular/animations@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))) '@angular/router': specifier: 17.3.9 - version: 17.3.9(@angular/common@17.3.9)(@angular/core@17.3.9)(@angular/platform-browser@17.3.9)(rxjs@7.8.1) + version: 17.3.9(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(@angular/platform-browser@17.3.9(@angular/animations@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(rxjs@7.8.1) '@rollup/plugin-json': specifier: 6.1.0 - version: 6.1.0(rollup@4.17.2) + version: 6.1.0(rollup@4.18.0) '@rollup/plugin-node-resolve': specifier: 15.2.3 - version: 15.2.3(rollup@4.17.2) + version: 15.2.3(rollup@4.18.0) '@types/cross-spawn': specifier: 6.0.6 version: 6.0.6 @@ -275,8 +275,8 @@ importers: specifier: 4.17.21 version: 4.17.21 axios: - specifier: 1.7.1 - version: 1.7.1 + specifier: 1.7.2 + version: 1.7.2 cross-spawn: specifier: 7.0.3 version: 7.0.3 @@ -287,8 +287,8 @@ importers: specifier: 4.19.2 version: 4.19.2 glob: - specifier: 10.3.15 - version: 10.3.15 + specifier: 10.4.1 + version: 10.4.1 node-fetch: specifier: 3.3.2 version: 3.3.2 @@ -296,8 +296,8 @@ importers: specifier: 3.2.5 version: 3.2.5 puppeteer: - specifier: 22.9.0 - version: 22.9.0(typescript@5.4.5) + specifier: 22.10.0 + version: 22.10.0(typescript@5.4.5) rxjs: specifier: 7.8.1 version: 7.8.1 @@ -535,8 +535,8 @@ packages: resolution: {integrity: sha512-ENUdLLT04aDbbHCRwfKf8gR67AhV0CdFrOAtk+FcakBAgaq6ds3HLK9X0BCyiFUz8pK9uP+k6YZyJaGG7Mt7vQ==} engines: {node: '>= 16'} - '@babel/code-frame@7.24.2': - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + '@babel/code-frame@7.24.6': + resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==} engines: {node: '>=6.9.0'} '@babel/compat-data@7.24.4': @@ -663,8 +663,8 @@ packages: resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.5': - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + '@babel/helper-validator-identifier@7.24.6': + resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} engines: {node: '>=6.9.0'} '@babel/helper-validator-option@7.23.5': @@ -679,8 +679,8 @@ packages: resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.5': - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} + '@babel/highlight@7.24.6': + resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} engines: {node: '>=6.9.0'} '@babel/parser@7.24.5': @@ -1160,6 +1160,9 @@ packages: '@changesets/changelog-git@0.2.0': resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + '@changesets/changelog-github@0.5.0': + resolution: {integrity: sha512-zoeq2LJJVcPJcIotHRJEEA2qCqX0AQIeFE+L21L8sRLPVqDhSXY8ZWAt2sohtBpFZkBwu+LUwMSKRr2lMy3LJA==} + '@changesets/cli@2.27.3': resolution: {integrity: sha512-ve/VpWApILlSs8cr0okNx5C2LKRawI9XZgvfmf58S8sar2nhx5DPJREFXYZBahs0FeTfvH0rdVl+nGe8QF45Ig==} hasBin: true @@ -1173,8 +1176,8 @@ packages: '@changesets/get-dependents-graph@2.0.0': resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} - '@changesets/get-github-info@0.5.2': - resolution: {integrity: sha512-JppheLu7S114aEs157fOZDjFqUDpm7eHdq5E8SSR0gUBTEK0cNSHsrSR5a66xs0z3RWuo46QvA3vawp8BxDHvg==} + '@changesets/get-github-info@0.6.0': + resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} '@changesets/get-release-plan@4.0.0': resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} @@ -2410,8 +2413,8 @@ packages: '@types/react-dom': optional: true - '@rollup/plugin-commonjs@25.0.7': - resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} + '@rollup/plugin-commonjs@25.0.8': + resolution: {integrity: sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -2468,83 +2471,83 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.17.2': - resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} + '@rollup/rollup-android-arm-eabi@4.18.0': + resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.17.2': - resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} + '@rollup/rollup-android-arm64@4.18.0': + resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.17.2': - resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} + '@rollup/rollup-darwin-arm64@4.18.0': + resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.17.2': - resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} + '@rollup/rollup-darwin-x64@4.18.0': + resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.17.2': - resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.17.2': - resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} + '@rollup/rollup-linux-arm-musleabihf@4.18.0': + resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.17.2': - resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} + '@rollup/rollup-linux-arm64-gnu@4.18.0': + resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.17.2': - resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} + '@rollup/rollup-linux-arm64-musl@4.18.0': + resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': - resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.17.2': - resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} + '@rollup/rollup-linux-riscv64-gnu@4.18.0': + resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.17.2': - resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} + '@rollup/rollup-linux-s390x-gnu@4.18.0': + resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.17.2': - resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} + '@rollup/rollup-linux-x64-gnu@4.18.0': + resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.17.2': - resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} + '@rollup/rollup-linux-x64-musl@4.18.0': + resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.17.2': - resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} + '@rollup/rollup-win32-arm64-msvc@4.18.0': + resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.17.2': - resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} + '@rollup/rollup-win32-ia32-msvc@4.18.0': + resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.17.2': - resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} + '@rollup/rollup-win32-x64-msvc@4.18.0': + resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} cpu: [x64] os: [win32] @@ -2588,10 +2591,6 @@ packages: '@stackblitz/sdk@1.10.0': resolution: {integrity: sha512-IcvE9Xifo2c4/f+yNqjFM/OW5VTBPLed3TxsQ+n8n81Py358IqD5w0IYfFgV5gbDjp2g5H5YK2/Shls/kQNTWQ==} - '@svitejs/changesets-changelog-github-compact@1.1.0': - resolution: {integrity: sha512-qhUGGDHcpbY2zpjW3SwqchuW8J/5EzlPFud7xNntHKA7f3a/mx5+g+ruJKFHSAiVZYo30PALt+AyhmPUNKH/Og==} - engines: {node: ^14.13.1 || ^16.0.0 || >=18} - '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} @@ -2705,8 +2704,8 @@ packages: '@types/react-dom@18.3.0': resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} - '@types/react@18.3.2': - resolution: {integrity: sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==} + '@types/react@18.3.3': + resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -2802,8 +2801,8 @@ packages: peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - '@vitejs/plugin-react@4.2.1': - resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} + '@vitejs/plugin-react@4.3.0': + resolution: {integrity: sha512-KcEbMsn4Dpk+LIbHMj7gDPRKaTMStxxWRkRmxsg/jVdFdJCZWt1SchZcf0M4t8lIKdwwMsEyzhrcOXRrDPtOBw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 @@ -3168,8 +3167,8 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axios@1.7.1: - resolution: {integrity: sha512-+LV37nQcd1EpFalkXksWNBiA17NZ5m5/WspmHGmZmdx1qBOg/VNq/c4eRJiA9VQQHBOs+N0ZhhdU10h2TyNK7Q==} + axios@1.7.2: + resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==} b4a@1.6.6: resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} @@ -3212,8 +3211,8 @@ packages: bare-os@2.3.0: resolution: {integrity: sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==} - bare-path@2.1.2: - resolution: {integrity: sha512-o7KSt4prEphWUHa3QUwCxUI00R86VdjiuxmJK0iNVDHYPGo+HsDaVCnqCmPbf/MiW1ok8F4p3m8RTHlWk8K2ig==} + bare-path@2.1.3: + resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} bare-stream@1.0.0: resolution: {integrity: sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ==} @@ -3437,10 +3436,6 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} - commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -3734,6 +3729,10 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} + dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -4210,17 +4209,19 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.3.15: - resolution: {integrity: sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==} + glob@10.4.1: + resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} engines: {node: '>=16 || 14 >=14.18'} hasBin: true glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -4423,6 +4424,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} @@ -4647,8 +4649,8 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + jackspeak@3.1.2: + resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} engines: {node: '>=14'} jest-worker@27.5.1: @@ -4771,10 +4773,6 @@ packages: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} - lilconfig@3.1.1: resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} engines: {node: '>=14'} @@ -4782,13 +4780,13 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@15.2.2: - resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==} + lint-staged@15.2.5: + resolution: {integrity: sha512-j+DfX7W9YUvdzEZl3Rk47FhDF6xwDBV5wwsCPw6BwWZVPYJemusQmvb9bRsW23Sqsaa+vRloAWogbK4BUuU2zA==} engines: {node: '>=18.12.0'} hasBin: true - listr2@8.0.1: - resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==} + listr2@8.2.1: + resolution: {integrity: sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==} engines: {node: '>=18.0.0'} load-yaml-file@0.2.0: @@ -4930,14 +4928,14 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - micromatch@4.0.6: resolution: {integrity: sha512-Y4Ypn3oujJYxJcMacVgcs92wofTHxp9FzfDpQON4msDefoC0lb3ETvQLOdLcbhSwU1bz8HrL/1sygfBIHudrkQ==} engines: {node: '>=8.6'} + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -5021,8 +5019,8 @@ packages: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} - minipass@7.1.1: - resolution: {integrity: sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} minisearch@6.3.0: @@ -5608,12 +5606,12 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@22.9.0: - resolution: {integrity: sha512-Q2SYVZ1SIE7jCd/Pp+1/mNLFtdJfGvAF+CqOTDG8HcCNCiBvoXfopXfOfMHQ/FueXhGfJW/I6DartWv6QzpNGg==} + puppeteer-core@22.10.0: + resolution: {integrity: sha512-I54J4Vy4I07UHsgB1QSmuFoF7KNQjJWcvFBPhtY+ezMdBfwgGDr8dzYrJa11aPgP9kxIUHjhktcMmmfJkOAtTw==} engines: {node: '>=18'} - puppeteer@22.9.0: - resolution: {integrity: sha512-yNux2cm6Sfik4lNLNjJ25Cdn9spJRbMXxl1YZtVZCEhEeej1sFlCvZ/Cr64LhgyJOuvz3iq2uk+RLFpQpGwrjw==} + puppeteer@22.10.0: + resolution: {integrity: sha512-ZOkZd6a6t0BdKcWb0wAYHWQqCfdlN1PPnXOmg/XNrbo6gJhYWFX4qCNb6ahSn8TpAqBqLCoD4Q010F7GwOM7mA==} engines: {node: '>=18'} hasBin: true @@ -5834,8 +5832,8 @@ packages: rollup: ^3.29.4 || ^4 typescript: ^4.5 || ^5.0 - rollup@4.17.2: - resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} + rollup@4.18.0: + resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -5906,8 +5904,8 @@ packages: resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} engines: {node: '>= 12.13.0'} - search-insights@2.13.0: - resolution: {integrity: sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==} + search-insights@2.14.0: + resolution: {integrity: sha512-OLN6MsPMCghDOqlCtsIsYgtsC0pnwVTyT9Mu6A3ewOj1DxvzZF6COrn2g86E/c05xbktB0XN04m/t1Z+n+fTGw==} select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} @@ -6827,10 +6825,6 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} - yaml@2.4.2: resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} engines: {node: '>= 14'} @@ -6875,19 +6869,19 @@ packages: snapshots: - '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0)': + '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.14.0)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.14.0) '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0)': + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.14.0)': dependencies: '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - search-insights: 2.13.0 + search-insights: 2.14.0 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch @@ -6986,20 +6980,20 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@angular-devkit/architect@0.1703.7': + '@angular-devkit/architect@0.1703.7(chokidar@3.6.0)': dependencies: - '@angular-devkit/core': 17.3.7 + '@angular-devkit/core': 17.3.7(chokidar@3.6.0) rxjs: 7.8.1 transitivePeerDependencies: - chokidar - '@angular-devkit/build-angular@17.3.7(@angular/compiler-cli@17.3.9)(@types/express@4.17.21)(@types/node@20.12.12)(typescript@5.4.5)': + '@angular-devkit/build-angular@17.3.7(@angular/compiler-cli@17.3.9(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(typescript@5.4.5))(@types/express@4.17.21)(@types/node@20.12.12)(chokidar@3.6.0)(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))(typescript@5.4.5)': dependencies: '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.1703.7 - '@angular-devkit/build-webpack': 0.1703.7(webpack-dev-server@4.15.1)(webpack@5.90.3) - '@angular-devkit/core': 17.3.7 - '@angular/compiler-cli': 17.3.9(@angular/compiler@17.3.9)(typescript@5.4.5) + '@angular-devkit/architect': 0.1703.7(chokidar@3.6.0) + '@angular-devkit/build-webpack': 0.1703.7(chokidar@3.6.0)(webpack-dev-server@4.15.1(webpack@5.90.3(esbuild@0.20.1)))(webpack@5.90.3(esbuild@0.20.1)) + '@angular-devkit/core': 17.3.7(chokidar@3.6.0) + '@angular/compiler-cli': 17.3.9(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(typescript@5.4.5) '@babel/core': 7.24.0 '@babel/generator': 7.23.6 '@babel/helper-annotate-as-pure': 7.22.5 @@ -7010,16 +7004,16 @@ snapshots: '@babel/preset-env': 7.24.0(@babel/core@7.24.0) '@babel/runtime': 7.24.0 '@discoveryjs/json-ext': 0.5.7 - '@ngtools/webpack': 17.3.7(@angular/compiler-cli@17.3.9)(typescript@5.4.5)(webpack@5.90.3) - '@vitejs/plugin-basic-ssl': 1.1.0(vite@5.1.7) + '@ngtools/webpack': 17.3.7(@angular/compiler-cli@17.3.9(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(typescript@5.4.5))(typescript@5.4.5)(webpack@5.90.3(esbuild@0.20.1)) + '@vitejs/plugin-basic-ssl': 1.1.0(vite@5.1.7(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.29.1)) ansi-colors: 4.1.3 autoprefixer: 10.4.18(postcss@8.4.35) - babel-loader: 9.1.3(@babel/core@7.24.0)(webpack@5.90.3) + babel-loader: 9.1.3(@babel/core@7.24.0)(webpack@5.90.3(esbuild@0.20.1)) babel-plugin-istanbul: 6.1.1 browserslist: 4.23.0 - copy-webpack-plugin: 11.0.0(webpack@5.90.3) + copy-webpack-plugin: 11.0.0(webpack@5.90.3(esbuild@0.20.1)) critters: 0.0.22 - css-loader: 6.10.0(webpack@5.90.3) + css-loader: 6.10.0(webpack@5.90.3(esbuild@0.20.1)) esbuild-wasm: 0.20.1 fast-glob: 3.3.2 http-proxy-middleware: 2.0.6(@types/express@4.17.21) @@ -7028,11 +7022,11 @@ snapshots: jsonc-parser: 3.2.1 karma-source-map-support: 1.4.0 less: 4.2.0 - less-loader: 11.1.0(less@4.2.0)(webpack@5.90.3) - license-webpack-plugin: 4.0.2(webpack@5.90.3) + less-loader: 11.1.0(less@4.2.0)(webpack@5.90.3(esbuild@0.20.1)) + license-webpack-plugin: 4.0.2(webpack@5.90.3(esbuild@0.20.1)) loader-utils: 3.2.1 magic-string: 0.30.8 - mini-css-extract-plugin: 2.8.1(webpack@5.90.3) + mini-css-extract-plugin: 2.8.1(webpack@5.90.3(esbuild@0.20.1)) mrmime: 2.0.0 open: 8.4.2 ora: 5.4.1 @@ -7040,13 +7034,13 @@ snapshots: picomatch: 4.0.1 piscina: 4.4.0 postcss: 8.4.35 - postcss-loader: 8.1.1(postcss@8.4.35)(typescript@5.4.5)(webpack@5.90.3) + postcss-loader: 8.1.1(postcss@8.4.35)(typescript@5.4.5)(webpack@5.90.3(esbuild@0.20.1)) resolve-url-loader: 5.0.0 rxjs: 7.8.1 sass: 1.71.1 - sass-loader: 14.1.1(sass@1.71.1)(webpack@5.90.3) + sass-loader: 14.1.1(sass@1.71.1)(webpack@5.90.3(esbuild@0.20.1)) semver: 7.6.0 - source-map-loader: 5.0.0(webpack@5.90.3) + source-map-loader: 5.0.0(webpack@5.90.3(esbuild@0.20.1)) source-map-support: 0.5.21 terser: 5.29.1 tree-kill: 1.2.2 @@ -7056,12 +7050,13 @@ snapshots: vite: 5.1.7(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.29.1) watchpack: 2.4.0 webpack: 5.90.3(esbuild@0.20.1) - webpack-dev-middleware: 6.1.2(webpack@5.90.3) - webpack-dev-server: 4.15.1(webpack@5.90.3) + webpack-dev-middleware: 6.1.2(webpack@5.90.3(esbuild@0.20.1)) + webpack-dev-server: 4.15.1(webpack@5.90.3(esbuild@0.20.1)) webpack-merge: 5.10.0 - webpack-subresource-integrity: 5.1.0(webpack@5.90.3) + webpack-subresource-integrity: 5.1.0(webpack@5.90.3(esbuild@0.20.1)) optionalDependencies: esbuild: 0.20.1 + tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -7081,16 +7076,16 @@ snapshots: - utf-8-validate - webpack-cli - '@angular-devkit/build-webpack@0.1703.7(webpack-dev-server@4.15.1)(webpack@5.90.3)': + '@angular-devkit/build-webpack@0.1703.7(chokidar@3.6.0)(webpack-dev-server@4.15.1(webpack@5.90.3(esbuild@0.20.1)))(webpack@5.90.3(esbuild@0.20.1))': dependencies: - '@angular-devkit/architect': 0.1703.7 + '@angular-devkit/architect': 0.1703.7(chokidar@3.6.0) rxjs: 7.8.1 webpack: 5.90.3(esbuild@0.20.1) - webpack-dev-server: 4.15.1(webpack@5.90.3) + webpack-dev-server: 4.15.1(webpack@5.90.3(esbuild@0.20.1)) transitivePeerDependencies: - chokidar - '@angular-devkit/core@17.3.7': + '@angular-devkit/core@17.3.7(chokidar@3.6.0)': dependencies: ajv: 8.12.0 ajv-formats: 2.1.1(ajv@8.12.0) @@ -7098,10 +7093,12 @@ snapshots: picomatch: 4.0.1 rxjs: 7.8.1 source-map: 0.7.4 + optionalDependencies: + chokidar: 3.6.0 - '@angular-devkit/schematics@17.3.7': + '@angular-devkit/schematics@17.3.7(chokidar@3.6.0)': dependencies: - '@angular-devkit/core': 17.3.7 + '@angular-devkit/core': 17.3.7(chokidar@3.6.0) jsonc-parser: 3.2.1 magic-string: 0.30.8 ora: 5.4.1 @@ -7109,17 +7106,17 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular/animations@17.3.9(@angular/core@17.3.9)': + '@angular/animations@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))': dependencies: '@angular/core': 17.3.9(rxjs@7.8.1)(zone.js@0.14.6) tslib: 2.6.2 - '@angular/cli@17.3.7': + '@angular/cli@17.3.7(chokidar@3.6.0)': dependencies: - '@angular-devkit/architect': 0.1703.7 - '@angular-devkit/core': 17.3.7 - '@angular-devkit/schematics': 17.3.7 - '@schematics/angular': 17.3.7 + '@angular-devkit/architect': 0.1703.7(chokidar@3.6.0) + '@angular-devkit/core': 17.3.7(chokidar@3.6.0) + '@angular-devkit/schematics': 17.3.7(chokidar@3.6.0) + '@schematics/angular': 17.3.7(chokidar@3.6.0) '@yarnpkg/lockfile': 1.1.0 ansi-colors: 4.1.3 ini: 4.1.2 @@ -7139,15 +7136,15 @@ snapshots: - chokidar - supports-color - '@angular/common@17.3.9(@angular/core@17.3.9)(rxjs@7.8.1)': + '@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1)': dependencies: '@angular/core': 17.3.9(rxjs@7.8.1)(zone.js@0.14.6) rxjs: 7.8.1 tslib: 2.6.2 - '@angular/compiler-cli@17.3.9(@angular/compiler@17.3.9)(typescript@5.4.5)': + '@angular/compiler-cli@17.3.9(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(typescript@5.4.5)': dependencies: - '@angular/compiler': 17.3.9(@angular/core@17.3.9) + '@angular/compiler': 17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)) '@babel/core': 7.23.9 '@jridgewell/sourcemap-codec': 1.4.15 chokidar: 3.6.0 @@ -7160,10 +7157,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/compiler@17.3.9(@angular/core@17.3.9)': + '@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))': dependencies: - '@angular/core': 17.3.9(rxjs@7.8.1)(zone.js@0.14.6) tslib: 2.6.2 + optionalDependencies: + '@angular/core': 17.3.9(rxjs@7.8.1)(zone.js@0.14.6) '@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)': dependencies: @@ -7171,34 +7169,35 @@ snapshots: tslib: 2.6.2 zone.js: 0.14.6 - '@angular/forms@17.3.9(@angular/common@17.3.9)(@angular/core@17.3.9)(@angular/platform-browser@17.3.9)(rxjs@7.8.1)': + '@angular/forms@17.3.9(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(@angular/platform-browser@17.3.9(@angular/animations@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(rxjs@7.8.1)': dependencies: - '@angular/common': 17.3.9(@angular/core@17.3.9)(rxjs@7.8.1) + '@angular/common': 17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1) '@angular/core': 17.3.9(rxjs@7.8.1)(zone.js@0.14.6) - '@angular/platform-browser': 17.3.9(@angular/animations@17.3.9)(@angular/common@17.3.9)(@angular/core@17.3.9) + '@angular/platform-browser': 17.3.9(@angular/animations@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)) rxjs: 7.8.1 tslib: 2.6.2 - '@angular/platform-browser-dynamic@17.3.9(@angular/common@17.3.9)(@angular/compiler@17.3.9)(@angular/core@17.3.9)(@angular/platform-browser@17.3.9)': + '@angular/platform-browser-dynamic@17.3.9(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(@angular/platform-browser@17.3.9(@angular/animations@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))': dependencies: - '@angular/common': 17.3.9(@angular/core@17.3.9)(rxjs@7.8.1) - '@angular/compiler': 17.3.9(@angular/core@17.3.9) + '@angular/common': 17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1) + '@angular/compiler': 17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)) '@angular/core': 17.3.9(rxjs@7.8.1)(zone.js@0.14.6) - '@angular/platform-browser': 17.3.9(@angular/animations@17.3.9)(@angular/common@17.3.9)(@angular/core@17.3.9) + '@angular/platform-browser': 17.3.9(@angular/animations@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)) tslib: 2.6.2 - '@angular/platform-browser@17.3.9(@angular/animations@17.3.9)(@angular/common@17.3.9)(@angular/core@17.3.9)': + '@angular/platform-browser@17.3.9(@angular/animations@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))': dependencies: - '@angular/animations': 17.3.9(@angular/core@17.3.9) - '@angular/common': 17.3.9(@angular/core@17.3.9)(rxjs@7.8.1) + '@angular/common': 17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1) '@angular/core': 17.3.9(rxjs@7.8.1)(zone.js@0.14.6) tslib: 2.6.2 + optionalDependencies: + '@angular/animations': 17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)) - '@angular/router@17.3.9(@angular/common@17.3.9)(@angular/core@17.3.9)(@angular/platform-browser@17.3.9)(rxjs@7.8.1)': + '@angular/router@17.3.9(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(@angular/platform-browser@17.3.9(@angular/animations@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(rxjs@7.8.1)': dependencies: - '@angular/common': 17.3.9(@angular/core@17.3.9)(rxjs@7.8.1) + '@angular/common': 17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1) '@angular/core': 17.3.9(rxjs@7.8.1)(zone.js@0.14.6) - '@angular/platform-browser': 17.3.9(@angular/animations@17.3.9)(@angular/common@17.3.9)(@angular/core@17.3.9) + '@angular/platform-browser': 17.3.9(@angular/animations@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(@angular/common@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6))(rxjs@7.8.1))(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)) rxjs: 7.8.1 tslib: 2.6.2 @@ -7208,9 +7207,9 @@ snapshots: '@types/json-schema': 7.0.15 js-yaml: 4.1.0 - '@babel/code-frame@7.24.2': + '@babel/code-frame@7.24.6': dependencies: - '@babel/highlight': 7.24.5 + '@babel/highlight': 7.24.6 picocolors: 1.0.1 '@babel/compat-data@7.24.4': {} @@ -7218,7 +7217,7 @@ snapshots: '@babel/core@7.23.9': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.6 '@babel/generator': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.23.9) @@ -7238,7 +7237,7 @@ snapshots: '@babel/core@7.24.0': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.6 '@babel/generator': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.0) @@ -7258,7 +7257,7 @@ snapshots: '@babel/core@7.24.5': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.6 '@babel/generator': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) @@ -7373,7 +7372,7 @@ snapshots: '@babel/helper-module-imports': 7.24.3 '@babel/helper-simple-access': 7.24.5 '@babel/helper-split-export-declaration': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.24.6 '@babel/helper-module-transforms@7.24.5(@babel/core@7.24.0)': dependencies: @@ -7382,7 +7381,7 @@ snapshots: '@babel/helper-module-imports': 7.24.3 '@babel/helper-simple-access': 7.24.5 '@babel/helper-split-export-declaration': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.24.6 '@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5)': dependencies: @@ -7391,7 +7390,7 @@ snapshots: '@babel/helper-module-imports': 7.24.3 '@babel/helper-simple-access': 7.24.5 '@babel/helper-split-export-declaration': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.24.6 '@babel/helper-optimise-call-expression@7.22.5': dependencies: @@ -7431,7 +7430,7 @@ snapshots: '@babel/helper-string-parser@7.24.1': {} - '@babel/helper-validator-identifier@7.24.5': {} + '@babel/helper-validator-identifier@7.24.6': {} '@babel/helper-validator-option@7.23.5': {} @@ -7449,9 +7448,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/highlight@7.24.5': + '@babel/highlight@7.24.6': dependencies: - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.24.6 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.1 @@ -7722,7 +7721,7 @@ snapshots: '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.0) '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.24.6 '@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.0)': dependencies: @@ -7991,13 +7990,13 @@ snapshots: '@babel/template@7.24.0': dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.6 '@babel/parser': 7.24.5 '@babel/types': 7.24.5 '@babel/traverse@7.24.5': dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.6 '@babel/generator': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 @@ -8013,7 +8012,7 @@ snapshots: '@babel/types@7.24.5': dependencies: '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.24.6 to-fast-properties: 2.0.0 '@bcoe/v8-coverage@0.2.3': {} @@ -8047,6 +8046,14 @@ snapshots: dependencies: '@changesets/types': 6.0.0 + '@changesets/changelog-github@0.5.0(encoding@0.1.13)': + dependencies: + '@changesets/get-github-info': 0.6.0(encoding@0.1.13) + '@changesets/types': 6.0.0 + dotenv: 8.6.0 + transitivePeerDependencies: + - encoding + '@changesets/cli@2.27.3': dependencies: '@babel/runtime': 7.24.5 @@ -8104,10 +8111,10 @@ snapshots: fs-extra: 7.0.1 semver: 7.6.2 - '@changesets/get-github-info@0.5.2': + '@changesets/get-github-info@0.6.0(encoding@0.1.13)': dependencies: dataloader: 1.4.0 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -8181,9 +8188,9 @@ snapshots: '@docsearch/css@3.6.0': {} - '@docsearch/js@3.6.0(@algolia/client-search@4.23.3)(search-insights@2.13.0)': + '@docsearch/js@3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.14.0)': dependencies: - '@docsearch/react': 3.6.0(@algolia/client-search@4.23.3)(search-insights@2.13.0) + '@docsearch/react': 3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.14.0) preact: 10.22.0 transitivePeerDependencies: - '@algolia/client-search' @@ -8192,13 +8199,17 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.6.0(@algolia/client-search@4.23.3)(search-insights@2.13.0)': + '@docsearch/react@3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.14.0)': dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0) + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.14.0) '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) '@docsearch/css': 3.6.0 algoliasearch: 4.23.3 - search-insights: 2.13.0 + optionalDependencies: + '@types/react': 18.3.3 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + search-insights: 2.14.0 transitivePeerDependencies: - '@algolia/client-search' @@ -8441,7 +8452,7 @@ snapshots: '@floating-ui/core': 1.6.2 '@floating-ui/utils': 0.2.2 - '@floating-ui/react-dom@2.1.0(react-dom@18.3.1)(react@18.3.1)': + '@floating-ui/react-dom@2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/dom': 1.6.5 react: 18.3.1 @@ -8537,9 +8548,9 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@ngtools/webpack@17.3.7(@angular/compiler-cli@17.3.9)(typescript@5.4.5)(webpack@5.90.3)': + '@ngtools/webpack@17.3.7(@angular/compiler-cli@17.3.9(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(typescript@5.4.5))(typescript@5.4.5)(webpack@5.90.3(esbuild@0.20.1))': dependencies: - '@angular/compiler-cli': 17.3.9(@angular/compiler@17.3.9)(typescript@5.4.5) + '@angular/compiler-cli': 17.3.9(@angular/compiler@17.3.9(@angular/core@17.3.9(rxjs@7.8.1)(zone.js@0.14.6)))(typescript@5.4.5) typescript: 5.4.5 webpack: 5.90.3(esbuild@0.20.1) @@ -8592,7 +8603,7 @@ snapshots: '@npmcli/package-json@5.1.0': dependencies: '@npmcli/git': 5.0.7 - glob: 10.3.15 + glob: 10.4.1 hosted-git-info: 7.0.2 json-parse-even-better-errors: 3.0.2 normalize-package-data: 6.0.1 @@ -8644,747 +8655,802 @@ snapshots: dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-accessible-icon@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-accessible-icon@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-aspect-ratio@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-aspect-ratio@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-avatar@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-avatar@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.2)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@types/react': 18.3.2 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-context-menu@2.1.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-context-menu@2.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-context@1.0.1(@types/react@18.3.2)(react@18.3.1)': + '@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@types/react': 18.3.2 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.2)(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-direction@1.0.1(@types/react@18.3.2)(react@18.3.1)': + '@radix-ui/react-direction@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@types/react': 18.3.2 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.2)(react@18.3.1)': + '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@types/react': 18.3.2 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-form@0.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-form@0.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-label': 2.0.2(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-label': 2.0.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-hover-card@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-hover-card@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 '@radix-ui/react-icons@1.3.0(react@18.3.1)': dependencies: react: 18.3.1 - '@radix-ui/react-id@1.0.1(@types/react@18.3.2)(react@18.3.1)': + '@radix-ui/react-id@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-label@2.0.2(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-label@2.0.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-menu@2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-menu@2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.2)(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-navigation-menu@1.1.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-navigation-menu@1.1.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-popover@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-popover@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.2)(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-popper@1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-popper@1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.2)(react@18.3.1) + '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/rect': 1.0.1 - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-progress@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-progress@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-scroll-area@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-scroll-area@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-select@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-select@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.2)(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-slider@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-slider@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-slot@1.0.2(@types/react@18.3.2)(react@18.3.1)': + '@radix-ui/react-slot@1.0.2(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-switch@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-switch@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-tabs@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-tabs@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-toggle@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-toggle@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.2)(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@types/react': 18.3.2 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.2)(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.2)(react@18.3.1)': + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.2)(react@18.3.1)': + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@types/react': 18.3.2 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-use-previous@1.0.1(@types/react@18.3.2)(react@18.3.1)': + '@radix-ui/react-use-previous@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@types/react': 18.3.2 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.2)(react@18.3.1)': + '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@radix-ui/rect': 1.0.1 - '@types/react': 18.3.2 react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-use-size@1.0.1(@types/react@18.3.2)(react@18.3.1)': + '@radix-ui/react-use-size@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@types/react': 18.3.2 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.3 - '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 '@radix-ui/rect@1.0.1': dependencies: '@babel/runtime': 7.24.5 - '@radix-ui/themes@3.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1)': + '@radix-ui/themes@3.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/colors': 3.0.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-accessible-icon': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-alert-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-aspect-ratio': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-avatar': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-checkbox': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-context-menu': 2.1.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-dropdown-menu': 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-form': 0.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-hover-card': 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-navigation-menu': 1.1.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-popover': 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-progress': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-radio-group': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-scroll-area': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-select': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slider': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-switch': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-tabs': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-tooltip': 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.2)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.2)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.2 - '@types/react-dom': 18.3.0 + '@radix-ui/react-accessible-icon': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-alert-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-aspect-ratio': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-avatar': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-checkbox': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context-menu': 2.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dropdown-menu': 2.0.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-form': 0.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-hover-card': 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-navigation-menu': 1.1.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popover': 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-progress': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-radio-group': 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-scroll-area': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-select': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slider': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-switch': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tabs': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tooltip': 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) classnames: 2.5.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll-bar: 2.3.4(@types/react@18.3.2)(react@18.3.1) + react-remove-scroll-bar: 2.3.4(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 - '@rollup/plugin-commonjs@25.0.7(rollup@4.17.2)': + '@rollup/plugin-commonjs@25.0.8(rollup@4.18.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.17.2) + '@rollup/pluginutils': 5.1.0(rollup@4.18.0) commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.1.0 is-reference: 1.2.1 magic-string: 0.30.10 - rollup: 4.17.2 + optionalDependencies: + rollup: 4.18.0 - '@rollup/plugin-json@6.1.0(rollup@4.17.2)': + '@rollup/plugin-json@6.1.0(rollup@4.18.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.17.2) - rollup: 4.17.2 + '@rollup/pluginutils': 5.1.0(rollup@4.18.0) + optionalDependencies: + rollup: 4.18.0 - '@rollup/plugin-node-resolve@15.2.3(rollup@4.17.2)': + '@rollup/plugin-node-resolve@15.2.3(rollup@4.18.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.17.2) + '@rollup/pluginutils': 5.1.0(rollup@4.18.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 - rollup: 4.17.2 + optionalDependencies: + rollup: 4.18.0 - '@rollup/plugin-terser@0.4.4(rollup@4.17.2)': + '@rollup/plugin-terser@0.4.4(rollup@4.18.0)': dependencies: - rollup: 4.17.2 serialize-javascript: 6.0.2 smob: 1.5.0 terser: 5.31.0 + optionalDependencies: + rollup: 4.18.0 - '@rollup/plugin-typescript@11.1.6(rollup@4.17.2)(typescript@5.4.5)': + '@rollup/plugin-typescript@11.1.6(rollup@4.18.0)(tslib@2.6.2)(typescript@5.4.5)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.17.2) + '@rollup/pluginutils': 5.1.0(rollup@4.18.0) resolve: 1.22.8 - rollup: 4.17.2 typescript: 5.4.5 + optionalDependencies: + rollup: 4.18.0 + tslib: 2.6.2 - '@rollup/pluginutils@5.1.0(rollup@4.17.2)': + '@rollup/pluginutils@5.1.0(rollup@4.18.0)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 4.17.2 + optionalDependencies: + rollup: 4.18.0 - '@rollup/rollup-android-arm-eabi@4.17.2': + '@rollup/rollup-android-arm-eabi@4.18.0': optional: true - '@rollup/rollup-android-arm64@4.17.2': + '@rollup/rollup-android-arm64@4.18.0': optional: true - '@rollup/rollup-darwin-arm64@4.17.2': + '@rollup/rollup-darwin-arm64@4.18.0': optional: true - '@rollup/rollup-darwin-x64@4.17.2': + '@rollup/rollup-darwin-x64@4.18.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.17.2': + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.17.2': + '@rollup/rollup-linux-arm-musleabihf@4.18.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.17.2': + '@rollup/rollup-linux-arm64-gnu@4.18.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.17.2': + '@rollup/rollup-linux-arm64-musl@4.18.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.17.2': + '@rollup/rollup-linux-riscv64-gnu@4.18.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.17.2': + '@rollup/rollup-linux-s390x-gnu@4.18.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.17.2': + '@rollup/rollup-linux-x64-gnu@4.18.0': optional: true - '@rollup/rollup-linux-x64-musl@4.17.2': + '@rollup/rollup-linux-x64-musl@4.18.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.17.2': + '@rollup/rollup-win32-arm64-msvc@4.18.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.17.2': + '@rollup/rollup-win32-ia32-msvc@4.18.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.17.2': + '@rollup/rollup-win32-x64-msvc@4.18.0': optional: true - '@schematics/angular@17.3.7': + '@schematics/angular@17.3.7(chokidar@3.6.0)': dependencies: - '@angular-devkit/core': 17.3.7 - '@angular-devkit/schematics': 17.3.7 + '@angular-devkit/core': 17.3.7(chokidar@3.6.0) + '@angular-devkit/schematics': 17.3.7(chokidar@3.6.0) jsonc-parser: 3.2.1 transitivePeerDependencies: - chokidar @@ -9431,13 +9497,6 @@ snapshots: '@stackblitz/sdk@1.10.0': {} - '@svitejs/changesets-changelog-github-compact@1.1.0': - dependencies: - '@changesets/get-github-info': 0.5.2 - dotenv: 16.4.5 - transitivePeerDependencies: - - encoding - '@tootallnate/quickjs-emscripten@0.23.0': {} '@tsconfig/node10@1.0.11': {} @@ -9565,9 +9624,9 @@ snapshots: '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.3.2 + '@types/react': 18.3.3 - '@types/react@18.3.2': + '@types/react@18.3.3': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -9608,7 +9667,7 @@ snapshots: '@types/node': 20.12.12 optional: true - '@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0)(eslint@9.3.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@9.3.0)(typescript@5.4.5))(eslint@9.3.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 '@typescript-eslint/parser': 7.10.0(eslint@9.3.0)(typescript@5.4.5) @@ -9621,6 +9680,7 @@ snapshots: ignore: 5.3.1 natural-compare: 1.4.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -9633,6 +9693,7 @@ snapshots: '@typescript-eslint/visitor-keys': 7.10.0 debug: 4.3.4 eslint: 9.3.0 + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -9649,6 +9710,7 @@ snapshots: debug: 4.3.4 eslint: 9.3.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -9665,6 +9727,7 @@ snapshots: minimatch: 9.0.4 semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -9685,27 +9748,27 @@ snapshots: '@typescript-eslint/types': 7.10.0 eslint-visitor-keys: 3.4.3 - '@vitejs/plugin-basic-ssl@1.1.0(vite@5.1.7)': + '@vitejs/plugin-basic-ssl@1.1.0(vite@5.1.7(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.29.1))': dependencies: vite: 5.1.7(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.29.1) - '@vitejs/plugin-react@4.2.1(vite@5.2.11)': + '@vitejs/plugin-react@4.3.0(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0))': dependencies: '@babel/core': 7.24.5 '@babel/plugin-transform-react-jsx-self': 7.24.5(@babel/core@7.24.5) '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.5) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.2.11(@types/node@20.12.12) + vite: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.0.4(vite@5.2.11)(vue@3.4.27)': + '@vitejs/plugin-vue@5.0.4(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))': dependencies: - vite: 5.2.11(@types/node@20.12.12) + vite: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0) vue: 3.4.27(typescript@5.4.5) - '@vitest/coverage-v8@1.6.0(vitest@1.6.0)': + '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -9720,7 +9783,7 @@ snapshots: std-env: 3.7.0 strip-literal: 2.1.0 test-exclude: 6.0.0 - vitest: 1.6.0(@types/node@20.12.12) + vitest: 1.6.0(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0) transitivePeerDependencies: - supports-color @@ -9783,13 +9846,13 @@ snapshots: '@vue/compiler-dom': 3.4.27 '@vue/shared': 3.4.27 - '@vue/devtools-api@7.2.1(vue@3.4.27)': + '@vue/devtools-api@7.2.1(vue@3.4.27(typescript@5.4.5))': dependencies: - '@vue/devtools-kit': 7.2.1(vue@3.4.27) + '@vue/devtools-kit': 7.2.1(vue@3.4.27(typescript@5.4.5)) transitivePeerDependencies: - vue - '@vue/devtools-kit@7.2.1(vue@3.4.27)': + '@vue/devtools-kit@7.2.1(vue@3.4.27(typescript@5.4.5))': dependencies: '@vue/devtools-shared': 7.2.1 hookable: 5.5.3 @@ -9817,7 +9880,7 @@ snapshots: '@vue/shared': 3.4.27 csstype: 3.1.3 - '@vue/server-renderer@3.4.27(vue@3.4.27)': + '@vue/server-renderer@3.4.27(vue@3.4.27(typescript@5.4.5))': dependencies: '@vue/compiler-ssr': 3.4.27 '@vue/shared': 3.4.27 @@ -9825,31 +9888,33 @@ snapshots: '@vue/shared@3.4.27': {} - '@vueuse/core@10.9.0(vue@3.4.27)': + '@vueuse/core@10.9.0(vue@3.4.27(typescript@5.4.5))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.9.0 - '@vueuse/shared': 10.9.0(vue@3.4.27) - vue-demi: 0.14.7(vue@3.4.27) + '@vueuse/shared': 10.9.0(vue@3.4.27(typescript@5.4.5)) + vue-demi: 0.14.7(vue@3.4.27(typescript@5.4.5)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/integrations@10.9.0(focus-trap@7.5.4)(vue@3.4.27)': + '@vueuse/integrations@10.9.0(axios@1.7.2)(focus-trap@7.5.4)(vue@3.4.27(typescript@5.4.5))': dependencies: - '@vueuse/core': 10.9.0(vue@3.4.27) - '@vueuse/shared': 10.9.0(vue@3.4.27) + '@vueuse/core': 10.9.0(vue@3.4.27(typescript@5.4.5)) + '@vueuse/shared': 10.9.0(vue@3.4.27(typescript@5.4.5)) + vue-demi: 0.14.7(vue@3.4.27(typescript@5.4.5)) + optionalDependencies: + axios: 1.7.2 focus-trap: 7.5.4 - vue-demi: 0.14.7(vue@3.4.27) transitivePeerDependencies: - '@vue/composition-api' - vue '@vueuse/metadata@10.9.0': {} - '@vueuse/shared@10.9.0(vue@3.4.27)': + '@vueuse/shared@10.9.0(vue@3.4.27(typescript@5.4.5))': dependencies: - vue-demi: 0.14.7(vue@3.4.27) + vue-demi: 0.14.7(vue@3.4.27(typescript@5.4.5)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -9978,11 +10043,11 @@ snapshots: indent-string: 4.0.0 ajv-formats@2.1.1(ajv@8.12.0): - dependencies: + optionalDependencies: ajv: 8.12.0 ajv-formats@2.1.1(ajv@8.13.0): - dependencies: + optionalDependencies: ajv: 8.13.0 ajv-keywords@3.5.2(ajv@6.12.6): @@ -10141,7 +10206,7 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - axios@1.7.1: + axios@1.7.2: dependencies: follow-redirects: 1.15.6 form-data: 4.0.0 @@ -10151,7 +10216,7 @@ snapshots: b4a@1.6.6: {} - babel-loader@9.1.3(@babel/core@7.24.0)(webpack@5.90.3): + babel-loader@9.1.3(@babel/core@7.24.0)(webpack@5.90.3(esbuild@0.20.1)): dependencies: '@babel/core': 7.24.0 find-cache-dir: 4.0.0 @@ -10200,14 +10265,14 @@ snapshots: bare-fs@2.3.0: dependencies: bare-events: 2.2.2 - bare-path: 2.1.2 + bare-path: 2.1.3 bare-stream: 1.0.0 optional: true bare-os@2.3.0: optional: true - bare-path@2.1.2: + bare-path@2.1.3: dependencies: bare-os: 2.3.0 optional: true @@ -10321,9 +10386,9 @@ snapshots: dependencies: '@npmcli/fs': 3.1.1 fs-minipass: 3.0.3 - glob: 10.3.15 + glob: 10.4.1 lru-cache: 10.2.2 - minipass: 7.1.1 + minipass: 7.1.2 minipass-collect: 2.0.1 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 @@ -10473,8 +10538,6 @@ snapshots: dependencies: delayed-stream: 1.0.0 - commander@11.1.0: {} - commander@12.1.0: {} commander@2.20.3: {} @@ -10527,7 +10590,7 @@ snapshots: dependencies: is-what: 3.14.1 - copy-webpack-plugin@11.0.0(webpack@5.90.3): + copy-webpack-plugin@11.0.0(webpack@5.90.3(esbuild@0.20.1)): dependencies: fast-glob: 3.3.2 glob-parent: 6.0.2 @@ -10549,6 +10612,7 @@ snapshots: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 + optionalDependencies: typescript: 5.4.5 create-require@1.1.1: {} @@ -10575,7 +10639,7 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-loader@6.10.0(webpack@5.90.3): + css-loader@6.10.0(webpack@5.90.3(esbuild@0.20.1)): dependencies: icss-utils: 5.1.0(postcss@8.4.35) postcss: 8.4.35 @@ -10585,6 +10649,7 @@ snapshots: postcss-modules-values: 4.0.0(postcss@8.4.35) postcss-value-parser: 4.2.0 semver: 7.6.2 + optionalDependencies: webpack: 5.90.3(esbuild@0.20.1) css-select@5.1.0: @@ -10745,6 +10810,8 @@ snapshots: dotenv@16.4.5: {} + dotenv@8.6.0: {} + eastasianwidth@0.2.0: {} ee-first@1.1.1: {} @@ -10925,6 +10992,7 @@ snapshots: '@esbuild/win32-arm64': 0.20.1 '@esbuild/win32-ia32': 0.20.1 '@esbuild/win32-x64': 0.20.1 + optional: true esbuild@0.20.2: optionalDependencies: @@ -11247,7 +11315,7 @@ snapshots: find-yarn-workspace-root2@1.2.16: dependencies: - micromatch: 4.0.6 + micromatch: 4.0.7 pkg-dir: 4.2.0 flat-cache@4.0.1: @@ -11314,7 +11382,7 @@ snapshots: fs-minipass@3.0.3: dependencies: - minipass: 7.1.1 + minipass: 7.1.2 fs-monkey@1.0.6: {} @@ -11398,12 +11466,12 @@ snapshots: glob-to-regexp@0.4.1: {} - glob@10.3.15: + glob@10.4.1: dependencies: foreground-child: 3.1.1 - jackspeak: 2.3.6 + jackspeak: 3.1.2 minimatch: 9.0.4 - minipass: 7.1.1 + minipass: 7.1.2 path-scurry: 1.11.1 glob@7.2.3: @@ -11552,12 +11620,13 @@ snapshots: http-proxy-middleware@2.0.6(@types/express@4.17.21): dependencies: - '@types/express': 4.17.21 '@types/http-proxy': 1.17.14 http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 - micromatch: 4.0.6 + micromatch: 4.0.7 + optionalDependencies: + '@types/express': 4.17.21 transitivePeerDependencies: - debug @@ -11832,7 +11901,7 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - jackspeak@2.3.6: + jackspeak@3.1.2: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -11912,7 +11981,7 @@ snapshots: picocolors: 1.0.1 shell-quote: 1.8.1 - less-loader@11.1.0(less@4.2.0)(webpack@5.90.3): + less-loader@11.1.0(less@4.2.0)(webpack@5.90.3(esbuild@0.20.1)): dependencies: klona: 2.0.6 less: 4.2.0 @@ -11937,35 +12006,34 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - license-webpack-plugin@4.0.2(webpack@5.90.3): + license-webpack-plugin@4.0.2(webpack@5.90.3(esbuild@0.20.1)): dependencies: - webpack: 5.90.3(esbuild@0.20.1) webpack-sources: 3.2.3 + optionalDependencies: + webpack: 5.90.3(esbuild@0.20.1) lilconfig@2.1.0: {} - lilconfig@3.0.0: {} - lilconfig@3.1.1: {} lines-and-columns@1.2.4: {} - lint-staged@15.2.2: + lint-staged@15.2.5: dependencies: chalk: 5.3.0 - commander: 11.1.0 + commander: 12.1.0 debug: 4.3.4 execa: 8.0.1 - lilconfig: 3.0.0 - listr2: 8.0.1 - micromatch: 4.0.5 + lilconfig: 3.1.1 + listr2: 8.2.1 + micromatch: 4.0.7 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.3.4 + yaml: 2.4.2 transitivePeerDependencies: - supports-color - listr2@8.0.1: + listr2@8.2.1: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 @@ -12086,7 +12154,7 @@ snapshots: cacache: 18.0.3 http-cache-semantics: 4.1.1 is-lambda: 1.0.1 - minipass: 7.1.1 + minipass: 7.1.2 minipass-fetch: 3.0.5 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 @@ -12131,15 +12199,15 @@ snapshots: methods@1.1.2: {} - micromatch@4.0.5: + micromatch@4.0.6: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 4.0.2 - micromatch@4.0.6: + micromatch@4.0.7: dependencies: braces: 3.0.3 - picomatch: 4.0.2 + picomatch: 2.3.1 mime-db@1.52.0: {} @@ -12155,7 +12223,7 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.8.1(webpack@5.90.3): + mini-css-extract-plugin@2.8.1(webpack@5.90.3(esbuild@0.20.1)): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 @@ -12185,11 +12253,11 @@ snapshots: minipass-collect@2.0.1: dependencies: - minipass: 7.1.1 + minipass: 7.1.2 minipass-fetch@3.0.5: dependencies: - minipass: 7.1.1 + minipass: 7.1.2 minipass-sized: 1.0.3 minizlib: 2.1.2 optionalDependencies: @@ -12218,7 +12286,7 @@ snapshots: minipass@5.0.0: {} - minipass@7.1.1: {} + minipass@7.1.2: {} minisearch@6.3.0: {} @@ -12290,9 +12358,11 @@ snapshots: node-fetch-native@1.6.4: {} - node-fetch@2.7.0: + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 node-fetch@3.3.2: dependencies: @@ -12309,7 +12379,7 @@ snapshots: dependencies: env-paths: 2.2.1 exponential-backoff: 3.1.1 - glob: 10.3.15 + glob: 10.4.1 graceful-fs: 4.2.11 make-fetch-happen: 13.0.1 nopt: 7.2.1 @@ -12376,7 +12446,7 @@ snapshots: dependencies: '@npmcli/redact': 1.1.0 make-fetch-happen: 13.0.1 - minipass: 7.1.1 + minipass: 7.1.2 minipass-fetch: 3.0.5 minipass-json-stream: 1.0.1 minizlib: 2.1.2 @@ -12544,7 +12614,7 @@ snapshots: '@npmcli/run-script': 7.0.4 cacache: 18.0.3 fs-minipass: 3.0.3 - minipass: 7.1.1 + minipass: 7.1.2 npm-package-arg: 11.0.1 npm-packlist: 8.0.2 npm-pick-manifest: 9.0.0 @@ -12566,7 +12636,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.6 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -12604,7 +12674,7 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.2.2 - minipass: 7.1.1 + minipass: 7.1.2 path-to-regexp@0.1.7: {} @@ -12666,18 +12736,21 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.38 - postcss-load-config@4.0.2(postcss@8.4.38): + postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)): dependencies: lilconfig: 3.1.1 - postcss: 8.4.38 yaml: 2.4.2 + optionalDependencies: + postcss: 8.4.38 + ts-node: 10.9.2(@types/node@20.12.12)(typescript@5.4.5) - postcss-loader@8.1.1(postcss@8.4.35)(typescript@5.4.5)(webpack@5.90.3): + postcss-loader@8.1.1(postcss@8.4.35)(typescript@5.4.5)(webpack@5.90.3(esbuild@0.20.1)): dependencies: cosmiconfig: 9.0.0(typescript@5.4.5) jiti: 1.21.0 postcss: 8.4.35 semver: 7.6.2 + optionalDependencies: webpack: 5.90.3(esbuild@0.20.1) transitivePeerDependencies: - typescript @@ -12797,7 +12870,7 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@22.9.0: + puppeteer-core@22.10.0: dependencies: '@puppeteer/browsers': 2.2.3 chromium-bidi: 0.5.19(devtools-protocol@0.0.1286932) @@ -12809,12 +12882,12 @@ snapshots: - supports-color - utf-8-validate - puppeteer@22.9.0(typescript@5.4.5): + puppeteer@22.10.0(typescript@5.4.5): dependencies: '@puppeteer/browsers': 2.2.3 cosmiconfig: 9.0.0(typescript@5.4.5) devtools-protocol: 0.0.1286932 - puppeteer-core: 22.9.0 + puppeteer-core: 22.10.0 transitivePeerDependencies: - bufferutil - supports-color @@ -12859,30 +12932,33 @@ snapshots: react-refresh@0.14.2: {} - react-remove-scroll-bar@2.3.4(@types/react@18.3.2)(react@18.3.1): + react-remove-scroll-bar@2.3.4(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.2 react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.2)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.3.3 - react-remove-scroll@2.5.5(@types/react@18.3.2)(react@18.3.1): + react-remove-scroll@2.5.5(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.2 react: 18.3.1 - react-remove-scroll-bar: 2.3.4(@types/react@18.3.2)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.2)(react@18.3.1) + react-remove-scroll-bar: 2.3.4(@types/react@18.3.3)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) tslib: 2.6.2 - use-callback-ref: 1.3.2(@types/react@18.3.2)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.2)(react@18.3.1) + use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.3 - react-style-singleton@2.2.1(@types/react@18.3.2)(react@18.3.1): + react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.2 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.3.3 react@18.3.1: dependencies: @@ -12899,7 +12975,7 @@ snapshots: read-package-json@7.0.1: dependencies: - glob: 10.3.15 + glob: 10.4.1 json-parse-even-better-errors: 3.0.2 normalize-package-data: 6.0.1 npm-normalize-package-bin: 3.0.1 @@ -13037,36 +13113,36 @@ snapshots: rimraf@5.0.7: dependencies: - glob: 10.3.15 + glob: 10.4.1 - rollup-plugin-dts@6.1.1(rollup@4.17.2)(typescript@5.4.5): + rollup-plugin-dts@6.1.1(rollup@4.18.0)(typescript@5.4.5): dependencies: magic-string: 0.30.10 - rollup: 4.17.2 + rollup: 4.18.0 typescript: 5.4.5 optionalDependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.6 - rollup@4.17.2: + rollup@4.18.0: dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.17.2 - '@rollup/rollup-android-arm64': 4.17.2 - '@rollup/rollup-darwin-arm64': 4.17.2 - '@rollup/rollup-darwin-x64': 4.17.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 - '@rollup/rollup-linux-arm-musleabihf': 4.17.2 - '@rollup/rollup-linux-arm64-gnu': 4.17.2 - '@rollup/rollup-linux-arm64-musl': 4.17.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 - '@rollup/rollup-linux-riscv64-gnu': 4.17.2 - '@rollup/rollup-linux-s390x-gnu': 4.17.2 - '@rollup/rollup-linux-x64-gnu': 4.17.2 - '@rollup/rollup-linux-x64-musl': 4.17.2 - '@rollup/rollup-win32-arm64-msvc': 4.17.2 - '@rollup/rollup-win32-ia32-msvc': 4.17.2 - '@rollup/rollup-win32-x64-msvc': 4.17.2 + '@rollup/rollup-android-arm-eabi': 4.18.0 + '@rollup/rollup-android-arm64': 4.18.0 + '@rollup/rollup-darwin-arm64': 4.18.0 + '@rollup/rollup-darwin-x64': 4.18.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 + '@rollup/rollup-linux-arm-musleabihf': 4.18.0 + '@rollup/rollup-linux-arm64-gnu': 4.18.0 + '@rollup/rollup-linux-arm64-musl': 4.18.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 + '@rollup/rollup-linux-riscv64-gnu': 4.18.0 + '@rollup/rollup-linux-s390x-gnu': 4.18.0 + '@rollup/rollup-linux-x64-gnu': 4.18.0 + '@rollup/rollup-linux-x64-musl': 4.18.0 + '@rollup/rollup-win32-arm64-msvc': 4.18.0 + '@rollup/rollup-win32-ia32-msvc': 4.18.0 + '@rollup/rollup-win32-x64-msvc': 4.18.0 fsevents: 2.3.3 run-async@3.0.0: {} @@ -13098,9 +13174,10 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@14.1.1(sass@1.71.1)(webpack@5.90.3): + sass-loader@14.1.1(sass@1.71.1)(webpack@5.90.3(esbuild@0.20.1)): dependencies: neo-async: 2.6.2 + optionalDependencies: sass: 1.71.1 webpack: 5.90.3(esbuild@0.20.1) @@ -13130,7 +13207,7 @@ snapshots: ajv-formats: 2.1.1(ajv@8.13.0) ajv-keywords: 5.1.0(ajv@8.13.0) - search-insights@2.13.0: {} + search-insights@2.14.0: {} select-hose@2.0.0: {} @@ -13308,7 +13385,7 @@ snapshots: source-map-js@1.2.0: {} - source-map-loader@5.0.0(webpack@5.90.3): + source-map-loader@5.0.0(webpack@5.90.3(esbuild@0.20.1)): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.0 @@ -13371,7 +13448,7 @@ snapshots: ssri@10.0.6: dependencies: - minipass: 7.1.1 + minipass: 7.1.2 stackback@0.0.2: {} @@ -13467,7 +13544,7 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.3.15 + glob: 10.4.1 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -13491,7 +13568,7 @@ snapshots: tabbable@6.2.0: {} - tailwindcss@3.4.3: + tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -13510,7 +13587,7 @@ snapshots: postcss: 8.4.38 postcss-import: 15.1.0(postcss@8.4.38) postcss-js: 4.0.1(postcss@8.4.38) - postcss-load-config: 4.0.2(postcss@8.4.38) + postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)) postcss-nested: 6.0.1(postcss@8.4.38) postcss-selector-parser: 6.0.16 resolve: 1.22.8 @@ -13526,7 +13603,7 @@ snapshots: tar-stream: 3.1.7 optionalDependencies: bare-fs: 2.3.0 - bare-path: 2.1.2 + bare-path: 2.1.3 tar-stream@3.1.7: dependencies: @@ -13545,15 +13622,16 @@ snapshots: term-size@2.2.1: {} - terser-webpack-plugin@5.3.10(esbuild@0.20.1)(webpack@5.90.3): + terser-webpack-plugin@5.3.10(esbuild@0.20.1)(webpack@5.90.3(esbuild@0.20.1)): dependencies: '@jridgewell/trace-mapping': 0.3.25 - esbuild: 0.20.1 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.29.1 webpack: 5.90.3(esbuild@0.20.1) + optionalDependencies: + esbuild: 0.20.1 terser@5.29.1: dependencies: @@ -13712,10 +13790,11 @@ snapshots: typescript-eslint@7.10.0(eslint@9.3.0)(typescript@5.4.5): dependencies: - '@typescript-eslint/eslint-plugin': 7.10.0(@typescript-eslint/parser@7.10.0)(eslint@9.3.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.10.0(@typescript-eslint/parser@7.10.0(eslint@9.3.0)(typescript@5.4.5))(eslint@9.3.0)(typescript@5.4.5) '@typescript-eslint/parser': 7.10.0(eslint@9.3.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.10.0(eslint@9.3.0)(typescript@5.4.5) eslint: 9.3.0 + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -13780,18 +13859,20 @@ snapshots: urlpattern-polyfill@10.0.0: {} - use-callback-ref@1.3.2(@types/react@18.3.2)(react@18.3.1): + use-callback-ref@1.3.2(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.2 react: 18.3.1 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.3.3 - use-sidecar@1.1.2(@types/react@18.3.2)(react@18.3.1): + use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1): dependencies: - '@types/react': 18.3.2 detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.3.3 util-deprecate@1.0.2: {} @@ -13810,13 +13891,13 @@ snapshots: vary@1.1.2: {} - vite-node@1.6.0(@types/node@20.12.12): + vite-node@1.6.0(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0): dependencies: cac: 6.7.14 debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.1 - vite: 5.2.11(@types/node@20.12.12) + vite: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0) transitivePeerDependencies: - '@types/node' - less @@ -13829,43 +13910,48 @@ snapshots: vite@5.1.7(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.29.1): dependencies: - '@types/node': 20.12.12 esbuild: 0.19.12 - less: 4.2.0 postcss: 8.4.35 - rollup: 4.17.2 - sass: 1.71.1 - terser: 5.29.1 + rollup: 4.18.0 optionalDependencies: + '@types/node': 20.12.12 fsevents: 2.3.3 + less: 4.2.0 + sass: 1.71.1 + terser: 5.29.1 - vite@5.2.11(@types/node@20.12.12): + vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0): dependencies: - '@types/node': 20.12.12 esbuild: 0.20.2 postcss: 8.4.38 - rollup: 4.17.2 + rollup: 4.18.0 optionalDependencies: + '@types/node': 20.12.12 fsevents: 2.3.3 + less: 4.2.0 + sass: 1.71.1 + terser: 5.31.0 - vitepress@1.2.2(@algolia/client-search@4.23.3)(@types/node@20.12.12)(search-insights@2.13.0)(typescript@5.4.5): + vitepress@1.2.2(@algolia/client-search@4.23.3)(@types/node@20.12.12)(@types/react@18.3.3)(axios@1.7.2)(less@4.2.0)(postcss@8.4.38)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.71.1)(search-insights@2.14.0)(terser@5.31.0)(typescript@5.4.5): dependencies: '@docsearch/css': 3.6.0 - '@docsearch/js': 3.6.0(@algolia/client-search@4.23.3)(search-insights@2.13.0) + '@docsearch/js': 3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.14.0) '@shikijs/core': 1.6.0 '@shikijs/transformers': 1.6.0 '@types/markdown-it': 14.1.1 - '@vitejs/plugin-vue': 5.0.4(vite@5.2.11)(vue@3.4.27) - '@vue/devtools-api': 7.2.1(vue@3.4.27) + '@vitejs/plugin-vue': 5.0.4(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5)) + '@vue/devtools-api': 7.2.1(vue@3.4.27(typescript@5.4.5)) '@vue/shared': 3.4.27 - '@vueuse/core': 10.9.0(vue@3.4.27) - '@vueuse/integrations': 10.9.0(focus-trap@7.5.4)(vue@3.4.27) + '@vueuse/core': 10.9.0(vue@3.4.27(typescript@5.4.5)) + '@vueuse/integrations': 10.9.0(axios@1.7.2)(focus-trap@7.5.4)(vue@3.4.27(typescript@5.4.5)) focus-trap: 7.5.4 mark.js: 8.11.1 minisearch: 6.3.0 shiki: 1.6.0 - vite: 5.2.11(@types/node@20.12.12) + vite: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0) vue: 3.4.27(typescript@5.4.5) + optionalDependencies: + postcss: 8.4.38 transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -13893,9 +13979,8 @@ snapshots: - typescript - universal-cookie - vitest@1.6.0(@types/node@20.12.12): + vitest@1.6.0(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0): dependencies: - '@types/node': 20.12.12 '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 '@vitest/snapshot': 1.6.0 @@ -13913,9 +13998,11 @@ snapshots: strip-literal: 2.1.0 tinybench: 2.8.0 tinypool: 0.8.4 - vite: 5.2.11(@types/node@20.12.12) - vite-node: 1.6.0(@types/node@20.12.12) + vite: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0) + vite-node: 1.6.0(@types/node@20.12.12)(less@4.2.0)(sass@1.71.1)(terser@5.31.0) why-is-node-running: 2.2.2 + optionalDependencies: + '@types/node': 20.12.12 transitivePeerDependencies: - less - lightningcss @@ -13925,7 +14012,7 @@ snapshots: - supports-color - terser - vue-demi@0.14.7(vue@3.4.27): + vue-demi@0.14.7(vue@3.4.27(typescript@5.4.5)): dependencies: vue: 3.4.27(typescript@5.4.5) @@ -13934,8 +14021,9 @@ snapshots: '@vue/compiler-dom': 3.4.27 '@vue/compiler-sfc': 3.4.27 '@vue/runtime-dom': 3.4.27 - '@vue/server-renderer': 3.4.27(vue@3.4.27) + '@vue/server-renderer': 3.4.27(vue@3.4.27(typescript@5.4.5)) '@vue/shared': 3.4.27 + optionalDependencies: typescript: 5.4.5 watchpack@2.4.0: @@ -13955,7 +14043,7 @@ snapshots: webidl-conversions@3.0.1: {} - webpack-dev-middleware@5.3.4(webpack@5.90.3): + webpack-dev-middleware@5.3.4(webpack@5.90.3(esbuild@0.20.1)): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -13964,16 +14052,17 @@ snapshots: schema-utils: 4.2.0 webpack: 5.90.3(esbuild@0.20.1) - webpack-dev-middleware@6.1.2(webpack@5.90.3): + webpack-dev-middleware@6.1.2(webpack@5.90.3(esbuild@0.20.1)): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 + optionalDependencies: webpack: 5.90.3(esbuild@0.20.1) - webpack-dev-server@4.15.1(webpack@5.90.3): + webpack-dev-server@4.15.1(webpack@5.90.3(esbuild@0.20.1)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -14003,9 +14092,10 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.90.3(esbuild@0.20.1) - webpack-dev-middleware: 5.3.4(webpack@5.90.3) + webpack-dev-middleware: 5.3.4(webpack@5.90.3(esbuild@0.20.1)) ws: 8.17.0 + optionalDependencies: + webpack: 5.90.3(esbuild@0.20.1) transitivePeerDependencies: - bufferutil - debug @@ -14020,7 +14110,7 @@ snapshots: webpack-sources@3.2.3: {} - webpack-subresource-integrity@5.1.0(webpack@5.90.3): + webpack-subresource-integrity@5.1.0(webpack@5.90.3(esbuild@0.20.1)): dependencies: typed-assert: 1.0.9 webpack: 5.90.3(esbuild@0.20.1) @@ -14048,7 +14138,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.20.1)(webpack@5.90.3) + terser-webpack-plugin: 5.3.10(esbuild@0.20.1)(webpack@5.90.3(esbuild@0.20.1)) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -14153,8 +14243,6 @@ snapshots: yallist@4.0.0: {} - yaml@2.3.4: {} - yaml@2.4.2: {} yargs-parser@18.1.3: