diff --git a/.changeset/nine-cats-cross.md b/.changeset/nine-cats-cross.md index 748ecf200..b07d12c17 100644 --- a/.changeset/nine-cats-cross.md +++ b/.changeset/nine-cats-cross.md @@ -2,4 +2,4 @@ '@hey-api/openapi-ts': patch --- -fix(sdk): add paramsStructure field +fix(sdk): add `paramsStructure` option diff --git a/dev/openapi-ts.config.ts b/dev/openapi-ts.config.ts index 7ca575a03..8d573d2bc 100644 --- a/dev/openapi-ts.config.ts +++ b/dev/openapi-ts.config.ts @@ -41,12 +41,12 @@ export default defineConfig(() => { // 'invalid', // 'openai.yaml', // 'full.yaml', - 'opencode.yaml', + // 'opencode.yaml', // 'sdk-instance.yaml', // 'string-with-format.yaml', // 'transformers.json', // 'type-format.yaml', - // 'validators.yaml', + 'validators.yaml', // 'validators-circular-ref.json', // 'validators-circular-ref-2.yaml', // 'zoom-video-sdk.json', @@ -260,7 +260,7 @@ export default defineConfig(() => { // }, // include... instance: true, - name: '@hey-api/sdk', + // name: '@hey-api/sdk', // operationId: false, paramsStructure: 'flat', // responseStyle: 'data', @@ -335,7 +335,7 @@ export default defineConfig(() => { }, }, { - // name: 'arktype', + name: 'arktype', // types: { // infer: true, // }, @@ -346,7 +346,7 @@ export default defineConfig(() => { // definitions: 'z{{name}}Definition', exportFromIndex: true, // metadata: true, - // name: 'valibot', + name: 'valibot', // requests: { // case: 'PascalCase', // name: '{{name}}Data', @@ -396,7 +396,7 @@ export default defineConfig(() => { }, // exportFromIndex: true, // metadata: true, - // name: 'zod', + name: 'zod', // requests: { // // case: 'SCREAMING_SNAKE_CASE', // // name: 'z{{name}}TestData', @@ -417,9 +417,9 @@ export default defineConfig(() => { // }, }, types: { - infer: { - case: 'snake_case', - }, + // infer: { + // case: 'snake_case', + // }, }, '~hooks': { symbols: { diff --git a/dev/package.json b/dev/package.json new file mode 100644 index 000000000..7ba556089 --- /dev/null +++ b/dev/package.json @@ -0,0 +1,51 @@ +{ + "name": "@test/openapi-ts-playground", + "version": "0.0.0", + "private": true, + "type": "module", + "engines": { + "node": ">=20.19.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "19.2.19", + "@angular/animations": "19.2.15", + "@angular/cli": "19.2.19", + "@angular/common": "19.2.15", + "@angular/compiler": "19.2.15", + "@angular/compiler-cli": "19.2.15", + "@angular/core": "19.2.15", + "@angular/forms": "19.2.15", + "@angular/platform-browser": "19.2.15", + "@angular/platform-browser-dynamic": "19.2.15", + "@angular/router": "19.2.15", + "@config/vite-base": "workspace:*", + "@hey-api/codegen-core": "workspace:*", + "@hey-api/custom-client": "workspace:*", + "@hey-api/openapi-ts": "workspace:*", + "@pinia/colada": "0.17.7", + "@tanstack/angular-query-experimental": "5.73.3", + "@tanstack/react-query": "5.73.3", + "@tanstack/solid-query": "5.73.3", + "@tanstack/svelte-query": "5.73.3", + "@tanstack/vue-query": "5.73.3", + "@types/cross-spawn": "6.0.6", + "ajv": "8.17.1", + "arktype": "2.1.25", + "axios": "1.8.2", + "cross-spawn": "7.0.6", + "eslint": "9.17.0", + "fastify": "5.2.0", + "glob": "11.0.3", + "node-fetch": "3.3.2", + "nuxt": "3.14.1592", + "ofetch": "1.4.1", + "prettier": "3.4.2", + "rxjs": "7.8.2", + "ts-node": "10.9.2", + "tslib": "2.8.1", + "typescript": "5.9.3", + "valibot": "1.1.0", + "vue": "3.5.13", + "zod": "4.1.12" + } +} diff --git a/dev/tsconfig.json b/dev/tsconfig.json new file mode 100644 index 000000000..3d795553d --- /dev/null +++ b/dev/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../packages/openapi-ts-tests/tsconfig.base.json", + "compilerOptions": { + "allowImportingTsExtensions": true, + "declaration": false, + "esModuleInterop": true, + "noEmit": true, + "resolveJsonModule": true, + "skipLibCheck": true + } +} diff --git a/dev/turbo.json b/dev/turbo.json new file mode 100644 index 000000000..f98d36d36 --- /dev/null +++ b/dev/turbo.json @@ -0,0 +1,10 @@ +{ + "$schema": "../node_modules/turbo/schema.json", + "extends": ["//"], + "tasks": { + "build": { + "dependsOn": [], + "outputs": ["dist/**"] + } + } +} diff --git a/examples/openapi-ts-sample/.gitignore b/examples/openapi-ts-sample/.gitignore deleted file mode 100644 index a547bf36d..000000000 --- a/examples/openapi-ts-sample/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/examples/openapi-ts-sample/CHANGELOG.md b/examples/openapi-ts-sample/CHANGELOG.md deleted file mode 100644 index edd50ad37..000000000 --- a/examples/openapi-ts-sample/CHANGELOG.md +++ /dev/null @@ -1,113 +0,0 @@ -# @example/openapi-ts-sample - -## 0.0.17 - -### Patch Changes - -- Updated dependencies [[`f23f3ae`](https://github.com/hey-api/openapi-ts/commit/f23f3ae874385e758eb8d43bb4e274c9858a4e40)]: - - @hey-api/client-fetch@0.13.1 - -## 0.0.16 - -### Patch Changes - -- Updated dependencies [[`10d2e03`](https://github.com/hey-api/openapi-ts/commit/10d2e03b8295e4e887fab8d023aa823699efbae8)]: - - @hey-api/client-fetch@0.13.0 - -## 0.0.15 - -### Patch Changes - -- Updated dependencies [[`4d8c030`](https://github.com/hey-api/openapi-ts/commit/4d8c03038979c9a75315cc158789b3c198c62f90)]: - - @hey-api/client-fetch@0.12.0 - -## 0.0.14 - -### Patch Changes - -- Updated dependencies [[`8152aaf`](https://github.com/hey-api/openapi-ts/commit/8152aaf4892c48b79fd3dc486eb3c0ea333dc3e6)]: - - @hey-api/client-fetch@0.11.0 - -## 0.0.13 - -### Patch Changes - -- Updated dependencies [[`1f99066`](https://github.com/hey-api/openapi-ts/commit/1f99066efbb2d0e6b9e3710c701293c2cc09d65e)]: - - @hey-api/client-fetch@0.10.2 - -## 0.0.12 - -### Patch Changes - -- Updated dependencies [[`565e0b8`](https://github.com/hey-api/openapi-ts/commit/565e0b89fbab4556ecdc63dfe08250942681140e)]: - - @hey-api/client-fetch@0.10.1 - -## 0.0.11 - -### Patch Changes - -- Updated dependencies [[`fed9699`](https://github.com/hey-api/openapi-ts/commit/fed969985275621c7c2b65ffc760c7c66fafaf72)]: - - @hey-api/client-fetch@0.10.0 - -## 0.0.10 - -### Patch Changes - -- Updated dependencies [[`67c385b`](https://github.com/hey-api/openapi-ts/commit/67c385bf6289a79726b0cdd85fd81ca501cf2248)]: - - @hey-api/client-fetch@0.9.0 - -## 0.0.9 - -### Patch Changes - -- Updated dependencies [[`fe43b88`](https://github.com/hey-api/openapi-ts/commit/fe43b889c20a2001f56e259f93f64851a1caa1d1)]: - - @hey-api/client-fetch@0.8.4 - -## 0.0.8 - -### Patch Changes - -- Updated dependencies [[`c0b36b9`](https://github.com/hey-api/openapi-ts/commit/c0b36b95645d484034c3af145c5554867568979b)]: - - @hey-api/client-fetch@0.8.3 - -## 0.0.7 - -### Patch Changes - -- Updated dependencies [[`b8cc9f8`](https://github.com/hey-api/openapi-ts/commit/b8cc9f8a5eaf4f4ff345abc49c14c6b96744c2ea)]: - - @hey-api/client-fetch@0.8.2 - -## 0.0.6 - -### Patch Changes - -- Updated dependencies [[`7f0f4a7`](https://github.com/hey-api/openapi-ts/commit/7f0f4a76b06c8fafb33581b522faf8efc6fd85ac)]: - - @hey-api/client-fetch@0.8.1 - -## 0.0.5 - -### Patch Changes - -- Updated dependencies [[`bb6d46a`](https://github.com/hey-api/openapi-ts/commit/bb6d46ae119ce4e7e3a2ab3fded74ac4fb4cdff2)]: - - @hey-api/client-fetch@0.8.0 - -## 0.0.4 - -### Patch Changes - -- Updated dependencies [[`2dc380e`](https://github.com/hey-api/openapi-ts/commit/2dc380eabc17c723654beb04ecd7bce6d33d3b49), [`603541e`](https://github.com/hey-api/openapi-ts/commit/603541e307dc2953da7dddd300176865629b50bb), [`2cbffeb`](https://github.com/hey-api/openapi-ts/commit/2cbffeb2cdd6c6143cd68cac68369584879dda31), [`2cbffeb`](https://github.com/hey-api/openapi-ts/commit/2cbffeb2cdd6c6143cd68cac68369584879dda31)]: - - @hey-api/client-fetch@0.7.3 - -## 0.0.3 - -### Patch Changes - -- Updated dependencies [[`8eba19d`](https://github.com/hey-api/openapi-ts/commit/8eba19d4092fc0903572ab9fdadf0b4c26928ba2)]: - - @hey-api/client-fetch@0.7.2 - -## 0.0.2 - -### Patch Changes - -- Updated dependencies [[`0432418`](https://github.com/hey-api/openapi-ts/commit/0432418d72c94ef94865f8216ed2f723ad5191f9), [`4784727`](https://github.com/hey-api/openapi-ts/commit/47847276e8bc854045044dd414382080270dd779)]: - - @hey-api/client-fetch@0.7.1 diff --git a/examples/openapi-ts-sample/index.html b/examples/openapi-ts-sample/index.html deleted file mode 100644 index d301a3a91..000000000 --- a/examples/openapi-ts-sample/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - Hey API + Fetch API Demo - - -
- - - diff --git a/examples/openapi-ts-sample/openapi-ts.config.ts b/examples/openapi-ts-sample/openapi-ts.config.ts deleted file mode 100644 index c37931115..000000000 --- a/examples/openapi-ts-sample/openapi-ts.config.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { defineConfig } from '@hey-api/openapi-ts'; - -export default defineConfig({ - input: - 'https://raw.githubusercontent.com/swagger-api/swagger-petstore/master/src/main/resources/openapi.yaml', - output: { - format: 'prettier', - lint: 'eslint', - path: './src/client', - }, - plugins: [ - { - name: '@hey-api/client-fetch', - runtimeConfigPath: './src/hey-api.ts', - }, - '@hey-api/schemas', - { - name: '@hey-api/sdk', - validator: 'zod', - }, - { - enums: 'javascript', - name: '@hey-api/typescript', - }, - ], -}); diff --git a/examples/openapi-ts-sample/package.json b/examples/openapi-ts-sample/package.json deleted file mode 100644 index 02c16705f..000000000 --- a/examples/openapi-ts-sample/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "@example/openapi-ts-sample", - "private": true, - "version": "0.0.17", - "type": "module", - "scripts": { - "build": "tsc && vite build", - "dev": "vite", - "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "openapi-ts": "openapi-ts", - "preview": "vite preview", - "typecheck": "tsc --noEmit" - }, - "dependencies": { - "@radix-ui/react-form": "0.1.1", - "@radix-ui/react-icons": "1.3.2", - "@radix-ui/themes": "3.1.6", - "react": "19.0.0", - "react-dom": "19.0.0", - "valibot": "1.1.0", - "zod": "4.0.5" - }, - "devDependencies": { - "@config/vite-base": "workspace:*", - "@hey-api/openapi-ts": "workspace:*", - "@types/react": "19.0.1", - "@types/react-dom": "19.0.1", - "@typescript-eslint/eslint-plugin": "8.29.1", - "@typescript-eslint/parser": "8.29.1", - "@vitejs/plugin-react": "4.4.0-beta.1", - "autoprefixer": "10.4.19", - "eslint": "9.17.0", - "eslint-plugin-react-hooks": "5.2.0", - "eslint-plugin-react-refresh": "0.4.7", - "postcss": "8.4.41", - "prettier": "3.4.2", - "tailwindcss": "3.4.9", - "typescript": "5.8.3", - "vite": "7.1.2" - } -} diff --git a/examples/openapi-ts-sample/postcss.config.js b/examples/openapi-ts-sample/postcss.config.js deleted file mode 100644 index 9eef821c4..000000000 --- a/examples/openapi-ts-sample/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - autoprefixer: {}, - tailwindcss: {}, - }, -}; diff --git a/examples/openapi-ts-sample/src/App.css b/examples/openapi-ts-sample/src/App.css deleted file mode 100644 index b5c61c956..000000000 --- a/examples/openapi-ts-sample/src/App.css +++ /dev/null @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; diff --git a/examples/openapi-ts-sample/src/App.tsx b/examples/openapi-ts-sample/src/App.tsx deleted file mode 100644 index 30976530a..000000000 --- a/examples/openapi-ts-sample/src/App.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import './App.css'; - -import { - Box, - Button, - Container, - Flex, - Heading, - Section, -} from '@radix-ui/themes'; - -import { getPetById } from './client/sdk.gen'; - -function App() { - const onClick = async () => { - const response = await getPetById({ - path: { - // @ts-expect-error - foo: 3, - petId: 3, - }, - }); - console.log(response); - }; - - return ( - - -
- - sample for internal testing - -
- - - -
- - - ); -} - -export default App; diff --git a/examples/openapi-ts-sample/src/client/client.gen.ts b/examples/openapi-ts-sample/src/client/client.gen.ts deleted file mode 100644 index 4e785697c..000000000 --- a/examples/openapi-ts-sample/src/client/client.gen.ts +++ /dev/null @@ -1,30 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -import { - type ClientOptions, - type Config, - createClient, - createConfig, -} from './client'; -import { createClientConfig } from './src/hey-api.ts'; -import type { ClientOptions as ClientOptions2 } from './types.gen'; - -/** - * The `createClientConfig()` function will be called on client initialization - * and the returned object will become the client's initial configuration. - * - * You may want to initialize your client this way instead of calling - * `setConfig()`. This is useful for example if you're using Next.js - * to ensure your client always has the correct values. - */ -export type CreateClientConfig = ( - override?: Config, -) => Config & T>; - -export const client = createClient( - createClientConfig( - createConfig({ - baseUrl: 'https://petstore3.swagger.io/api/v3', - }), - ), -); diff --git a/examples/openapi-ts-sample/src/client/client/client.gen.ts b/examples/openapi-ts-sample/src/client/client/client.gen.ts deleted file mode 100644 index a439d2748..000000000 --- a/examples/openapi-ts-sample/src/client/client/client.gen.ts +++ /dev/null @@ -1,268 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -import { createSseClient } from '../core/serverSentEvents.gen'; -import type { HttpMethod } from '../core/types.gen'; -import { getValidRequestBody } from '../core/utils.gen'; -import type { - Client, - Config, - RequestOptions, - ResolvedRequestOptions, -} from './types.gen'; -import { - buildUrl, - createConfig, - createInterceptors, - getParseAs, - mergeConfigs, - mergeHeaders, - setAuthParams, -} from './utils.gen'; - -type ReqInit = Omit & { - body?: any; - headers: ReturnType; -}; - -export const createClient = (config: Config = {}): Client => { - let _config = mergeConfigs(createConfig(), config); - - const getConfig = (): Config => ({ ..._config }); - - const setConfig = (config: Config): Config => { - _config = mergeConfigs(_config, config); - return getConfig(); - }; - - const interceptors = createInterceptors< - Request, - Response, - unknown, - ResolvedRequestOptions - >(); - - const beforeRequest = async (options: RequestOptions) => { - const opts = { - ..._config, - ...options, - fetch: options.fetch ?? _config.fetch ?? globalThis.fetch, - headers: mergeHeaders(_config.headers, options.headers), - serializedBody: undefined, - }; - - if (opts.security) { - await setAuthParams({ - ...opts, - security: opts.security, - }); - } - - if (opts.requestValidator) { - await opts.requestValidator(opts); - } - - if (opts.body !== undefined && opts.bodySerializer) { - opts.serializedBody = opts.bodySerializer(opts.body); - } - - // remove Content-Type header if body is empty to avoid sending invalid requests - if (opts.body === undefined || opts.serializedBody === '') { - opts.headers.delete('Content-Type'); - } - - const url = buildUrl(opts); - - return { opts, url }; - }; - - const request: Client['request'] = async (options) => { - // @ts-expect-error - const { opts, url } = await beforeRequest(options); - const requestInit: ReqInit = { - redirect: 'follow', - ...opts, - body: getValidRequestBody(opts), - }; - - let request = new Request(url, requestInit); - - for (const fn of interceptors.request.fns) { - if (fn) { - request = await fn(request, opts); - } - } - - // fetch must be assigned here, otherwise it would throw the error: - // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation - const _fetch = opts.fetch!; - let response = await _fetch(request); - - for (const fn of interceptors.response.fns) { - if (fn) { - response = await fn(response, request, opts); - } - } - - const result = { - request, - response, - }; - - if (response.ok) { - const parseAs = - (opts.parseAs === 'auto' - ? getParseAs(response.headers.get('Content-Type')) - : opts.parseAs) ?? 'json'; - - if ( - response.status === 204 || - response.headers.get('Content-Length') === '0' - ) { - let emptyData: any; - switch (parseAs) { - case 'arrayBuffer': - case 'blob': - case 'text': - emptyData = await response[parseAs](); - break; - case 'formData': - emptyData = new FormData(); - break; - case 'stream': - emptyData = response.body; - break; - case 'json': - default: - emptyData = {}; - break; - } - return opts.responseStyle === 'data' - ? emptyData - : { - data: emptyData, - ...result, - }; - } - - let data: any; - switch (parseAs) { - case 'arrayBuffer': - case 'blob': - case 'formData': - case 'json': - case 'text': - data = await response[parseAs](); - break; - case 'stream': - return opts.responseStyle === 'data' - ? response.body - : { - data: response.body, - ...result, - }; - } - - if (parseAs === 'json') { - if (opts.responseValidator) { - await opts.responseValidator(data); - } - - if (opts.responseTransformer) { - data = await opts.responseTransformer(data); - } - } - - return opts.responseStyle === 'data' - ? data - : { - data, - ...result, - }; - } - - const textError = await response.text(); - let jsonError: unknown; - - try { - jsonError = JSON.parse(textError); - } catch { - // noop - } - - const error = jsonError ?? textError; - let finalError = error; - - for (const fn of interceptors.error.fns) { - if (fn) { - finalError = (await fn(error, response, request, opts)) as string; - } - } - - finalError = finalError || ({} as string); - - if (opts.throwOnError) { - throw finalError; - } - - // TODO: we probably want to return error and improve types - return opts.responseStyle === 'data' - ? undefined - : { - error: finalError, - ...result, - }; - }; - - const makeMethodFn = - (method: Uppercase) => (options: RequestOptions) => - request({ ...options, method }); - - const makeSseFn = - (method: Uppercase) => async (options: RequestOptions) => { - const { opts, url } = await beforeRequest(options); - return createSseClient({ - ...opts, - body: opts.body as BodyInit | null | undefined, - headers: opts.headers as unknown as Record, - method, - onRequest: async (url, init) => { - let request = new Request(url, init); - for (const fn of interceptors.request.fns) { - if (fn) { - request = await fn(request, opts); - } - } - return request; - }, - url, - }); - }; - - return { - buildUrl, - connect: makeMethodFn('CONNECT'), - delete: makeMethodFn('DELETE'), - get: makeMethodFn('GET'), - getConfig, - head: makeMethodFn('HEAD'), - interceptors, - options: makeMethodFn('OPTIONS'), - patch: makeMethodFn('PATCH'), - post: makeMethodFn('POST'), - put: makeMethodFn('PUT'), - request, - setConfig, - sse: { - connect: makeSseFn('CONNECT'), - delete: makeSseFn('DELETE'), - get: makeSseFn('GET'), - head: makeSseFn('HEAD'), - options: makeSseFn('OPTIONS'), - patch: makeSseFn('PATCH'), - post: makeSseFn('POST'), - put: makeSseFn('PUT'), - trace: makeSseFn('TRACE'), - }, - trace: makeMethodFn('TRACE'), - } as Client; -}; diff --git a/examples/openapi-ts-sample/src/client/client/index.ts b/examples/openapi-ts-sample/src/client/client/index.ts deleted file mode 100644 index cbf8dfeed..000000000 --- a/examples/openapi-ts-sample/src/client/client/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -export type { Auth } from '../core/auth.gen'; -export type { QuerySerializerOptions } from '../core/bodySerializer.gen'; -export { - formDataBodySerializer, - jsonBodySerializer, - urlSearchParamsBodySerializer, -} from '../core/bodySerializer.gen'; -export { buildClientParams } from '../core/params.gen'; -export { serializeQueryKeyValue } from '../core/queryKeySerializer.gen'; -export { createClient } from './client.gen'; -export type { - Client, - ClientOptions, - Config, - CreateClientConfig, - Options, - OptionsLegacyParser, - RequestOptions, - RequestResult, - ResolvedRequestOptions, - ResponseStyle, - TDataShape, -} from './types.gen'; -export { createConfig, mergeHeaders } from './utils.gen'; diff --git a/examples/openapi-ts-sample/src/client/client/types.gen.ts b/examples/openapi-ts-sample/src/client/client/types.gen.ts deleted file mode 100644 index 5c70971f2..000000000 --- a/examples/openapi-ts-sample/src/client/client/types.gen.ts +++ /dev/null @@ -1,268 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -import type { Auth } from '../core/auth.gen'; -import type { - ServerSentEventsOptions, - ServerSentEventsResult, -} from '../core/serverSentEvents.gen'; -import type { - Client as CoreClient, - Config as CoreConfig, -} from '../core/types.gen'; -import type { Middleware } from './utils.gen'; - -export type ResponseStyle = 'data' | 'fields'; - -export interface Config - extends Omit, - CoreConfig { - /** - * Base URL for all requests made by this client. - */ - baseUrl?: T['baseUrl']; - /** - * Fetch API implementation. You can use this option to provide a custom - * fetch instance. - * - * @default globalThis.fetch - */ - fetch?: typeof fetch; - /** - * Please don't use the Fetch client for Next.js applications. The `next` - * options won't have any effect. - * - * Install {@link https://www.npmjs.com/package/@hey-api/client-next `@hey-api/client-next`} instead. - */ - next?: never; - /** - * Return the response data parsed in a specified format. By default, `auto` - * will infer the appropriate method from the `Content-Type` response header. - * You can override this behavior with any of the {@link Body} methods. - * Select `stream` if you don't want to parse response data at all. - * - * @default 'auto' - */ - parseAs?: - | 'arrayBuffer' - | 'auto' - | 'blob' - | 'formData' - | 'json' - | 'stream' - | 'text'; - /** - * Should we return only data or multiple fields (data, error, response, etc.)? - * - * @default 'fields' - */ - responseStyle?: ResponseStyle; - /** - * Throw an error instead of returning it in the response? - * - * @default false - */ - throwOnError?: T['throwOnError']; -} - -export interface RequestOptions< - TData = unknown, - TResponseStyle extends ResponseStyle = 'fields', - ThrowOnError extends boolean = boolean, - Url extends string = string, -> extends Config<{ - responseStyle: TResponseStyle; - throwOnError: ThrowOnError; - }>, - Pick< - ServerSentEventsOptions, - | 'onSseError' - | 'onSseEvent' - | 'sseDefaultRetryDelay' - | 'sseMaxRetryAttempts' - | 'sseMaxRetryDelay' - > { - /** - * Any body that you want to add to your request. - * - * {@link https://developer.mozilla.org/docs/Web/API/fetch#body} - */ - body?: unknown; - path?: Record; - query?: Record; - /** - * Security mechanism(s) to use for the request. - */ - security?: ReadonlyArray; - url: Url; -} - -export interface ResolvedRequestOptions< - TResponseStyle extends ResponseStyle = 'fields', - ThrowOnError extends boolean = boolean, - Url extends string = string, -> extends RequestOptions { - serializedBody?: string; -} - -export type RequestResult< - TData = unknown, - TError = unknown, - ThrowOnError extends boolean = boolean, - TResponseStyle extends ResponseStyle = 'fields', -> = ThrowOnError extends true - ? Promise< - TResponseStyle extends 'data' - ? TData extends Record - ? TData[keyof TData] - : TData - : { - data: TData extends Record - ? TData[keyof TData] - : TData; - request: Request; - response: Response; - } - > - : Promise< - TResponseStyle extends 'data' - ? - | (TData extends Record - ? TData[keyof TData] - : TData) - | undefined - : ( - | { - data: TData extends Record - ? TData[keyof TData] - : TData; - error: undefined; - } - | { - data: undefined; - error: TError extends Record - ? TError[keyof TError] - : TError; - } - ) & { - request: Request; - response: Response; - } - >; - -export interface ClientOptions { - baseUrl?: string; - responseStyle?: ResponseStyle; - throwOnError?: boolean; -} - -type MethodFn = < - TData = unknown, - TError = unknown, - ThrowOnError extends boolean = false, - TResponseStyle extends ResponseStyle = 'fields', ->( - options: Omit, 'method'>, -) => RequestResult; - -type SseFn = < - TData = unknown, - TError = unknown, - ThrowOnError extends boolean = false, - TResponseStyle extends ResponseStyle = 'fields', ->( - options: Omit, 'method'>, -) => Promise>; - -type RequestFn = < - TData = unknown, - TError = unknown, - ThrowOnError extends boolean = false, - TResponseStyle extends ResponseStyle = 'fields', ->( - options: Omit, 'method'> & - Pick< - Required>, - 'method' - >, -) => RequestResult; - -type BuildUrlFn = < - TData extends { - body?: unknown; - path?: Record; - query?: Record; - url: string; - }, ->( - options: TData & Options, -) => string; - -export type Client = CoreClient< - RequestFn, - Config, - MethodFn, - BuildUrlFn, - SseFn -> & { - interceptors: Middleware; -}; - -/** - * The `createClientConfig()` function will be called on client initialization - * and the returned object will become the client's initial configuration. - * - * You may want to initialize your client this way instead of calling - * `setConfig()`. This is useful for example if you're using Next.js - * to ensure your client always has the correct values. - */ -export type CreateClientConfig = ( - override?: Config, -) => Config & T>; - -export interface TDataShape { - body?: unknown; - headers?: unknown; - path?: unknown; - query?: unknown; - url: string; -} - -type OmitKeys = Pick>; - -export type Options< - TData extends TDataShape = TDataShape, - ThrowOnError extends boolean = boolean, - TResponse = unknown, - TResponseStyle extends ResponseStyle = 'fields', -> = OmitKeys< - RequestOptions, - 'body' | 'path' | 'query' | 'url' -> & - ([TData] extends [never] ? unknown : Omit); - -export type OptionsLegacyParser< - TData = unknown, - ThrowOnError extends boolean = boolean, - TResponseStyle extends ResponseStyle = 'fields', -> = TData extends { body?: any } - ? TData extends { headers?: any } - ? OmitKeys< - RequestOptions, - 'body' | 'headers' | 'url' - > & - TData - : OmitKeys< - RequestOptions, - 'body' | 'url' - > & - TData & - Pick, 'headers'> - : TData extends { headers?: any } - ? OmitKeys< - RequestOptions, - 'headers' | 'url' - > & - TData & - Pick, 'body'> - : OmitKeys, 'url'> & - TData; diff --git a/examples/openapi-ts-sample/src/client/client/utils.gen.ts b/examples/openapi-ts-sample/src/client/client/utils.gen.ts deleted file mode 100644 index 89416454b..000000000 --- a/examples/openapi-ts-sample/src/client/client/utils.gen.ts +++ /dev/null @@ -1,337 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -import { getAuthToken } from '../core/auth.gen'; -import type { QuerySerializerOptions } from '../core/bodySerializer.gen'; -import { jsonBodySerializer } from '../core/bodySerializer.gen'; -import { - serializeArrayParam, - serializeObjectParam, - serializePrimitiveParam, -} from '../core/pathSerializer.gen'; -import { getUrl } from '../core/utils.gen'; -import type { - Client, - ClientOptions, - Config, - RequestOptions, -} from './types.gen'; - -export const createQuerySerializer = ({ - parameters = {}, - ...args -}: QuerySerializerOptions = {}) => { - const querySerializer = (queryParams: T) => { - const search: string[] = []; - if (queryParams && typeof queryParams === 'object') { - for (const name in queryParams) { - const value = queryParams[name]; - - if (value === undefined || value === null) { - continue; - } - - const options = parameters[name] || args; - - if (Array.isArray(value)) { - const serializedArray = serializeArrayParam({ - allowReserved: options.allowReserved, - explode: true, - name, - style: 'form', - value, - ...options.array, - }); - if (serializedArray) search.push(serializedArray); - } else if (typeof value === 'object') { - const serializedObject = serializeObjectParam({ - allowReserved: options.allowReserved, - explode: true, - name, - style: 'deepObject', - value: value as Record, - ...options.object, - }); - if (serializedObject) search.push(serializedObject); - } else { - const serializedPrimitive = serializePrimitiveParam({ - allowReserved: options.allowReserved, - name, - value: value as string, - }); - if (serializedPrimitive) search.push(serializedPrimitive); - } - } - } - return search.join('&'); - }; - return querySerializer; -}; - -/** - * Infers parseAs value from provided Content-Type header. - */ -export const getParseAs = ( - contentType: string | null, -): Exclude => { - if (!contentType) { - // If no Content-Type header is provided, the best we can do is return the raw response body, - // which is effectively the same as the 'stream' option. - return 'stream'; - } - - const cleanContent = contentType.split(';')[0]?.trim(); - - if (!cleanContent) { - return; - } - - if ( - cleanContent.startsWith('application/json') || - cleanContent.endsWith('+json') - ) { - return 'json'; - } - - if (cleanContent === 'multipart/form-data') { - return 'formData'; - } - - if ( - ['application/', 'audio/', 'image/', 'video/'].some((type) => - cleanContent.startsWith(type), - ) - ) { - return 'blob'; - } - - if (cleanContent.startsWith('text/')) { - return 'text'; - } - - return; -}; - -const checkForExistence = ( - options: Pick & { - headers: Headers; - }, - name?: string, -): boolean => { - if (!name) { - return false; - } - if ( - options.headers.has(name) || - options.query?.[name] || - options.headers.get('Cookie')?.includes(`${name}=`) - ) { - return true; - } - return false; -}; - -export const setAuthParams = async ({ - security, - ...options -}: Pick, 'security'> & - Pick & { - headers: Headers; - }) => { - for (const auth of security) { - if (checkForExistence(options, auth.name)) { - continue; - } - - const token = await getAuthToken(auth, options.auth); - - if (!token) { - continue; - } - - const name = auth.name ?? 'Authorization'; - - switch (auth.in) { - case 'query': - if (!options.query) { - options.query = {}; - } - options.query[name] = token; - break; - case 'cookie': - options.headers.append('Cookie', `${name}=${token}`); - break; - case 'header': - default: - options.headers.set(name, token); - break; - } - } -}; - -export const buildUrl: Client['buildUrl'] = (options) => - getUrl({ - baseUrl: options.baseUrl as string, - path: options.path, - query: options.query, - querySerializer: - typeof options.querySerializer === 'function' - ? options.querySerializer - : createQuerySerializer(options.querySerializer), - url: options.url, - }); - -export const mergeConfigs = (a: Config, b: Config): Config => { - const config = { ...a, ...b }; - if (config.baseUrl?.endsWith('/')) { - config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1); - } - config.headers = mergeHeaders(a.headers, b.headers); - return config; -}; - -const headersEntries = (headers: Headers): Array<[string, string]> => { - const entries: Array<[string, string]> = []; - headers.forEach((value, key) => { - entries.push([key, value]); - }); - return entries; -}; - -export const mergeHeaders = ( - ...headers: Array['headers'] | undefined> -): Headers => { - const mergedHeaders = new Headers(); - for (const header of headers) { - if (!header) { - continue; - } - - const iterator = - header instanceof Headers - ? headersEntries(header) - : Object.entries(header); - - for (const [key, value] of iterator) { - if (value === null) { - mergedHeaders.delete(key); - } else if (Array.isArray(value)) { - for (const v of value) { - mergedHeaders.append(key, v as string); - } - } else if (value !== undefined) { - // 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), - ); - } - } - } - return mergedHeaders; -}; - -type ErrInterceptor = ( - error: Err, - response: Res, - request: Req, - options: Options, -) => Err | Promise; - -type ReqInterceptor = ( - request: Req, - options: Options, -) => Req | Promise; - -type ResInterceptor = ( - response: Res, - request: Req, - options: Options, -) => Res | Promise; - -class Interceptors { - fns: Array = []; - - clear(): void { - this.fns = []; - } - - eject(id: number | Interceptor): void { - const index = this.getInterceptorIndex(id); - if (this.fns[index]) { - this.fns[index] = null; - } - } - - exists(id: number | Interceptor): boolean { - const index = this.getInterceptorIndex(id); - return Boolean(this.fns[index]); - } - - getInterceptorIndex(id: number | Interceptor): number { - if (typeof id === 'number') { - return this.fns[id] ? id : -1; - } - return this.fns.indexOf(id); - } - - update( - id: number | Interceptor, - fn: Interceptor, - ): number | Interceptor | false { - const index = this.getInterceptorIndex(id); - if (this.fns[index]) { - this.fns[index] = fn; - return id; - } - return false; - } - - use(fn: Interceptor): number { - this.fns.push(fn); - return this.fns.length - 1; - } -} - -export interface Middleware { - error: Interceptors>; - request: Interceptors>; - response: Interceptors>; -} - -export const createInterceptors = (): Middleware< - Req, - Res, - Err, - Options -> => ({ - error: new Interceptors>(), - request: new Interceptors>(), - response: new Interceptors>(), -}); - -const defaultQuerySerializer = createQuerySerializer({ - allowReserved: false, - array: { - explode: true, - style: 'form', - }, - object: { - explode: true, - style: 'deepObject', - }, -}); - -const defaultHeaders = { - 'Content-Type': 'application/json', -}; - -export const createConfig = ( - override: Config & T> = {}, -): Config & T> => ({ - ...jsonBodySerializer, - headers: defaultHeaders, - parseAs: 'auto', - querySerializer: defaultQuerySerializer, - ...override, -}); diff --git a/examples/openapi-ts-sample/src/client/core/auth.gen.ts b/examples/openapi-ts-sample/src/client/core/auth.gen.ts deleted file mode 100644 index f8a73266f..000000000 --- a/examples/openapi-ts-sample/src/client/core/auth.gen.ts +++ /dev/null @@ -1,42 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -export type AuthToken = string | undefined; - -export interface Auth { - /** - * Which part of the request do we use to send the auth? - * - * @default 'header' - */ - in?: 'header' | 'query' | 'cookie'; - /** - * Header or query parameter name. - * - * @default 'Authorization' - */ - name?: string; - scheme?: 'basic' | 'bearer'; - type: 'apiKey' | 'http'; -} - -export const getAuthToken = async ( - auth: Auth, - callback: ((auth: Auth) => Promise | AuthToken) | AuthToken, -): Promise => { - const token = - typeof callback === 'function' ? await callback(auth) : callback; - - if (!token) { - return; - } - - if (auth.scheme === 'bearer') { - return `Bearer ${token}`; - } - - if (auth.scheme === 'basic') { - return `Basic ${btoa(token)}`; - } - - return token; -}; diff --git a/examples/openapi-ts-sample/src/client/core/bodySerializer.gen.ts b/examples/openapi-ts-sample/src/client/core/bodySerializer.gen.ts deleted file mode 100644 index 552b50f7c..000000000 --- a/examples/openapi-ts-sample/src/client/core/bodySerializer.gen.ts +++ /dev/null @@ -1,100 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -import type { - ArrayStyle, - ObjectStyle, - SerializerOptions, -} from './pathSerializer.gen'; - -export type QuerySerializer = (query: Record) => string; - -export type BodySerializer = (body: any) => any; - -type QuerySerializerOptionsObject = { - allowReserved?: boolean; - array?: Partial>; - object?: Partial>; -}; - -export type QuerySerializerOptions = QuerySerializerOptionsObject & { - /** - * Per-parameter serialization overrides. When provided, these settings - * override the global array/object settings for specific parameter names. - */ - parameters?: Record; -}; - -const serializeFormDataPair = ( - data: FormData, - key: string, - value: unknown, -): void => { - if (typeof value === 'string' || value instanceof Blob) { - data.append(key, value); - } else if (value instanceof Date) { - data.append(key, value.toISOString()); - } else { - data.append(key, JSON.stringify(value)); - } -}; - -const serializeUrlSearchParamsPair = ( - data: URLSearchParams, - key: string, - value: unknown, -): void => { - if (typeof value === 'string') { - data.append(key, value); - } else { - data.append(key, JSON.stringify(value)); - } -}; - -export const formDataBodySerializer = { - bodySerializer: | Array>>( - body: T, - ): FormData => { - const data = new FormData(); - - Object.entries(body).forEach(([key, value]) => { - if (value === undefined || value === null) { - return; - } - if (Array.isArray(value)) { - value.forEach((v) => serializeFormDataPair(data, key, v)); - } else { - serializeFormDataPair(data, key, value); - } - }); - - return data; - }, -}; - -export const jsonBodySerializer = { - bodySerializer: (body: T): string => - JSON.stringify(body, (_key, value) => - typeof value === 'bigint' ? value.toString() : value, - ), -}; - -export const urlSearchParamsBodySerializer = { - bodySerializer: | Array>>( - body: T, - ): string => { - const data = new URLSearchParams(); - - Object.entries(body).forEach(([key, value]) => { - if (value === undefined || value === null) { - return; - } - if (Array.isArray(value)) { - value.forEach((v) => serializeUrlSearchParamsPair(data, key, v)); - } else { - serializeUrlSearchParamsPair(data, key, value); - } - }); - - return data.toString(); - }, -}; diff --git a/examples/openapi-ts-sample/src/client/core/params.gen.ts b/examples/openapi-ts-sample/src/client/core/params.gen.ts deleted file mode 100644 index 602715c46..000000000 --- a/examples/openapi-ts-sample/src/client/core/params.gen.ts +++ /dev/null @@ -1,176 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -type Slot = 'body' | 'headers' | 'path' | 'query'; - -export type Field = - | { - in: Exclude; - /** - * Field name. This is the name we want the user to see and use. - */ - key: string; - /** - * Field mapped name. This is the name we want to use in the request. - * If omitted, we use the same value as `key`. - */ - map?: string; - } - | { - in: Extract; - /** - * Key isn't required for bodies. - */ - key?: string; - map?: string; - } - | { - /** - * Field name. This is the name we want the user to see and use. - */ - key: string; - /** - * Field mapped name. This is the name we want to use in the request. - * If `in` is omitted, `map` aliases `key` to the transport layer. - */ - map: Slot; - }; - -export interface Fields { - allowExtra?: Partial>; - args?: ReadonlyArray; -} - -export type FieldsConfig = ReadonlyArray; - -const extraPrefixesMap: Record = { - $body_: 'body', - $headers_: 'headers', - $path_: 'path', - $query_: 'query', -}; -const extraPrefixes = Object.entries(extraPrefixesMap); - -type KeyMap = Map< - string, - | { - in: Slot; - map?: string; - } - | { - in?: never; - map: Slot; - } ->; - -const buildKeyMap = (fields: FieldsConfig, map?: KeyMap): KeyMap => { - if (!map) { - map = new Map(); - } - - for (const config of fields) { - if ('in' in config) { - if (config.key) { - map.set(config.key, { - in: config.in, - map: config.map, - }); - } - } else if ('key' in config) { - map.set(config.key, { - map: config.map, - }); - } else if (config.args) { - buildKeyMap(config.args, map); - } - } - - return map; -}; - -interface Params { - body: unknown; - headers: Record; - path: Record; - query: Record; -} - -const stripEmptySlots = (params: Params) => { - for (const [slot, value] of Object.entries(params)) { - if (value && typeof value === 'object' && !Object.keys(value).length) { - delete params[slot as Slot]; - } - } -}; - -export const buildClientParams = ( - args: ReadonlyArray, - fields: FieldsConfig, -) => { - const params: Params = { - body: {}, - headers: {}, - path: {}, - query: {}, - }; - - const map = buildKeyMap(fields); - - let config: FieldsConfig[number] | undefined; - - for (const [index, arg] of args.entries()) { - if (fields[index]) { - config = fields[index]; - } - - if (!config) { - continue; - } - - if ('in' in config) { - if (config.key) { - const field = map.get(config.key)!; - const name = field.map || config.key; - if (field.in) { - (params[field.in] as Record)[name] = arg; - } - } else { - params.body = arg; - } - } else { - for (const [key, value] of Object.entries(arg ?? {})) { - const field = map.get(key); - - if (field) { - if (field.in) { - const name = field.map || key; - (params[field.in] as Record)[name] = value; - } else { - params[field.map] = value; - } - } else { - const extra = extraPrefixes.find(([prefix]) => - key.startsWith(prefix), - ); - - if (extra) { - const [prefix, slot] = extra; - (params[slot] as Record)[ - key.slice(prefix.length) - ] = value; - } else if ('allowExtra' in config && config.allowExtra) { - for (const [slot, allowed] of Object.entries(config.allowExtra)) { - if (allowed) { - (params[slot as Slot] as Record)[key] = value; - break; - } - } - } - } - } - } - } - - stripEmptySlots(params); - - return params; -}; diff --git a/examples/openapi-ts-sample/src/client/core/pathSerializer.gen.ts b/examples/openapi-ts-sample/src/client/core/pathSerializer.gen.ts deleted file mode 100644 index 8d9993104..000000000 --- a/examples/openapi-ts-sample/src/client/core/pathSerializer.gen.ts +++ /dev/null @@ -1,181 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -interface SerializeOptions - extends SerializePrimitiveOptions, - SerializerOptions {} - -interface SerializePrimitiveOptions { - allowReserved?: boolean; - name: string; -} - -export interface SerializerOptions { - /** - * @default true - */ - explode: boolean; - style: T; -} - -export type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited'; -export type ArraySeparatorStyle = ArrayStyle | MatrixStyle; -type MatrixStyle = 'label' | 'matrix' | 'simple'; -export type ObjectStyle = 'form' | 'deepObject'; -type ObjectSeparatorStyle = ObjectStyle | MatrixStyle; - -interface SerializePrimitiveParam extends SerializePrimitiveOptions { - value: string; -} - -export const separatorArrayExplode = (style: ArraySeparatorStyle) => { - switch (style) { - case 'label': - return '.'; - case 'matrix': - return ';'; - case 'simple': - return ','; - default: - return '&'; - } -}; - -export const separatorArrayNoExplode = (style: ArraySeparatorStyle) => { - switch (style) { - case 'form': - return ','; - case 'pipeDelimited': - return '|'; - case 'spaceDelimited': - return '%20'; - default: - return ','; - } -}; - -export const separatorObjectExplode = (style: ObjectSeparatorStyle) => { - switch (style) { - case 'label': - return '.'; - case 'matrix': - return ';'; - case 'simple': - return ','; - default: - return '&'; - } -}; - -export const serializeArrayParam = ({ - allowReserved, - explode, - name, - style, - value, -}: SerializeOptions & { - value: unknown[]; -}) => { - if (!explode) { - const joinedValues = ( - allowReserved ? value : value.map((v) => encodeURIComponent(v as string)) - ).join(separatorArrayNoExplode(style)); - switch (style) { - case 'label': - return `.${joinedValues}`; - case 'matrix': - return `;${name}=${joinedValues}`; - case 'simple': - return joinedValues; - default: - return `${name}=${joinedValues}`; - } - } - - const separator = separatorArrayExplode(style); - const joinedValues = value - .map((v) => { - if (style === 'label' || style === 'simple') { - return allowReserved ? v : encodeURIComponent(v as string); - } - - return serializePrimitiveParam({ - allowReserved, - name, - value: v as string, - }); - }) - .join(separator); - return style === 'label' || style === 'matrix' - ? separator + joinedValues - : joinedValues; -}; - -export const serializePrimitiveParam = ({ - allowReserved, - name, - value, -}: SerializePrimitiveParam) => { - if (value === undefined || value === null) { - return ''; - } - - if (typeof value === 'object') { - throw new Error( - 'Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.', - ); - } - - return `${name}=${allowReserved ? value : encodeURIComponent(value)}`; -}; - -export const serializeObjectParam = ({ - allowReserved, - explode, - name, - style, - value, - valueOnly, -}: SerializeOptions & { - value: Record | Date; - valueOnly?: boolean; -}) => { - if (value instanceof Date) { - return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`; - } - - if (style !== 'deepObject' && !explode) { - let values: string[] = []; - Object.entries(value).forEach(([key, v]) => { - values = [ - ...values, - key, - allowReserved ? (v as string) : encodeURIComponent(v as string), - ]; - }); - const joinedValues = values.join(','); - switch (style) { - case 'form': - return `${name}=${joinedValues}`; - case 'label': - return `.${joinedValues}`; - case 'matrix': - return `;${name}=${joinedValues}`; - default: - return joinedValues; - } - } - - const separator = separatorObjectExplode(style); - const joinedValues = Object.entries(value) - .map(([key, v]) => - serializePrimitiveParam({ - allowReserved, - name: style === 'deepObject' ? `${name}[${key}]` : key, - value: v as string, - }), - ) - .join(separator); - return style === 'label' || style === 'matrix' - ? separator + joinedValues - : joinedValues; -}; diff --git a/examples/openapi-ts-sample/src/client/core/queryKeySerializer.gen.ts b/examples/openapi-ts-sample/src/client/core/queryKeySerializer.gen.ts deleted file mode 100644 index d3bb68396..000000000 --- a/examples/openapi-ts-sample/src/client/core/queryKeySerializer.gen.ts +++ /dev/null @@ -1,136 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -/** - * JSON-friendly union that mirrors what Pinia Colada can hash. - */ -export type JsonValue = - | null - | string - | number - | boolean - | JsonValue[] - | { [key: string]: JsonValue }; - -/** - * Replacer that converts non-JSON values (bigint, Date, etc.) to safe substitutes. - */ -export const queryKeyJsonReplacer = (_key: string, value: unknown) => { - if ( - value === undefined || - typeof value === 'function' || - typeof value === 'symbol' - ) { - return undefined; - } - if (typeof value === 'bigint') { - return value.toString(); - } - if (value instanceof Date) { - return value.toISOString(); - } - return value; -}; - -/** - * Safely stringifies a value and parses it back into a JsonValue. - */ -export const stringifyToJsonValue = (input: unknown): JsonValue | undefined => { - try { - const json = JSON.stringify(input, queryKeyJsonReplacer); - if (json === undefined) { - return undefined; - } - return JSON.parse(json) as JsonValue; - } catch { - return undefined; - } -}; - -/** - * Detects plain objects (including objects with a null prototype). - */ -const isPlainObject = (value: unknown): value is Record => { - if (value === null || typeof value !== 'object') { - return false; - } - const prototype = Object.getPrototypeOf(value as object); - return prototype === Object.prototype || prototype === null; -}; - -/** - * Turns URLSearchParams into a sorted JSON object for deterministic keys. - */ -const serializeSearchParams = (params: URLSearchParams): JsonValue => { - const entries = Array.from(params.entries()).sort(([a], [b]) => - a.localeCompare(b), - ); - const result: Record = {}; - - for (const [key, value] of entries) { - const existing = result[key]; - if (existing === undefined) { - result[key] = value; - continue; - } - - if (Array.isArray(existing)) { - (existing as string[]).push(value); - } else { - result[key] = [existing, value]; - } - } - - return result; -}; - -/** - * Normalizes any accepted value into a JSON-friendly shape for query keys. - */ -export const serializeQueryKeyValue = ( - value: unknown, -): JsonValue | undefined => { - if (value === null) { - return null; - } - - if ( - typeof value === 'string' || - typeof value === 'number' || - typeof value === 'boolean' - ) { - return value; - } - - if ( - value === undefined || - typeof value === 'function' || - typeof value === 'symbol' - ) { - return undefined; - } - - if (typeof value === 'bigint') { - return value.toString(); - } - - if (value instanceof Date) { - return value.toISOString(); - } - - if (Array.isArray(value)) { - return stringifyToJsonValue(value); - } - - if ( - typeof URLSearchParams !== 'undefined' && - value instanceof URLSearchParams - ) { - return serializeSearchParams(value); - } - - if (isPlainObject(value)) { - return stringifyToJsonValue(value); - } - - return undefined; -}; diff --git a/examples/openapi-ts-sample/src/client/core/serverSentEvents.gen.ts b/examples/openapi-ts-sample/src/client/core/serverSentEvents.gen.ts deleted file mode 100644 index f8fd78e28..000000000 --- a/examples/openapi-ts-sample/src/client/core/serverSentEvents.gen.ts +++ /dev/null @@ -1,264 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -import type { Config } from './types.gen'; - -export type ServerSentEventsOptions = Omit< - RequestInit, - 'method' -> & - Pick & { - /** - * Fetch API implementation. You can use this option to provide a custom - * fetch instance. - * - * @default globalThis.fetch - */ - fetch?: typeof fetch; - /** - * Implementing clients can call request interceptors inside this hook. - */ - onRequest?: (url: string, init: RequestInit) => Promise; - /** - * Callback invoked when a network or parsing error occurs during streaming. - * - * This option applies only if the endpoint returns a stream of events. - * - * @param error The error that occurred. - */ - onSseError?: (error: unknown) => void; - /** - * Callback invoked when an event is streamed from the server. - * - * This option applies only if the endpoint returns a stream of events. - * - * @param event Event streamed from the server. - * @returns Nothing (void). - */ - onSseEvent?: (event: StreamEvent) => void; - serializedBody?: RequestInit['body']; - /** - * Default retry delay in milliseconds. - * - * This option applies only if the endpoint returns a stream of events. - * - * @default 3000 - */ - sseDefaultRetryDelay?: number; - /** - * Maximum number of retry attempts before giving up. - */ - sseMaxRetryAttempts?: number; - /** - * Maximum retry delay in milliseconds. - * - * Applies only when exponential backoff is used. - * - * This option applies only if the endpoint returns a stream of events. - * - * @default 30000 - */ - sseMaxRetryDelay?: number; - /** - * Optional sleep function for retry backoff. - * - * Defaults to using `setTimeout`. - */ - sseSleepFn?: (ms: number) => Promise; - url: string; - }; - -export interface StreamEvent { - data: TData; - event?: string; - id?: string; - retry?: number; -} - -export type ServerSentEventsResult< - TData = unknown, - TReturn = void, - TNext = unknown, -> = { - stream: AsyncGenerator< - TData extends Record ? TData[keyof TData] : TData, - TReturn, - TNext - >; -}; - -export const createSseClient = ({ - onRequest, - onSseError, - onSseEvent, - responseTransformer, - responseValidator, - sseDefaultRetryDelay, - sseMaxRetryAttempts, - sseMaxRetryDelay, - sseSleepFn, - url, - ...options -}: ServerSentEventsOptions): ServerSentEventsResult => { - let lastEventId: string | undefined; - - const sleep = - sseSleepFn ?? - ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms))); - - const createStream = async function* () { - let retryDelay: number = sseDefaultRetryDelay ?? 3000; - let attempt = 0; - const signal = options.signal ?? new AbortController().signal; - - while (true) { - if (signal.aborted) break; - - attempt++; - - const headers = - options.headers instanceof Headers - ? options.headers - : new Headers(options.headers as Record | undefined); - - if (lastEventId !== undefined) { - headers.set('Last-Event-ID', lastEventId); - } - - try { - const requestInit: RequestInit = { - redirect: 'follow', - ...options, - body: options.serializedBody, - headers, - signal, - }; - let request = new Request(url, requestInit); - if (onRequest) { - request = await onRequest(url, requestInit); - } - // fetch must be assigned here, otherwise it would throw the error: - // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation - const _fetch = options.fetch ?? globalThis.fetch; - const response = await _fetch(request); - - if (!response.ok) - throw new Error( - `SSE failed: ${response.status} ${response.statusText}`, - ); - - if (!response.body) throw new Error('No body in SSE response'); - - const reader = response.body - .pipeThrough(new TextDecoderStream()) - .getReader(); - - let buffer = ''; - - const abortHandler = () => { - try { - reader.cancel(); - } catch { - // noop - } - }; - - signal.addEventListener('abort', abortHandler); - - try { - while (true) { - const { done, value } = await reader.read(); - if (done) break; - buffer += value; - - const chunks = buffer.split('\n\n'); - buffer = chunks.pop() ?? ''; - - for (const chunk of chunks) { - const lines = chunk.split('\n'); - const dataLines: Array = []; - let eventName: string | undefined; - - for (const line of lines) { - if (line.startsWith('data:')) { - dataLines.push(line.replace(/^data:\s*/, '')); - } else if (line.startsWith('event:')) { - eventName = line.replace(/^event:\s*/, ''); - } else if (line.startsWith('id:')) { - lastEventId = line.replace(/^id:\s*/, ''); - } else if (line.startsWith('retry:')) { - const parsed = Number.parseInt( - line.replace(/^retry:\s*/, ''), - 10, - ); - if (!Number.isNaN(parsed)) { - retryDelay = parsed; - } - } - } - - let data: unknown; - let parsedJson = false; - - if (dataLines.length) { - const rawData = dataLines.join('\n'); - try { - data = JSON.parse(rawData); - parsedJson = true; - } catch { - data = rawData; - } - } - - if (parsedJson) { - if (responseValidator) { - await responseValidator(data); - } - - if (responseTransformer) { - data = await responseTransformer(data); - } - } - - onSseEvent?.({ - data, - event: eventName, - id: lastEventId, - retry: retryDelay, - }); - - if (dataLines.length) { - yield data as any; - } - } - } - } finally { - signal.removeEventListener('abort', abortHandler); - reader.releaseLock(); - } - - break; // exit loop on normal completion - } catch (error) { - // connection failed or aborted; retry after delay - onSseError?.(error); - - if ( - sseMaxRetryAttempts !== undefined && - attempt >= sseMaxRetryAttempts - ) { - break; // stop after firing error - } - - // exponential backoff: double retry each attempt, cap at 30s - const backoff = Math.min( - retryDelay * 2 ** (attempt - 1), - sseMaxRetryDelay ?? 30000, - ); - await sleep(backoff); - } - } - }; - - const stream = createStream(); - - return { stream }; -}; diff --git a/examples/openapi-ts-sample/src/client/core/types.gen.ts b/examples/openapi-ts-sample/src/client/core/types.gen.ts deleted file mode 100644 index 643c070c9..000000000 --- a/examples/openapi-ts-sample/src/client/core/types.gen.ts +++ /dev/null @@ -1,118 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -import type { Auth, AuthToken } from './auth.gen'; -import type { - BodySerializer, - QuerySerializer, - QuerySerializerOptions, -} from './bodySerializer.gen'; - -export type HttpMethod = - | 'connect' - | 'delete' - | 'get' - | 'head' - | 'options' - | 'patch' - | 'post' - | 'put' - | 'trace'; - -export type Client< - RequestFn = never, - Config = unknown, - MethodFn = never, - BuildUrlFn = never, - SseFn = never, -> = { - /** - * Returns the final request URL. - */ - buildUrl: BuildUrlFn; - getConfig: () => Config; - request: RequestFn; - setConfig: (config: Config) => Config; -} & { - [K in HttpMethod]: MethodFn; -} & ([SseFn] extends [never] - ? { sse?: never } - : { sse: { [K in HttpMethod]: SseFn } }); - -export interface Config { - /** - * Auth token or a function returning auth token. The resolved value will be - * added to the request payload as defined by its `security` array. - */ - auth?: ((auth: Auth) => Promise | AuthToken) | AuthToken; - /** - * A function for serializing request body parameter. By default, - * {@link JSON.stringify()} will be used. - */ - bodySerializer?: BodySerializer | null; - /** - * An object containing any HTTP headers that you want to pre-populate your - * `Headers` object with. - * - * {@link https://developer.mozilla.org/docs/Web/API/Headers/Headers#init See more} - */ - headers?: - | RequestInit['headers'] - | Record< - string, - | string - | number - | boolean - | (string | number | boolean)[] - | null - | undefined - | unknown - >; - /** - * The request method. - * - * {@link https://developer.mozilla.org/docs/Web/API/fetch#method See more} - */ - method?: Uppercase; - /** - * A function for serializing request query parameters. By default, arrays - * will be exploded in form style, objects will be exploded in deepObject - * style, and reserved characters are percent-encoded. - * - * This method will have no effect if the native `paramsSerializer()` Axios - * API function is used. - * - * {@link https://swagger.io/docs/specification/serialization/#query View examples} - */ - querySerializer?: QuerySerializer | QuerySerializerOptions; - /** - * A function validating request data. This is useful if you want to ensure - * the request conforms to the desired shape, so it can be safely sent to - * the server. - */ - requestValidator?: (data: unknown) => Promise; - /** - * A function transforming response data before it's returned. This is useful - * for post-processing data, e.g. converting ISO strings into Date objects. - */ - responseTransformer?: (data: unknown) => Promise; - /** - * A function validating response data. This is useful if you want to ensure - * the response conforms to the desired shape, so it can be safely passed to - * the transformers and returned to the user. - */ - responseValidator?: (data: unknown) => Promise; -} - -type IsExactlyNeverOrNeverUndefined = [T] extends [never] - ? true - : [T] extends [never | undefined] - ? [undefined] extends [T] - ? false - : true - : false; - -export type OmitNever> = { - [K in keyof T as IsExactlyNeverOrNeverUndefined extends true - ? never - : K]: T[K]; -}; diff --git a/examples/openapi-ts-sample/src/client/core/utils.gen.ts b/examples/openapi-ts-sample/src/client/core/utils.gen.ts deleted file mode 100644 index 0b5389d08..000000000 --- a/examples/openapi-ts-sample/src/client/core/utils.gen.ts +++ /dev/null @@ -1,143 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -import type { BodySerializer, QuerySerializer } from './bodySerializer.gen'; -import { - type ArraySeparatorStyle, - serializeArrayParam, - serializeObjectParam, - serializePrimitiveParam, -} from './pathSerializer.gen'; - -export interface PathSerializer { - path: Record; - url: string; -} - -export const PATH_PARAM_RE = /\{[^{}]+\}/g; - -export const defaultPathSerializer = ({ path, url: _url }: PathSerializer) => { - let url = _url; - const matches = _url.match(PATH_PARAM_RE); - if (matches) { - for (const match of matches) { - let explode = false; - let name = match.substring(1, match.length - 1); - let style: ArraySeparatorStyle = 'simple'; - - if (name.endsWith('*')) { - explode = true; - name = name.substring(0, name.length - 1); - } - - if (name.startsWith('.')) { - name = name.substring(1); - style = 'label'; - } else if (name.startsWith(';')) { - name = name.substring(1); - style = 'matrix'; - } - - const value = path[name]; - - if (value === undefined || value === null) { - continue; - } - - if (Array.isArray(value)) { - url = url.replace( - match, - serializeArrayParam({ explode, name, style, value }), - ); - continue; - } - - if (typeof value === 'object') { - url = url.replace( - match, - serializeObjectParam({ - explode, - name, - style, - value: value as Record, - valueOnly: true, - }), - ); - continue; - } - - if (style === 'matrix') { - url = url.replace( - match, - `;${serializePrimitiveParam({ - name, - value: value as string, - })}`, - ); - continue; - } - - const replaceValue = encodeURIComponent( - style === 'label' ? `.${value as string}` : (value as string), - ); - url = url.replace(match, replaceValue); - } - } - return url; -}; - -export const getUrl = ({ - baseUrl, - path, - query, - querySerializer, - url: _url, -}: { - baseUrl?: string; - path?: Record; - query?: Record; - querySerializer: QuerySerializer; - url: string; -}) => { - const pathUrl = _url.startsWith('/') ? _url : `/${_url}`; - let url = (baseUrl ?? '') + pathUrl; - if (path) { - url = defaultPathSerializer({ path, url }); - } - let search = query ? querySerializer(query) : ''; - if (search.startsWith('?')) { - search = search.substring(1); - } - if (search) { - url += `?${search}`; - } - return url; -}; - -export function getValidRequestBody(options: { - body?: unknown; - bodySerializer?: BodySerializer | null; - serializedBody?: unknown; -}) { - const hasBody = options.body !== undefined; - const isSerializedBody = hasBody && options.bodySerializer; - - if (isSerializedBody) { - if ('serializedBody' in options) { - const hasSerializedBody = - options.serializedBody !== undefined && options.serializedBody !== ''; - - return hasSerializedBody ? options.serializedBody : null; - } - - // not all clients implement a serializedBody property (i.e. client-axios) - return options.body !== '' ? options.body : null; - } - - // plain/text body - if (hasBody) { - return options.body; - } - - // no body was provided - return undefined; -} diff --git a/examples/openapi-ts-sample/src/client/index.ts b/examples/openapi-ts-sample/src/client/index.ts deleted file mode 100644 index 57ed02bf5..000000000 --- a/examples/openapi-ts-sample/src/client/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -export * from './sdk.gen'; -export type * from './types.gen'; diff --git a/examples/openapi-ts-sample/src/client/schemas.gen.ts b/examples/openapi-ts-sample/src/client/schemas.gen.ts deleted file mode 100644 index 646632e83..000000000 --- a/examples/openapi-ts-sample/src/client/schemas.gen.ts +++ /dev/null @@ -1,188 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -export const OrderSchema = { - properties: { - complete: { - type: 'boolean', - }, - id: { - example: 10, - format: 'int64', - type: 'integer', - }, - petId: { - example: 198772, - format: 'int64', - type: 'integer', - }, - quantity: { - example: 7, - format: 'int32', - type: 'integer', - }, - shipDate: { - format: 'date-time', - type: 'string', - }, - status: { - description: 'Order Status', - enum: ['placed', 'approved', 'delivered'], - example: 'approved', - type: 'string', - }, - }, - type: 'object', - 'x-swagger-router-model': 'io.swagger.petstore.model.Order', - xml: { - name: 'order', - }, -} as const; - -export const CategorySchema = { - properties: { - id: { - example: 1, - format: 'int64', - type: 'integer', - }, - name: { - example: 'Dogs', - type: 'string', - }, - }, - type: 'object', - 'x-swagger-router-model': 'io.swagger.petstore.model.Category', - xml: { - name: 'category', - }, -} as const; - -export const UserSchema = { - properties: { - email: { - example: 'john@email.com', - type: 'string', - }, - firstName: { - example: 'John', - type: 'string', - }, - id: { - example: 10, - format: 'int64', - type: 'integer', - }, - lastName: { - example: 'James', - type: 'string', - }, - password: { - example: '12345', - type: 'string', - }, - phone: { - example: '12345', - type: 'string', - }, - userStatus: { - description: 'User Status', - example: 1, - format: 'int32', - type: 'integer', - }, - username: { - example: 'theUser', - type: 'string', - }, - }, - type: 'object', - 'x-swagger-router-model': 'io.swagger.petstore.model.User', - xml: { - name: 'user', - }, -} as const; - -export const TagSchema = { - properties: { - id: { - format: 'int64', - type: 'integer', - }, - name: { - type: 'string', - }, - }, - type: 'object', - 'x-swagger-router-model': 'io.swagger.petstore.model.Tag', - xml: { - name: 'tag', - }, -} as const; - -export const PetSchema = { - properties: { - category: { - $ref: '#/components/schemas/Category', - }, - id: { - example: 10, - format: 'int64', - type: 'integer', - }, - name: { - example: 'doggie', - type: 'string', - }, - photoUrls: { - items: { - type: 'string', - xml: { - name: 'photoUrl', - }, - }, - type: 'array', - xml: { - wrapped: true, - }, - }, - status: { - description: 'pet status in the store', - enum: ['available', 'pending', 'sold'], - type: 'string', - }, - tags: { - items: { - $ref: '#/components/schemas/Tag', - }, - type: 'array', - xml: { - wrapped: true, - }, - }, - }, - required: ['name', 'photoUrls'], - type: 'object', - 'x-swagger-router-model': 'io.swagger.petstore.model.Pet', - xml: { - name: 'pet', - }, -} as const; - -export const ApiResponseSchema = { - properties: { - code: { - format: 'int32', - type: 'integer', - }, - message: { - type: 'string', - }, - type: { - type: 'string', - }, - }, - type: 'object', - xml: { - name: '##default', - }, -} as const; diff --git a/examples/openapi-ts-sample/src/client/sdk.gen.ts b/examples/openapi-ts-sample/src/client/sdk.gen.ts deleted file mode 100644 index 867b5a377..000000000 --- a/examples/openapi-ts-sample/src/client/sdk.gen.ts +++ /dev/null @@ -1,571 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -import type { Client, Options as Options2, TDataShape } from './client'; -import { client } from './client.gen'; -import type { - AddPetData, - AddPetErrors, - AddPetResponses, - CreateUserData, - CreateUserErrors, - CreateUserResponses, - CreateUsersWithListInputData, - CreateUsersWithListInputErrors, - CreateUsersWithListInputResponses, - DeleteOrderData, - DeleteOrderErrors, - DeleteOrderResponses, - DeletePetData, - DeletePetErrors, - DeletePetResponses, - DeleteUserData, - DeleteUserErrors, - DeleteUserResponses, - FindPetsByStatusData, - FindPetsByStatusErrors, - FindPetsByStatusResponses, - FindPetsByTagsData, - FindPetsByTagsErrors, - FindPetsByTagsResponses, - GetInventoryData, - GetInventoryErrors, - GetInventoryResponses, - GetOrderByIdData, - GetOrderByIdErrors, - GetOrderByIdResponses, - GetPetByIdData, - GetPetByIdErrors, - GetPetByIdResponses, - GetUserByNameData, - GetUserByNameErrors, - GetUserByNameResponses, - LoginUserData, - LoginUserErrors, - LoginUserResponses, - LogoutUserData, - LogoutUserErrors, - LogoutUserResponses, - PlaceOrderData, - PlaceOrderErrors, - PlaceOrderResponses, - UpdatePetData, - UpdatePetErrors, - UpdatePetResponses, - UpdatePetWithFormData, - UpdatePetWithFormErrors, - UpdatePetWithFormResponses, - UpdateUserData, - UpdateUserErrors, - UpdateUserResponses, - UploadFileData, - UploadFileErrors, - UploadFileResponses, -} from './types.gen'; -import { - zAddPetData, - zAddPetResponse, - zCreateUserData, - zCreateUserResponse, - zCreateUsersWithListInputData, - zCreateUsersWithListInputResponse, - zDeleteOrderData, - zDeletePetData, - zDeleteUserData, - zFindPetsByStatusData, - zFindPetsByStatusResponse, - zFindPetsByTagsData, - zFindPetsByTagsResponse, - zGetInventoryData, - zGetInventoryResponse, - zGetOrderByIdData, - zGetOrderByIdResponse, - zGetPetByIdData, - zGetPetByIdResponse, - zGetUserByNameData, - zGetUserByNameResponse, - zLoginUserData, - zLoginUserResponse, - zLogoutUserData, - zPlaceOrderData, - zPlaceOrderResponse, - zUpdatePetData, - zUpdatePetResponse, - zUpdatePetWithFormData, - zUpdatePetWithFormResponse, - zUpdateUserData, - zUploadFileData, - zUploadFileResponse, -} from './zod.gen'; - -export type Options< - TData extends TDataShape = TDataShape, - ThrowOnError extends boolean = boolean, -> = Options2 & { - /** - * You can provide a client instance returned by `createClient()` instead of - * individual options. This might be also useful if you want to implement a - * custom client. - */ - client?: Client; - /** - * You can pass arbitrary values through the `meta` object. This can be - * used to access values that aren't defined as part of the SDK function. - */ - meta?: Record; -}; - -/** - * Add a new pet to the store. - * - * Add a new pet to the store. - */ -export const addPet = ( - options: Options, -) => - (options.client ?? client).post({ - requestValidator: async (data) => await zAddPetData.parseAsync(data), - responseValidator: async (data) => await zAddPetResponse.parseAsync(data), - security: [ - { - scheme: 'bearer', - type: 'http', - }, - ], - url: '/pet', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options.headers, - }, - }); - -/** - * Update an existing pet. - * - * Update an existing pet by Id. - */ -export const updatePet = ( - options: Options, -) => - (options.client ?? client).put< - UpdatePetResponses, - UpdatePetErrors, - ThrowOnError - >({ - requestValidator: async (data) => await zUpdatePetData.parseAsync(data), - responseValidator: async (data) => - await zUpdatePetResponse.parseAsync(data), - security: [ - { - scheme: 'bearer', - type: 'http', - }, - ], - url: '/pet', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options.headers, - }, - }); - -/** - * Finds Pets by status. - * - * Multiple status values can be provided with comma separated strings. - */ -export const findPetsByStatus = ( - options: Options, -) => - (options.client ?? client).get< - FindPetsByStatusResponses, - FindPetsByStatusErrors, - ThrowOnError - >({ - requestValidator: async (data) => - await zFindPetsByStatusData.parseAsync(data), - responseValidator: async (data) => - await zFindPetsByStatusResponse.parseAsync(data), - security: [ - { - scheme: 'bearer', - type: 'http', - }, - ], - url: '/pet/findByStatus', - ...options, - }); - -/** - * Finds Pets by tags. - * - * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. - */ -export const findPetsByTags = ( - options: Options, -) => - (options.client ?? client).get< - FindPetsByTagsResponses, - FindPetsByTagsErrors, - ThrowOnError - >({ - requestValidator: async (data) => - await zFindPetsByTagsData.parseAsync(data), - responseValidator: async (data) => - await zFindPetsByTagsResponse.parseAsync(data), - security: [ - { - scheme: 'bearer', - type: 'http', - }, - ], - url: '/pet/findByTags', - ...options, - }); - -/** - * Deletes a pet. - * - * Delete a pet. - */ -export const deletePet = ( - options: Options, -) => - (options.client ?? client).delete< - DeletePetResponses, - DeletePetErrors, - ThrowOnError - >({ - requestValidator: async (data) => await zDeletePetData.parseAsync(data), - security: [ - { - scheme: 'bearer', - type: 'http', - }, - ], - url: '/pet/{petId}', - ...options, - }); - -/** - * Find pet by ID. - * - * Returns a single pet. - */ -export const getPetById = ( - options: Options, -) => - (options.client ?? client).get< - GetPetByIdResponses, - GetPetByIdErrors, - ThrowOnError - >({ - requestValidator: async (data) => await zGetPetByIdData.parseAsync(data), - responseValidator: async (data) => - await zGetPetByIdResponse.parseAsync(data), - security: [ - { - name: 'api_key', - type: 'apiKey', - }, - { - scheme: 'bearer', - type: 'http', - }, - ], - url: '/pet/{petId}', - ...options, - }); - -/** - * Updates a pet in the store with form data. - * - * Updates a pet resource based on the form data. - */ -export const updatePetWithForm = ( - options: Options, -) => - (options.client ?? client).post< - UpdatePetWithFormResponses, - UpdatePetWithFormErrors, - ThrowOnError - >({ - requestValidator: async (data) => - await zUpdatePetWithFormData.parseAsync(data), - responseValidator: async (data) => - await zUpdatePetWithFormResponse.parseAsync(data), - security: [ - { - scheme: 'bearer', - type: 'http', - }, - ], - url: '/pet/{petId}', - ...options, - }); - -/** - * Uploads an image. - * - * Upload image of the pet. - */ -export const uploadFile = ( - options: Options, -) => - (options.client ?? client).post< - UploadFileResponses, - UploadFileErrors, - ThrowOnError - >({ - bodySerializer: null, - requestValidator: async (data) => await zUploadFileData.parseAsync(data), - responseValidator: async (data) => - await zUploadFileResponse.parseAsync(data), - security: [ - { - scheme: 'bearer', - type: 'http', - }, - ], - url: '/pet/{petId}/uploadImage', - ...options, - headers: { - 'Content-Type': 'application/octet-stream', - ...options.headers, - }, - }); - -/** - * Returns pet inventories by status. - * - * Returns a map of status codes to quantities. - */ -export const getInventory = ( - options?: Options, -) => - (options?.client ?? client).get< - GetInventoryResponses, - GetInventoryErrors, - ThrowOnError - >({ - requestValidator: async (data) => await zGetInventoryData.parseAsync(data), - responseValidator: async (data) => - await zGetInventoryResponse.parseAsync(data), - security: [ - { - name: 'api_key', - type: 'apiKey', - }, - ], - url: '/store/inventory', - ...options, - }); - -/** - * Place an order for a pet. - * - * Place a new order in the store. - */ -export const placeOrder = ( - options?: Options, -) => - (options?.client ?? client).post< - PlaceOrderResponses, - PlaceOrderErrors, - ThrowOnError - >({ - requestValidator: async (data) => await zPlaceOrderData.parseAsync(data), - responseValidator: async (data) => - await zPlaceOrderResponse.parseAsync(data), - url: '/store/order', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - }, - }); - -/** - * Delete purchase order by identifier. - * - * For valid response try integer IDs with value < 1000. Anything above 1000 or non-integers will generate API errors. - */ -export const deleteOrder = ( - options: Options, -) => - (options.client ?? client).delete< - DeleteOrderResponses, - DeleteOrderErrors, - ThrowOnError - >({ - requestValidator: async (data) => await zDeleteOrderData.parseAsync(data), - url: '/store/order/{orderId}', - ...options, - }); - -/** - * Find purchase order by ID. - * - * For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions. - */ -export const getOrderById = ( - options: Options, -) => - (options.client ?? client).get< - GetOrderByIdResponses, - GetOrderByIdErrors, - ThrowOnError - >({ - requestValidator: async (data) => await zGetOrderByIdData.parseAsync(data), - responseValidator: async (data) => - await zGetOrderByIdResponse.parseAsync(data), - url: '/store/order/{orderId}', - ...options, - }); - -/** - * Create user. - * - * This can only be done by the logged in user. - */ -export const createUser = ( - options?: Options, -) => - (options?.client ?? client).post< - CreateUserResponses, - CreateUserErrors, - ThrowOnError - >({ - requestValidator: async (data) => await zCreateUserData.parseAsync(data), - responseValidator: async (data) => - await zCreateUserResponse.parseAsync(data), - url: '/user', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - }, - }); - -/** - * Creates list of users with given input array. - * - * Creates list of users with given input array. - */ -export const createUsersWithListInput = ( - options?: Options, -) => - (options?.client ?? client).post< - CreateUsersWithListInputResponses, - CreateUsersWithListInputErrors, - ThrowOnError - >({ - requestValidator: async (data) => - await zCreateUsersWithListInputData.parseAsync(data), - responseValidator: async (data) => - await zCreateUsersWithListInputResponse.parseAsync(data), - url: '/user/createWithList', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - }, - }); - -/** - * Logs user into the system. - * - * Log into the system. - */ -export const loginUser = ( - options?: Options, -) => - (options?.client ?? client).get< - LoginUserResponses, - LoginUserErrors, - ThrowOnError - >({ - requestValidator: async (data) => await zLoginUserData.parseAsync(data), - responseValidator: async (data) => - await zLoginUserResponse.parseAsync(data), - url: '/user/login', - ...options, - }); - -/** - * Logs out current logged in user session. - * - * Log user out of the system. - */ -export const logoutUser = ( - options?: Options, -) => - (options?.client ?? client).get< - LogoutUserResponses, - LogoutUserErrors, - ThrowOnError - >({ - requestValidator: async (data) => await zLogoutUserData.parseAsync(data), - url: '/user/logout', - ...options, - }); - -/** - * Delete user resource. - * - * This can only be done by the logged in user. - */ -export const deleteUser = ( - options: Options, -) => - (options.client ?? client).delete< - DeleteUserResponses, - DeleteUserErrors, - ThrowOnError - >({ - requestValidator: async (data) => await zDeleteUserData.parseAsync(data), - url: '/user/{username}', - ...options, - }); - -/** - * Get user by user name. - * - * Get user detail based on username. - */ -export const getUserByName = ( - options: Options, -) => - (options.client ?? client).get< - GetUserByNameResponses, - GetUserByNameErrors, - ThrowOnError - >({ - requestValidator: async (data) => await zGetUserByNameData.parseAsync(data), - responseValidator: async (data) => - await zGetUserByNameResponse.parseAsync(data), - url: '/user/{username}', - ...options, - }); - -/** - * Update user resource. - * - * This can only be done by the logged in user. - */ -export const updateUser = ( - options: Options, -) => - (options.client ?? client).put< - UpdateUserResponses, - UpdateUserErrors, - ThrowOnError - >({ - requestValidator: async (data) => await zUpdateUserData.parseAsync(data), - url: '/user/{username}', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options.headers, - }, - }); diff --git a/examples/openapi-ts-sample/src/client/types.gen.ts b/examples/openapi-ts-sample/src/client/types.gen.ts deleted file mode 100644 index a2e6be0fa..000000000 --- a/examples/openapi-ts-sample/src/client/types.gen.ts +++ /dev/null @@ -1,699 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -export type ClientOptions = { - baseUrl: 'https://petstore3.swagger.io/api/v3' | (string & {}); -}; - -export type Order = { - complete?: boolean; - id?: number; - petId?: number; - quantity?: number; - shipDate?: string; - /** - * Order Status - */ - status?: 'placed' | 'approved' | 'delivered'; -}; - -export type Category = { - id?: number; - name?: string; -}; - -export type User = { - email?: string; - firstName?: string; - id?: number; - lastName?: string; - password?: string; - phone?: string; - /** - * User Status - */ - userStatus?: number; - username?: string; -}; - -export type Tag = { - id?: number; - name?: string; -}; - -export type Pet = { - category?: Category; - id?: number; - name: string; - photoUrls: Array; - /** - * pet status in the store - */ - status?: 'available' | 'pending' | 'sold'; - tags?: Array; -}; - -export type ApiResponse = { - code?: number; - message?: string; - type?: string; -}; - -export type Pet2 = Pet; - -/** - * List of user object - */ -export type UserArray = Array; - -export type AddPetData = { - /** - * Create a new pet in the store - */ - body: Pet; - path?: never; - query?: never; - url: '/pet'; -}; - -export type AddPetErrors = { - /** - * Invalid input - */ - 400: unknown; - /** - * Validation exception - */ - 422: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type AddPetResponses = { - /** - * Successful operation - */ - 200: Pet; -}; - -export type AddPetResponse = AddPetResponses[keyof AddPetResponses]; - -export type UpdatePetData = { - /** - * Update an existent pet in the store - */ - body: Pet; - path?: never; - query?: never; - url: '/pet'; -}; - -export type UpdatePetErrors = { - /** - * Invalid ID supplied - */ - 400: unknown; - /** - * Pet not found - */ - 404: unknown; - /** - * Validation exception - */ - 422: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type UpdatePetResponses = { - /** - * Successful operation - */ - 200: Pet; -}; - -export type UpdatePetResponse = UpdatePetResponses[keyof UpdatePetResponses]; - -export type FindPetsByStatusData = { - body?: never; - path?: never; - query: { - /** - * Status values that need to be considered for filter - */ - status: 'available' | 'pending' | 'sold'; - }; - url: '/pet/findByStatus'; -}; - -export type FindPetsByStatusErrors = { - /** - * Invalid status value - */ - 400: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type FindPetsByStatusResponses = { - /** - * successful operation - */ - 200: Array; -}; - -export type FindPetsByStatusResponse = - FindPetsByStatusResponses[keyof FindPetsByStatusResponses]; - -export type FindPetsByTagsData = { - body?: never; - path?: never; - query: { - /** - * Tags to filter by - */ - tags: Array; - }; - url: '/pet/findByTags'; -}; - -export type FindPetsByTagsErrors = { - /** - * Invalid tag value - */ - 400: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type FindPetsByTagsResponses = { - /** - * successful operation - */ - 200: Array; -}; - -export type FindPetsByTagsResponse = - FindPetsByTagsResponses[keyof FindPetsByTagsResponses]; - -export type DeletePetData = { - body?: never; - headers?: { - api_key?: string; - }; - path: { - /** - * Pet id to delete - */ - petId: number; - }; - query?: never; - url: '/pet/{petId}'; -}; - -export type DeletePetErrors = { - /** - * Invalid pet value - */ - 400: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type DeletePetResponses = { - /** - * Pet deleted - */ - 200: unknown; -}; - -export type GetPetByIdData = { - body?: never; - path: { - /** - * ID of pet to return - */ - petId: number; - }; - query?: never; - url: '/pet/{petId}'; -}; - -export type GetPetByIdErrors = { - /** - * Invalid ID supplied - */ - 400: unknown; - /** - * Pet not found - */ - 404: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type GetPetByIdResponses = { - /** - * successful operation - */ - 200: Pet; -}; - -export type GetPetByIdResponse = GetPetByIdResponses[keyof GetPetByIdResponses]; - -export type UpdatePetWithFormData = { - body?: never; - path: { - /** - * ID of pet that needs to be updated - */ - petId: number; - }; - query?: { - /** - * Name of pet that needs to be updated - */ - name?: string; - /** - * Status of pet that needs to be updated - */ - status?: string; - }; - url: '/pet/{petId}'; -}; - -export type UpdatePetWithFormErrors = { - /** - * Invalid input - */ - 400: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type UpdatePetWithFormResponses = { - /** - * successful operation - */ - 200: Pet; -}; - -export type UpdatePetWithFormResponse = - UpdatePetWithFormResponses[keyof UpdatePetWithFormResponses]; - -export type UploadFileData = { - body?: Blob | File; - path: { - /** - * ID of pet to update - */ - petId: number; - }; - query?: { - /** - * Additional Metadata - */ - additionalMetadata?: string; - }; - url: '/pet/{petId}/uploadImage'; -}; - -export type UploadFileErrors = { - /** - * No file uploaded - */ - 400: unknown; - /** - * Pet not found - */ - 404: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type UploadFileResponses = { - /** - * successful operation - */ - 200: ApiResponse; -}; - -export type UploadFileResponse = UploadFileResponses[keyof UploadFileResponses]; - -export type GetInventoryData = { - body?: never; - path?: never; - query?: never; - url: '/store/inventory'; -}; - -export type GetInventoryErrors = { - /** - * Unexpected error - */ - default: unknown; -}; - -export type GetInventoryResponses = { - /** - * successful operation - */ - 200: { - [key: string]: number; - }; -}; - -export type GetInventoryResponse = - GetInventoryResponses[keyof GetInventoryResponses]; - -export type PlaceOrderData = { - body?: Order; - path?: never; - query?: never; - url: '/store/order'; -}; - -export type PlaceOrderErrors = { - /** - * Invalid input - */ - 400: unknown; - /** - * Validation exception - */ - 422: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type PlaceOrderResponses = { - /** - * successful operation - */ - 200: Order; -}; - -export type PlaceOrderResponse = PlaceOrderResponses[keyof PlaceOrderResponses]; - -export type DeleteOrderData = { - body?: never; - path: { - /** - * ID of the order that needs to be deleted - */ - orderId: number; - }; - query?: never; - url: '/store/order/{orderId}'; -}; - -export type DeleteOrderErrors = { - /** - * Invalid ID supplied - */ - 400: unknown; - /** - * Order not found - */ - 404: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type DeleteOrderResponses = { - /** - * order deleted - */ - 200: unknown; -}; - -export type GetOrderByIdData = { - body?: never; - path: { - /** - * ID of order that needs to be fetched - */ - orderId: number; - }; - query?: never; - url: '/store/order/{orderId}'; -}; - -export type GetOrderByIdErrors = { - /** - * Invalid ID supplied - */ - 400: unknown; - /** - * Order not found - */ - 404: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type GetOrderByIdResponses = { - /** - * successful operation - */ - 200: Order; -}; - -export type GetOrderByIdResponse = - GetOrderByIdResponses[keyof GetOrderByIdResponses]; - -export type CreateUserData = { - /** - * Created user object - */ - body?: User; - path?: never; - query?: never; - url: '/user'; -}; - -export type CreateUserErrors = { - /** - * Unexpected error - */ - default: unknown; -}; - -export type CreateUserResponses = { - /** - * successful operation - */ - 200: User; -}; - -export type CreateUserResponse = CreateUserResponses[keyof CreateUserResponses]; - -export type CreateUsersWithListInputData = { - body?: Array; - path?: never; - query?: never; - url: '/user/createWithList'; -}; - -export type CreateUsersWithListInputErrors = { - /** - * Unexpected error - */ - default: unknown; -}; - -export type CreateUsersWithListInputResponses = { - /** - * Successful operation - */ - 200: User; -}; - -export type CreateUsersWithListInputResponse = - CreateUsersWithListInputResponses[keyof CreateUsersWithListInputResponses]; - -export type LoginUserData = { - body?: never; - path?: never; - query?: { - /** - * The password for login in clear text - */ - password?: string; - /** - * The user name for login - */ - username?: string; - }; - url: '/user/login'; -}; - -export type LoginUserErrors = { - /** - * Invalid username/password supplied - */ - 400: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type LoginUserResponses = { - /** - * successful operation - */ - 200: string; -}; - -export type LoginUserResponse = LoginUserResponses[keyof LoginUserResponses]; - -export type LogoutUserData = { - body?: never; - path?: never; - query?: never; - url: '/user/logout'; -}; - -export type LogoutUserErrors = { - /** - * Unexpected error - */ - default: unknown; -}; - -export type LogoutUserResponses = { - /** - * successful operation - */ - 200: unknown; -}; - -export type DeleteUserData = { - body?: never; - path: { - /** - * The name that needs to be deleted - */ - username: string; - }; - query?: never; - url: '/user/{username}'; -}; - -export type DeleteUserErrors = { - /** - * Invalid username supplied - */ - 400: unknown; - /** - * User not found - */ - 404: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type DeleteUserResponses = { - /** - * User deleted - */ - 200: unknown; -}; - -export type GetUserByNameData = { - body?: never; - path: { - /** - * The name that needs to be fetched. Use user1 for testing - */ - username: string; - }; - query?: never; - url: '/user/{username}'; -}; - -export type GetUserByNameErrors = { - /** - * Invalid username supplied - */ - 400: unknown; - /** - * User not found - */ - 404: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type GetUserByNameResponses = { - /** - * successful operation - */ - 200: User; -}; - -export type GetUserByNameResponse = - GetUserByNameResponses[keyof GetUserByNameResponses]; - -export type UpdateUserData = { - /** - * Update an existent user in the store - */ - body?: User; - path: { - /** - * name that need to be deleted - */ - username: string; - }; - query?: never; - url: '/user/{username}'; -}; - -export type UpdateUserErrors = { - /** - * bad request - */ - 400: unknown; - /** - * user not found - */ - 404: unknown; - /** - * Unexpected error - */ - default: unknown; -}; - -export type UpdateUserResponses = { - /** - * successful operation - */ - 200: unknown; -}; diff --git a/examples/openapi-ts-sample/src/client/zod.gen.ts b/examples/openapi-ts-sample/src/client/zod.gen.ts deleted file mode 100644 index a4730a50d..000000000 --- a/examples/openapi-ts-sample/src/client/zod.gen.ts +++ /dev/null @@ -1,280 +0,0 @@ -// This file is auto-generated by @hey-api/openapi-ts - -import { z } from 'zod'; - -export const zOrder = z.object({ - complete: z.optional(z.boolean()), - id: z.optional(z.coerce.bigint()), - petId: z.optional(z.coerce.bigint()), - quantity: z.optional(z.int()), - shipDate: z.optional(z.iso.datetime()), - status: z.optional(z.enum(['placed', 'approved', 'delivered'])), -}); - -export const zCategory = z.object({ - id: z.optional(z.coerce.bigint()), - name: z.optional(z.string()), -}); - -export const zUser = z.object({ - email: z.optional(z.string()), - firstName: z.optional(z.string()), - id: z.optional(z.coerce.bigint()), - lastName: z.optional(z.string()), - password: z.optional(z.string()), - phone: z.optional(z.string()), - userStatus: z.optional(z.int()), - username: z.optional(z.string()), -}); - -export const zTag = z.object({ - id: z.optional(z.coerce.bigint()), - name: z.optional(z.string()), -}); - -export const zPet = z.object({ - category: z.optional(zCategory), - id: z.optional(z.coerce.bigint()), - name: z.string(), - photoUrls: z.array(z.string()), - status: z.optional(z.enum(['available', 'pending', 'sold'])), - tags: z.optional(z.array(zTag)), -}); - -export const zApiResponse = z.object({ - code: z.optional(z.int()), - message: z.optional(z.string()), - type: z.optional(z.string()), -}); - -export const zPet2 = zPet; - -/** - * List of user object - */ -export const zUserArray = z.array(zUser); - -export const zAddPetData = z.object({ - body: zPet, - path: z.optional(z.never()), - query: z.optional(z.never()), -}); - -/** - * Successful operation - */ -export const zAddPetResponse = zPet; - -export const zUpdatePetData = z.object({ - body: zPet, - path: z.optional(z.never()), - query: z.optional(z.never()), -}); - -/** - * Successful operation - */ -export const zUpdatePetResponse = zPet; - -export const zFindPetsByStatusData = z.object({ - body: z.optional(z.never()), - path: z.optional(z.never()), - query: z.object({ - status: z.enum(['available', 'pending', 'sold']), - }), -}); - -/** - * successful operation - */ -export const zFindPetsByStatusResponse = z.array(zPet); - -export const zFindPetsByTagsData = z.object({ - body: z.optional(z.never()), - path: z.optional(z.never()), - query: z.object({ - tags: z.array(z.string()), - }), -}); - -/** - * successful operation - */ -export const zFindPetsByTagsResponse = z.array(zPet); - -export const zDeletePetData = z.object({ - body: z.optional(z.never()), - headers: z.optional( - z.object({ - api_key: z.optional(z.string()), - }), - ), - path: z.object({ - petId: z.coerce.bigint(), - }), - query: z.optional(z.never()), -}); - -export const zGetPetByIdData = z.object({ - body: z.optional(z.never()), - path: z.object({ - petId: z.coerce.bigint(), - }), - query: z.optional(z.never()), -}); - -/** - * successful operation - */ -export const zGetPetByIdResponse = zPet; - -export const zUpdatePetWithFormData = z.object({ - body: z.optional(z.never()), - path: z.object({ - petId: z.coerce.bigint(), - }), - query: z.optional( - z.object({ - name: z.optional(z.string()), - status: z.optional(z.string()), - }), - ), -}); - -/** - * successful operation - */ -export const zUpdatePetWithFormResponse = zPet; - -export const zUploadFileData = z.object({ - body: z.optional(z.string()), - path: z.object({ - petId: z.coerce.bigint(), - }), - query: z.optional( - z.object({ - additionalMetadata: z.optional(z.string()), - }), - ), -}); - -/** - * successful operation - */ -export const zUploadFileResponse = zApiResponse; - -export const zGetInventoryData = z.object({ - body: z.optional(z.never()), - path: z.optional(z.never()), - query: z.optional(z.never()), -}); - -/** - * successful operation - */ -export const zGetInventoryResponse = z.record(z.string(), z.int()); - -export const zPlaceOrderData = z.object({ - body: z.optional(zOrder), - path: z.optional(z.never()), - query: z.optional(z.never()), -}); - -/** - * successful operation - */ -export const zPlaceOrderResponse = zOrder; - -export const zDeleteOrderData = z.object({ - body: z.optional(z.never()), - path: z.object({ - orderId: z.coerce.bigint(), - }), - query: z.optional(z.never()), -}); - -export const zGetOrderByIdData = z.object({ - body: z.optional(z.never()), - path: z.object({ - orderId: z.coerce.bigint(), - }), - query: z.optional(z.never()), -}); - -/** - * successful operation - */ -export const zGetOrderByIdResponse = zOrder; - -export const zCreateUserData = z.object({ - body: z.optional(zUser), - path: z.optional(z.never()), - query: z.optional(z.never()), -}); - -/** - * successful operation - */ -export const zCreateUserResponse = zUser; - -export const zCreateUsersWithListInputData = z.object({ - body: z.optional(z.array(zUser)), - path: z.optional(z.never()), - query: z.optional(z.never()), -}); - -/** - * Successful operation - */ -export const zCreateUsersWithListInputResponse = zUser; - -export const zLoginUserData = z.object({ - body: z.optional(z.never()), - path: z.optional(z.never()), - query: z.optional( - z.object({ - password: z.optional(z.string()), - username: z.optional(z.string()), - }), - ), -}); - -/** - * successful operation - */ -export const zLoginUserResponse = z.string(); - -export const zLogoutUserData = z.object({ - body: z.optional(z.never()), - path: z.optional(z.never()), - query: z.optional(z.never()), -}); - -export const zDeleteUserData = z.object({ - body: z.optional(z.never()), - path: z.object({ - username: z.string(), - }), - query: z.optional(z.never()), -}); - -export const zGetUserByNameData = z.object({ - body: z.optional(z.never()), - path: z.object({ - username: z.string(), - }), - query: z.optional(z.never()), -}); - -/** - * successful operation - */ -export const zGetUserByNameResponse = zUser; - -export const zUpdateUserData = z.object({ - body: z.optional(zUser), - path: z.object({ - username: z.string(), - }), - query: z.optional(z.never()), -}); diff --git a/examples/openapi-ts-sample/src/hey-api.ts b/examples/openapi-ts-sample/src/hey-api.ts deleted file mode 100644 index 19707d1ed..000000000 --- a/examples/openapi-ts-sample/src/hey-api.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { CreateClientConfig } from './client/client'; - -export const createClientConfig: CreateClientConfig = (config) => ({ - ...config, - // set default base url for requests - baseUrl: 'https://petstore3.swagger.io/api/v3', - // set default headers for requests - headers: { - Authorization: 'Bearer ', - }, -}); diff --git a/examples/openapi-ts-sample/src/main.tsx b/examples/openapi-ts-sample/src/main.tsx deleted file mode 100644 index 2f7678524..000000000 --- a/examples/openapi-ts-sample/src/main.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import '@radix-ui/themes/styles.css'; - -import { Theme } from '@radix-ui/themes'; -import React from 'react'; -import ReactDOM from 'react-dom/client'; - -import App from './App.tsx'; - -ReactDOM.createRoot(document.getElementById('root')!).render( - - - - - , -); diff --git a/examples/openapi-ts-sample/src/vite-env.d.ts b/examples/openapi-ts-sample/src/vite-env.d.ts deleted file mode 100644 index 11f02fe2a..000000000 --- a/examples/openapi-ts-sample/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/examples/openapi-ts-sample/tailwind.config.js b/examples/openapi-ts-sample/tailwind.config.js deleted file mode 100644 index 0284c5614..000000000 --- a/examples/openapi-ts-sample/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -export default { - content: ['./index.html', './src/**/*.{html,js,ts,jsx,tsx}'], - plugins: [], - theme: { - extend: {}, - }, -}; diff --git a/examples/openapi-ts-sample/tsconfig.json b/examples/openapi-ts-sample/tsconfig.json deleted file mode 100644 index a7fc6fbf2..000000000 --- a/examples/openapi-ts-sample/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] -} diff --git a/examples/openapi-ts-sample/tsconfig.node.json b/examples/openapi-ts-sample/tsconfig.node.json deleted file mode 100644 index 97ede7ee6..000000000 --- a/examples/openapi-ts-sample/tsconfig.node.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "skipLibCheck": true, - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true, - "strict": true - }, - "include": ["vite.config.ts"] -} diff --git a/examples/openapi-ts-sample/vite.config.ts b/examples/openapi-ts-sample/vite.config.ts deleted file mode 100644 index 8cbf22f1b..000000000 --- a/examples/openapi-ts-sample/vite.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { createViteConfig } from '@config/vite-base'; -import react from '@vitejs/plugin-react'; - -// https://vitejs.dev/config/ -export default createViteConfig({ - plugins: [react()], -}); diff --git a/package.json b/package.json index 8a677bce7..5fd1c7670 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "funding": "https://github.com/sponsors/hey-api", "type": "module", "scripts": { - "build": "turbo run build --filter=\"!@example/openapi-ts-sample\"", + "build": "turbo run build", "changeset": "changeset", "examples:check": "sh ./scripts/examples-check.sh", "examples:generate": "sh ./scripts/examples-generate.sh", @@ -33,8 +33,8 @@ "test:coverage": "turbo run test:coverage", "test:update": "turbo run test:update", "test:watch": "turbo run test:watch", - "test": "turbo run test --filter=\"!@example/openapi-ts-sample\"", - "typecheck": "turbo run typecheck --filter=\"!@example/openapi-ts-sample\"" + "test": "turbo run test", + "typecheck": "turbo run typecheck" }, "engines": { "node": ">=20.19.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d4acadb0a..a14ae2d04 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -110,6 +110,129 @@ importers: specifier: 3.1.1 version: 3.1.1(@types/debug@4.1.12)(@types/node@22.10.5)(jiti@2.6.1)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1) + dev: + devDependencies: + '@angular-devkit/build-angular': + specifier: 19.2.19 + version: 19.2.19(@angular/compiler-cli@19.2.15(@angular/compiler@19.2.15)(typescript@5.9.3))(@angular/compiler@19.2.15)(@angular/platform-server@19.2.0(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.15)(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.15(@angular/animations@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.9.3)))(typescript@5.9.3)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1) + '@angular/animations': + specifier: 19.2.15 + version: 19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)) + '@angular/cli': + specifier: 19.2.19 + version: 19.2.19(@types/node@22.10.5)(chokidar@4.0.3) + '@angular/common': + specifier: 19.2.15 + version: 19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) + '@angular/compiler': + specifier: 19.2.15 + version: 19.2.15 + '@angular/compiler-cli': + specifier: 19.2.15 + version: 19.2.15(@angular/compiler@19.2.15)(typescript@5.9.3) + '@angular/core': + specifier: 19.2.15 + version: 19.2.15(rxjs@7.8.2)(zone.js@0.15.1) + '@angular/forms': + specifier: 19.2.15 + version: 19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.15(@angular/animations@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) + '@angular/platform-browser': + specifier: 19.2.15 + version: 19.2.15(@angular/animations@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)) + '@angular/platform-browser-dynamic': + specifier: 19.2.15 + version: 19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.15)(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.15(@angular/animations@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))) + '@angular/router': + specifier: 19.2.15 + version: 19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.15(@angular/animations@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) + '@config/vite-base': + specifier: workspace:* + version: link:../packages/config-vite-base + '@hey-api/codegen-core': + specifier: workspace:* + version: link:../packages/codegen-core + '@hey-api/custom-client': + specifier: workspace:* + version: link:../packages/custom-client + '@hey-api/openapi-ts': + specifier: workspace:* + version: link:../packages/openapi-ts + '@pinia/colada': + specifier: 0.17.7 + version: 0.17.7(pinia@3.0.3(typescript@5.9.3)(vue@3.5.13(typescript@5.9.3)))(vue@3.5.13(typescript@5.9.3)) + '@tanstack/angular-query-experimental': + specifier: 5.73.3 + version: 5.73.3(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)) + '@tanstack/react-query': + specifier: 5.73.3 + version: 5.73.3(react@19.0.0) + '@tanstack/solid-query': + specifier: 5.73.3 + version: 5.73.3(solid-js@1.9.9) + '@tanstack/svelte-query': + specifier: 5.73.3 + version: 5.73.3(svelte@5.19.9) + '@tanstack/vue-query': + specifier: 5.73.3 + version: 5.73.3(vue@3.5.13(typescript@5.9.3)) + '@types/cross-spawn': + specifier: 6.0.6 + version: 6.0.6 + ajv: + specifier: 8.17.1 + version: 8.17.1 + arktype: + specifier: 2.1.25 + version: 2.1.25 + axios: + specifier: 1.8.2 + version: 1.8.2 + cross-spawn: + specifier: 7.0.6 + version: 7.0.6 + eslint: + specifier: 9.17.0 + version: 9.17.0(jiti@2.6.1) + fastify: + specifier: 5.2.0 + version: 5.2.0 + glob: + specifier: 11.0.3 + version: 11.0.3 + node-fetch: + specifier: 3.3.2 + version: 3.3.2 + nuxt: + specifier: 3.14.1592 + version: 3.14.1592(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.2)(encoding@0.1.13)(eslint@9.17.0(jiti@2.6.1))(ioredis@5.7.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.44)(rollup@4.50.0)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.3)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)) + ofetch: + specifier: 1.4.1 + version: 1.4.1 + prettier: + specifier: 3.4.2 + version: 3.4.2 + rxjs: + specifier: 7.8.2 + version: 7.8.2 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@types/node@22.10.5)(typescript@5.9.3) + tslib: + specifier: 2.8.1 + version: 2.8.1 + typescript: + specifier: 5.9.3 + version: 5.9.3 + valibot: + specifier: 1.1.0 + version: 1.1.0(typescript@5.9.3) + vue: + specifier: 3.5.13 + version: 3.5.13(typescript@5.9.3) + zod: + specifier: 4.1.12 + version: 4.1.12 + docs: dependencies: '@stackblitz/sdk': @@ -1342,7 +1465,7 @@ importers: version: 11.0.3 nuxt: specifier: 3.14.1592 - version: 3.14.1592(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.2)(encoding@0.1.13)(eslint@9.17.0(jiti@2.6.1))(ioredis@5.7.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.44)(rollup@4.50.0)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.3)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)) + version: 3.14.1592(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.2)(encoding@0.1.13)(eslint@9.17.0(jiti@2.6.1))(ioredis@5.7.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.44)(rollup@4.50.0)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.3) ofetch: specifier: 1.4.1 version: 1.4.1 @@ -7984,10 +8107,6 @@ packages: resolution: {integrity: sha512-YKGmAy84hKH+hHIIER07VCAHf9u0Ldelx1uU6EBxsRPDXIA1m5fsKmJfyC3xBhw6cVC/1i83VdbL4PvepTrt8A==} hasBin: true - cross-spawn@7.0.5: - resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} - engines: {node: '>= 8'} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -14283,7 +14402,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1902.0(chokidar@4.0.3) - '@angular-devkit/build-webpack': 0.1902.0(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.0)))(webpack@5.98.0(esbuild@0.25.0)) + '@angular-devkit/build-webpack': 0.1902.0(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0))(webpack@5.98.0) '@angular-devkit/core': 19.2.0(chokidar@4.0.3) '@angular/build': 19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/platform-server@19.2.0(@angular/common@19.2.0(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.0(@angular/animations@19.2.0(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.0(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1))))(@angular/ssr@19.2.15(5c03da8199d2fcdf9ff93b70f9349edd))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.1) '@angular/compiler-cli': 19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1)))(typescript@5.8.3) @@ -14301,7 +14420,7 @@ snapshots: '@vitejs/plugin-basic-ssl': 1.2.0(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.1)) ansi-colors: 4.1.3 autoprefixer: 10.4.20(postcss@8.5.2) - babel-loader: 9.2.1(@babel/core@7.26.9)(webpack@5.98.0(esbuild@0.25.0)) + babel-loader: 9.2.1(@babel/core@7.26.9)(webpack@5.98.0) browserslist: 4.25.4 copy-webpack-plugin: 12.0.2(webpack@5.98.0) css-loader: 7.1.2(webpack@5.98.0) @@ -14321,7 +14440,7 @@ snapshots: picomatch: 4.0.2 piscina: 4.8.0 postcss: 8.5.2 - postcss-loader: 8.1.1(postcss@8.5.2)(typescript@5.8.3)(webpack@5.98.0(esbuild@0.25.0)) + postcss-loader: 8.1.1(postcss@8.5.2)(typescript@5.8.3)(webpack@5.98.0) resolve-url-loader: 5.0.0 rxjs: 7.8.1 sass: 1.85.0 @@ -14334,8 +14453,8 @@ snapshots: tslib: 2.8.1 typescript: 5.8.3 webpack: 5.98.0(esbuild@0.25.0) - webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.0)) - webpack-dev-server: 5.2.0(webpack@5.98.0(esbuild@0.25.0)) + webpack-dev-middleware: 7.4.2(webpack@5.98.0) + webpack-dev-server: 5.2.0(webpack@5.98.0) webpack-merge: 6.0.1 webpack-subresource-integrity: 5.1.0(webpack@5.98.0) optionalDependencies: @@ -14389,10 +14508,10 @@ snapshots: '@vitejs/plugin-basic-ssl': 1.2.0(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)) ansi-colors: 4.1.3 autoprefixer: 10.4.20(postcss@8.5.2) - babel-loader: 9.2.1(@babel/core@7.26.9)(webpack@5.98.0(esbuild@0.25.0)) + babel-loader: 9.2.1(@babel/core@7.26.9)(webpack@5.98.0) browserslist: 4.25.4 - copy-webpack-plugin: 12.0.2(webpack@5.98.0) - css-loader: 7.1.2(webpack@5.98.0) + copy-webpack-plugin: 12.0.2(webpack@5.98.0(esbuild@0.25.0)) + css-loader: 7.1.2(webpack@5.98.0(esbuild@0.25.0)) esbuild-wasm: 0.25.0 fast-glob: 3.3.3 http-proxy-middleware: 3.0.3 @@ -14400,22 +14519,22 @@ snapshots: jsonc-parser: 3.3.1 karma-source-map-support: 1.4.0 less: 4.2.2 - less-loader: 12.2.0(less@4.2.2)(webpack@5.98.0) - license-webpack-plugin: 4.0.2(webpack@5.98.0) + less-loader: 12.2.0(less@4.2.2)(webpack@5.98.0(esbuild@0.25.0)) + license-webpack-plugin: 4.0.2(webpack@5.98.0(esbuild@0.25.0)) loader-utils: 3.3.1 - mini-css-extract-plugin: 2.9.2(webpack@5.98.0) + mini-css-extract-plugin: 2.9.2(webpack@5.98.0(esbuild@0.25.0)) open: 10.1.0 ora: 5.4.1 picomatch: 4.0.2 piscina: 4.8.0 postcss: 8.5.2 - postcss-loader: 8.1.1(postcss@8.5.2)(typescript@5.8.3)(webpack@5.98.0(esbuild@0.25.0)) + postcss-loader: 8.1.1(postcss@8.5.2)(typescript@5.8.3)(webpack@5.98.0) resolve-url-loader: 5.0.0 rxjs: 7.8.1 sass: 1.85.0 - sass-loader: 16.0.5(sass@1.85.0)(webpack@5.98.0) + sass-loader: 16.0.5(sass@1.85.0)(webpack@5.98.0(esbuild@0.25.0)) semver: 7.7.1 - source-map-loader: 5.0.0(webpack@5.98.0) + source-map-loader: 5.0.0(webpack@5.98.0(esbuild@0.25.0)) source-map-support: 0.5.21 terser: 5.39.0 tree-kill: 1.2.2 @@ -14425,7 +14544,7 @@ snapshots: webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.0)) webpack-dev-server: 5.2.0(webpack@5.98.0(esbuild@0.25.0)) webpack-merge: 6.0.1 - webpack-subresource-integrity: 5.1.0(webpack@5.98.0) + webpack-subresource-integrity: 5.1.0(webpack@5.98.0(esbuild@0.25.0)) optionalDependencies: '@angular/platform-server': 19.2.0(@angular/common@19.2.0(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.0(@angular/animations@19.2.0(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.0(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.0(rxjs@7.8.2)(zone.js@0.15.1))) '@angular/ssr': 19.2.15(5c03da8199d2fcdf9ff93b70f9349edd) @@ -14497,7 +14616,7 @@ snapshots: picomatch: 4.0.2 piscina: 4.8.0 postcss: 8.5.2 - postcss-loader: 8.1.1(postcss@8.5.2)(typescript@5.8.3)(webpack@5.98.0(esbuild@0.25.0)) + postcss-loader: 8.1.1(postcss@8.5.2)(typescript@5.8.3)(webpack@5.98.0) resolve-url-loader: 5.0.0 rxjs: 7.8.1 sass: 1.85.0 @@ -14510,7 +14629,7 @@ snapshots: tslib: 2.8.1 typescript: 5.8.3 webpack: 5.98.0(esbuild@0.25.4) - webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.0)) + webpack-dev-middleware: 7.4.2(webpack@5.98.0) webpack-dev-server: 5.2.2(webpack@5.98.0) webpack-merge: 6.0.1 webpack-subresource-integrity: 5.1.0(webpack@5.98.0) @@ -14598,7 +14717,94 @@ snapshots: tslib: 2.8.1 typescript: 5.9.3 webpack: 5.98.0(esbuild@0.25.4) - webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.0)) + webpack-dev-middleware: 7.4.2(webpack@5.98.0) + webpack-dev-server: 5.2.2(webpack@5.98.0) + webpack-merge: 6.0.1 + webpack-subresource-integrity: 5.1.0(webpack@5.98.0) + optionalDependencies: + '@angular/platform-server': 19.2.0(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.15)(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.15(@angular/animations@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))) + esbuild: 0.25.4 + karma: 6.4.4 + tailwindcss: 3.4.14(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.9.3)) + transitivePeerDependencies: + - '@angular/compiler' + - '@rspack/core' + - '@swc/core' + - '@types/node' + - bufferutil + - chokidar + - debug + - html-webpack-plugin + - jiti + - lightningcss + - node-sass + - sass-embedded + - stylus + - sugarss + - supports-color + - tsx + - uglify-js + - utf-8-validate + - vite + - webpack-cli + - yaml + + '@angular-devkit/build-angular@19.2.19(@angular/compiler-cli@19.2.15(@angular/compiler@19.2.15)(typescript@5.9.3))(@angular/compiler@19.2.15)(@angular/platform-server@19.2.0(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.15)(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.15(@angular/animations@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.9.3)))(typescript@5.9.3)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@angular-devkit/architect': 0.1902.19(chokidar@4.0.3) + '@angular-devkit/build-webpack': 0.1902.19(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.98.0))(webpack@5.98.0) + '@angular-devkit/core': 19.2.19(chokidar@4.0.3) + '@angular/build': 19.2.19(@angular/compiler-cli@19.2.15(@angular/compiler@19.2.15)(typescript@5.9.3))(@angular/compiler@19.2.15)(@angular/platform-server@19.2.0(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.15)(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.15(@angular/animations@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(tailwindcss@3.4.14(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.9.3)))(terser@5.39.0)(typescript@5.9.3)(yaml@2.8.1) + '@angular/compiler-cli': 19.2.15(@angular/compiler@19.2.15)(typescript@5.9.3) + '@babel/core': 7.26.10 + '@babel/generator': 7.26.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-runtime': 7.26.10(@babel/core@7.26.10) + '@babel/preset-env': 7.26.9(@babel/core@7.26.10) + '@babel/runtime': 7.26.10 + '@discoveryjs/json-ext': 0.6.3 + '@ngtools/webpack': 19.2.19(@angular/compiler-cli@19.2.15(@angular/compiler@19.2.15)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.98.0) + '@vitejs/plugin-basic-ssl': 1.2.0(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)) + ansi-colors: 4.1.3 + autoprefixer: 10.4.20(postcss@8.5.2) + babel-loader: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0) + browserslist: 4.25.4 + copy-webpack-plugin: 12.0.2(webpack@5.98.0) + css-loader: 7.1.2(webpack@5.98.0) + esbuild-wasm: 0.25.4 + fast-glob: 3.3.3 + http-proxy-middleware: 3.0.5 + istanbul-lib-instrument: 6.0.3 + jsonc-parser: 3.3.1 + karma-source-map-support: 1.4.0 + less: 4.2.2 + less-loader: 12.2.0(less@4.2.2)(webpack@5.98.0) + license-webpack-plugin: 4.0.2(webpack@5.98.0) + loader-utils: 3.3.1 + mini-css-extract-plugin: 2.9.2(webpack@5.98.0) + open: 10.1.0 + ora: 5.4.1 + picomatch: 4.0.2 + piscina: 4.8.0 + postcss: 8.5.2 + postcss-loader: 8.1.1(postcss@8.5.2)(typescript@5.9.3)(webpack@5.98.0) + resolve-url-loader: 5.0.0 + rxjs: 7.8.1 + sass: 1.85.0 + sass-loader: 16.0.5(sass@1.85.0)(webpack@5.98.0) + semver: 7.7.1 + source-map-loader: 5.0.0(webpack@5.98.0) + source-map-support: 0.5.21 + terser: 5.39.0 + tree-kill: 1.2.2 + tslib: 2.8.1 + typescript: 5.9.3 + webpack: 5.98.0(esbuild@0.25.4) + webpack-dev-middleware: 7.4.2(webpack@5.98.0) webpack-dev-server: 5.2.2(webpack@5.98.0) webpack-merge: 6.0.1 webpack-subresource-integrity: 5.1.0(webpack@5.98.0) @@ -14639,11 +14845,20 @@ snapshots: transitivePeerDependencies: - chokidar + '@angular-devkit/build-webpack@0.1902.0(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0))(webpack@5.98.0)': + dependencies: + '@angular-devkit/architect': 0.1902.0(chokidar@4.0.3) + rxjs: 7.8.1 + webpack: 5.98.0(esbuild@0.25.0) + webpack-dev-server: 5.2.0(webpack@5.98.0) + transitivePeerDependencies: + - chokidar + '@angular-devkit/build-webpack@0.1902.15(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.98.0))(webpack@5.98.0)': dependencies: '@angular-devkit/architect': 0.1902.15(chokidar@4.0.3) rxjs: 7.8.1 - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.4) webpack-dev-server: 5.2.2(webpack@5.98.0) transitivePeerDependencies: - chokidar @@ -14652,7 +14867,7 @@ snapshots: dependencies: '@angular-devkit/architect': 0.1902.19(chokidar@4.0.3) rxjs: 7.8.1 - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.4) webpack-dev-server: 5.2.2(webpack@5.98.0) transitivePeerDependencies: - chokidar @@ -18054,13 +18269,13 @@ snapshots: dependencies: '@angular/compiler-cli': 19.2.14(@angular/compiler@19.2.14)(typescript@5.8.3) typescript: 5.8.3 - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.4) '@ngtools/webpack@19.2.19(@angular/compiler-cli@19.2.15(@angular/compiler@19.2.15)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.98.0)': dependencies: '@angular/compiler-cli': 19.2.15(@angular/compiler@19.2.15)(typescript@5.9.3) typescript: 5.9.3 - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.4) '@nodelib/fs.scandir@2.1.5': dependencies: @@ -18157,12 +18372,12 @@ snapshots: - magicast - supports-color - '@nuxt/devtools-kit@1.7.0(magicast@0.3.5)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))': + '@nuxt/devtools-kit@1.7.0(magicast@0.3.5)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1))': dependencies: '@nuxt/kit': 3.15.4(magicast@0.3.5) '@nuxt/schema': 3.16.2 execa: 7.2.0 - vite: 7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0) + vite: 7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1) transitivePeerDependencies: - magicast - supports-color @@ -18212,8 +18427,8 @@ snapshots: scule: 1.3.0 semver: 7.7.2 simple-git: 3.28.0 - sirv: 3.0.1 - tinyglobby: 0.2.14 + sirv: 3.0.2 + tinyglobby: 0.2.15 unimport: 3.14.6(rollup@3.29.5) vite: 7.1.2(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1) vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@3.29.5)(vite@7.1.2(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)) @@ -18259,8 +18474,8 @@ snapshots: scule: 1.3.0 semver: 7.7.2 simple-git: 3.28.0 - sirv: 3.0.1 - tinyglobby: 0.2.14 + sirv: 3.0.2 + tinyglobby: 0.2.15 unimport: 3.14.6(rollup@4.50.0) vite: 7.1.2(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1) vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.50.0)(vite@7.1.2(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)) @@ -18306,8 +18521,8 @@ snapshots: scule: 1.3.0 semver: 7.7.2 simple-git: 3.28.0 - sirv: 3.0.1 - tinyglobby: 0.2.14 + sirv: 3.0.2 + tinyglobby: 0.2.15 unimport: 3.14.6(rollup@4.50.0) vite: 7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.1) vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.50.0)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.1)) @@ -18321,13 +18536,13 @@ snapshots: - utf-8-validate - vue - '@nuxt/devtools@1.7.0(rollup@4.50.0)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.13(typescript@5.9.3))': + '@nuxt/devtools@1.7.0(rollup@4.50.0)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1))(vue@3.5.13(typescript@5.9.3))': dependencies: '@antfu/utils': 0.7.10 - '@nuxt/devtools-kit': 1.7.0(magicast@0.3.5)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)) + '@nuxt/devtools-kit': 1.7.0(magicast@0.3.5)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)) '@nuxt/devtools-wizard': 1.7.0 '@nuxt/kit': 3.15.4(magicast@0.3.5) - '@vue/devtools-core': 7.6.8(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.13(typescript@5.9.3)) + '@vue/devtools-core': 7.6.8(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1))(vue@3.5.13(typescript@5.9.3)) '@vue/devtools-kit': 7.6.8 birpc: 0.2.19 consola: 3.4.2 @@ -18353,12 +18568,12 @@ snapshots: scule: 1.3.0 semver: 7.7.2 simple-git: 3.28.0 - sirv: 3.0.1 - tinyglobby: 0.2.14 + sirv: 3.0.2 + tinyglobby: 0.2.15 unimport: 3.14.6(rollup@4.50.0) - vite: 7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0) - vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.50.0)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)) - vite-plugin-vue-inspector: 5.3.2(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)) + vite: 7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1) + vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.50.0)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)) + vite-plugin-vue-inspector: 5.3.2(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)) which: 3.0.1 ws: 8.18.3 transitivePeerDependencies: @@ -18368,17 +18583,63 @@ snapshots: - utf-8-validate - vue - '@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@3.29.5)': + '@nuxt/devtools@1.7.0(rollup@4.50.0)(vue@3.5.13(typescript@5.9.3))': dependencies: - '@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@3.29.5) - c12: 2.0.1(magicast@0.3.5) - consola: 3.4.2 - defu: 6.1.4 - destr: 2.0.5 - globby: 14.1.0 + '@antfu/utils': 0.7.10 + '@nuxt/devtools-kit': 1.7.0(magicast@0.3.5)(vite@7.1.2(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)) + '@nuxt/devtools-wizard': 1.7.0 + '@nuxt/kit': 3.15.4(magicast@0.3.5) + '@vue/devtools-core': 7.6.8(vite@7.1.2(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1))(vue@3.5.13(typescript@5.9.3)) + '@vue/devtools-kit': 7.6.8 + birpc: 0.2.19 + consola: 3.4.2 + cronstrue: 2.59.0 + destr: 2.0.5 + error-stack-parser-es: 0.1.5 + execa: 7.2.0 + fast-npm-meta: 0.2.2 + flatted: 3.3.3 + get-port-please: 3.2.0 + hookable: 5.5.3 + image-meta: 0.2.1 + is-installed-globally: 1.0.0 + launch-editor: 2.11.1 + local-pkg: 0.5.1 + magicast: 0.3.5 + nypm: 0.4.1 + ohash: 1.1.6 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.3.1 + rc9: 2.1.2 + scule: 1.3.0 + semver: 7.7.2 + simple-git: 3.28.0 + sirv: 3.0.2 + tinyglobby: 0.2.15 + unimport: 3.14.6(rollup@4.50.0) + vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.50.0)(vite@7.1.2(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)) + vite-plugin-vue-inspector: 5.3.2(vite@7.1.2(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)) + which: 3.0.1 + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - rollup + - supports-color + - utf-8-validate + - vue + + '@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@3.29.5)': + dependencies: + '@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@3.29.5) + c12: 2.0.1(magicast@0.3.5) + consola: 3.4.2 + defu: 6.1.4 + destr: 2.0.5 + globby: 14.1.0 hash-sum: 2.0.0 ignore: 6.0.2 - jiti: 2.5.1 + jiti: 2.6.1 klona: 2.0.6 knitwork: 1.2.0 mlly: 1.8.0 @@ -18405,7 +18666,7 @@ snapshots: globby: 14.1.0 hash-sum: 2.0.0 ignore: 6.0.2 - jiti: 2.5.1 + jiti: 2.6.1 klona: 2.0.6 knitwork: 1.2.0 mlly: 1.8.0 @@ -18623,9 +18884,9 @@ snapshots: externality: 1.0.2 get-port-please: 3.2.0 h3: 1.15.4 - jiti: 2.5.1 + jiti: 2.6.1 knitwork: 1.2.0 - magic-string: 0.30.18 + magic-string: 0.30.19 mlly: 1.8.0 ohash: 1.1.6 pathe: 1.1.2 @@ -18683,9 +18944,9 @@ snapshots: externality: 1.0.2 get-port-please: 3.2.0 h3: 1.15.4 - jiti: 2.5.1 + jiti: 2.6.1 knitwork: 1.2.0 - magic-string: 0.30.18 + magic-string: 0.30.19 mlly: 1.8.0 ohash: 1.1.6 pathe: 1.1.2 @@ -18743,9 +19004,9 @@ snapshots: externality: 1.0.2 get-port-please: 3.2.0 h3: 1.15.4 - jiti: 2.5.1 + jiti: 2.6.1 knitwork: 1.2.0 - magic-string: 0.30.18 + magic-string: 0.30.19 mlly: 1.8.0 ohash: 1.1.6 pathe: 1.1.2 @@ -21130,14 +21391,14 @@ snapshots: transitivePeerDependencies: - vite - '@vue/devtools-core@7.6.8(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.13(typescript@5.9.3))': + '@vue/devtools-core@7.6.8(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1))(vue@3.5.13(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 7.7.7 '@vue/devtools-shared': 7.7.7 mitt: 3.0.1 nanoid: 5.1.5 pathe: 1.1.2 - vite-hot-client: 0.2.4(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)) + vite-hot-client: 0.2.4(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)) vue: 3.5.13(typescript@5.9.3) transitivePeerDependencies: - vite @@ -21702,7 +21963,7 @@ snapshots: ast-walker-scope@0.6.2: dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 ast-kit: 1.4.3 async-function@1.0.0: {} @@ -21783,9 +22044,9 @@ snapshots: '@babel/core': 7.26.10 find-cache-dir: 4.0.0 schema-utils: 4.3.2 - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.4) - babel-loader@9.2.1(@babel/core@7.26.9)(webpack@5.98.0(esbuild@0.25.0)): + babel-loader@9.2.1(@babel/core@7.26.9)(webpack@5.98.0): dependencies: '@babel/core': 7.26.9 find-cache-dir: 4.0.0 @@ -22369,7 +22630,7 @@ snapshots: graceful-fs: 4.2.11 p-event: 6.0.1 - copy-webpack-plugin@12.0.2(webpack@5.98.0): + copy-webpack-plugin@12.0.2(webpack@5.98.0(esbuild@0.25.0)): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 @@ -22379,6 +22640,16 @@ snapshots: serialize-javascript: 6.0.2 webpack: 5.98.0(esbuild@0.25.0) + copy-webpack-plugin@12.0.2(webpack@5.98.0): + dependencies: + fast-glob: 3.3.3 + glob-parent: 6.0.2 + globby: 14.1.0 + normalize-path: 3.0.0 + schema-utils: 4.3.2 + serialize-javascript: 6.0.2 + webpack: 5.98.0(esbuild@0.25.4) + core-js-compat@3.45.1: dependencies: browserslist: 4.25.4 @@ -22425,12 +22696,6 @@ snapshots: cronstrue@2.59.0: {} - cross-spawn@7.0.5: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -22445,7 +22710,7 @@ snapshots: dependencies: postcss: 8.5.6 - css-loader@7.1.2(webpack@5.98.0): + css-loader@7.1.2(webpack@5.98.0(esbuild@0.25.0)): dependencies: icss-utils: 5.1.0(postcss@8.4.41) postcss: 8.4.41 @@ -22458,6 +22723,19 @@ snapshots: optionalDependencies: webpack: 5.98.0(esbuild@0.25.0) + css-loader@7.1.2(webpack@5.98.0): + dependencies: + icss-utils: 5.1.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.41) + postcss-modules-local-by-default: 4.2.0(postcss@8.4.41) + postcss-modules-scope: 3.2.1(postcss@8.4.41) + postcss-modules-values: 4.0.0(postcss@8.4.41) + postcss-value-parser: 4.2.0 + semver: 7.7.2 + optionalDependencies: + webpack: 5.98.0(esbuild@0.25.4) + css-select@5.2.2: dependencies: boolbase: 1.0.0 @@ -23221,7 +23499,7 @@ snapshots: eslint: 9.17.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.17.0(jiti@2.6.1)))(eslint@9.17.0(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.17.0(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.17.0(jiti@2.6.1)))(eslint@9.17.0(jiti@2.6.1)))(eslint@9.17.0(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.17.0(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.17.0(jiti@2.6.1)) eslint-plugin-react-hooks: 5.2.0(eslint@9.17.0(jiti@2.6.1)) @@ -23259,7 +23537,7 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.17.0(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.17.0(jiti@2.6.1)))(eslint@9.17.0(jiti@2.6.1)))(eslint@9.17.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -23274,7 +23552,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.17.0(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.17.0(jiti@2.6.1)))(eslint@9.17.0(jiti@2.6.1)))(eslint@9.17.0(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -24708,7 +24986,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.26.9 + '@babel/core': 7.28.3 '@babel/parser': 7.28.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 @@ -24995,12 +25273,18 @@ snapshots: dependencies: readable-stream: 2.3.8 - less-loader@12.2.0(less@4.2.2)(webpack@5.98.0): + less-loader@12.2.0(less@4.2.2)(webpack@5.98.0(esbuild@0.25.0)): dependencies: less: 4.2.2 optionalDependencies: webpack: 5.98.0(esbuild@0.25.0) + less-loader@12.2.0(less@4.2.2)(webpack@5.98.0): + dependencies: + less: 4.2.2 + optionalDependencies: + webpack: 5.98.0(esbuild@0.25.4) + less@4.2.2: dependencies: copy-anything: 2.0.6 @@ -25020,12 +25304,18 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - license-webpack-plugin@4.0.2(webpack@5.98.0): + license-webpack-plugin@4.0.2(webpack@5.98.0(esbuild@0.25.0)): dependencies: webpack-sources: 3.3.3 optionalDependencies: webpack: 5.98.0(esbuild@0.25.0) + license-webpack-plugin@4.0.2(webpack@5.98.0): + dependencies: + webpack-sources: 3.3.3 + optionalDependencies: + webpack: 5.98.0(esbuild@0.25.4) + light-my-request@6.6.0: dependencies: cookie: 1.0.2 @@ -25064,7 +25354,7 @@ snapshots: get-port-please: 3.2.0 h3: 1.15.4 http-shutdown: 1.2.2 - jiti: 2.5.1 + jiti: 2.6.1 mlly: 1.8.0 node-forge: 1.3.1 pathe: 1.1.2 @@ -25567,12 +25857,18 @@ snapshots: mimic-function@5.0.1: {} - mini-css-extract-plugin@2.9.2(webpack@5.98.0): + mini-css-extract-plugin@2.9.2(webpack@5.98.0(esbuild@0.25.0)): dependencies: schema-utils: 4.3.2 tapable: 2.2.3 webpack: 5.98.0(esbuild@0.25.0) + mini-css-extract-plugin@2.9.2(webpack@5.98.0): + dependencies: + schema-utils: 4.3.2 + tapable: 2.2.3 + webpack: 5.98.0(esbuild@0.25.4) + minimalistic-assert@1.0.1: {} minimatch@10.0.3: @@ -25824,11 +26120,11 @@ snapshots: hookable: 5.5.3 httpxy: 0.1.7 ioredis: 5.7.0 - jiti: 2.5.1 + jiti: 2.6.1 klona: 2.0.6 knitwork: 1.2.0 listhen: 1.9.0 - magic-string: 0.30.18 + magic-string: 0.30.19 magicast: 0.3.5 mime: 4.0.7 mlly: 1.8.0 @@ -26017,7 +26313,7 @@ snapshots: npm-run-all2@6.2.0: dependencies: ansi-styles: 6.2.1 - cross-spawn: 7.0.5 + cross-spawn: 7.0.6 memorystream: 0.3.1 minimatch: 9.0.5 pidtree: 0.6.0 @@ -26055,7 +26351,7 @@ snapshots: '@unhead/shared': 1.11.20 '@unhead/ssr': 1.11.20 '@unhead/vue': 1.11.20(vue@3.5.13(typescript@5.9.3)) - '@vue/shared': 3.5.20 + '@vue/shared': 3.5.21 acorn: 8.14.0 c12: 2.0.1(magicast@0.3.5) chokidar: 4.0.3 @@ -26074,10 +26370,10 @@ snapshots: hookable: 5.5.3 ignore: 6.0.2 impound: 0.2.2(rollup@3.29.5) - jiti: 2.5.1 + jiti: 2.6.1 klona: 2.0.6 knitwork: 1.2.0 - magic-string: 0.30.18 + magic-string: 0.30.19 mlly: 1.8.0 nanotar: 0.1.1 nitropack: 2.12.4(@netlify/blobs@9.1.2)(encoding@0.1.13)(rolldown@1.0.0-beta.44) @@ -26176,7 +26472,7 @@ snapshots: '@unhead/shared': 1.11.20 '@unhead/ssr': 1.11.20 '@unhead/vue': 1.11.20(vue@3.5.13(typescript@5.9.3)) - '@vue/shared': 3.5.20 + '@vue/shared': 3.5.21 acorn: 8.14.0 c12: 2.0.1(magicast@0.3.5) chokidar: 4.0.3 @@ -26195,10 +26491,131 @@ snapshots: hookable: 5.5.3 ignore: 6.0.2 impound: 0.2.2(rollup@4.50.0) - jiti: 2.5.1 + jiti: 2.6.1 klona: 2.0.6 knitwork: 1.2.0 - magic-string: 0.30.18 + magic-string: 0.30.19 + mlly: 1.8.0 + nanotar: 0.1.1 + nitropack: 2.12.4(@netlify/blobs@9.1.2)(encoding@0.1.13)(rolldown@1.0.0-beta.44) + nuxi: 3.28.0 + nypm: 0.3.12 + ofetch: 1.4.1 + ohash: 1.1.6 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.3.1 + radix3: 1.1.2 + scule: 1.3.0 + semver: 7.7.2 + std-env: 3.9.0 + strip-literal: 2.1.1 + tinyglobby: 0.2.10 + ufo: 1.6.1 + ultrahtml: 1.6.0 + uncrypto: 0.1.3 + unctx: 2.4.1 + unenv: 1.10.0 + unhead: 1.11.20 + unimport: 3.14.6(rollup@4.50.0) + unplugin: 1.16.1 + unplugin-vue-router: 0.10.9(rollup@4.50.0)(vue-router@4.5.0(vue@3.5.13(typescript@5.9.3)))(vue@3.5.13(typescript@5.9.3)) + unstorage: 1.17.0(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0) + untyped: 1.5.2 + vue: 3.5.13(typescript@5.9.3) + vue-bundle-renderer: 2.1.2 + vue-devtools-stub: 0.1.0 + vue-router: 4.5.0(vue@3.5.13(typescript@5.9.3)) + optionalDependencies: + '@parcel/watcher': 2.5.1 + '@types/node': 22.10.5 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@biomejs/biome' + - '@capacitor/preferences' + - '@deno/kv' + - '@electric-sql/pglite' + - '@libsql/client' + - '@netlify/blobs' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - better-sqlite3 + - bufferutil + - db0 + - drizzle-orm + - encoding + - eslint + - idb-keyval + - ioredis + - less + - lightningcss + - magicast + - meow + - mysql2 + - optionator + - rolldown + - rollup + - sass + - sass-embedded + - sqlite3 + - stylelint + - stylus + - sugarss + - supports-color + - terser + - typescript + - uploadthing + - utf-8-validate + - vite + - vls + - vti + - vue-tsc + - xml2js + + nuxt@3.14.1592(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.2)(encoding@0.1.13)(eslint@9.17.0(jiti@2.6.1))(ioredis@5.7.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.44)(rollup@4.50.0)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.3): + dependencies: + '@nuxt/devalue': 2.0.2 + '@nuxt/devtools': 1.7.0(rollup@4.50.0)(vue@3.5.13(typescript@5.9.3)) + '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.50.0) + '@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@4.50.0) + '@nuxt/telemetry': 2.6.6(magicast@0.3.5) + '@nuxt/vite-builder': 3.14.1592(@types/node@22.10.5)(eslint@9.17.0(jiti@2.6.1))(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.44)(rollup@4.50.0)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.3)(vue@3.5.13(typescript@5.9.3)) + '@unhead/dom': 1.11.20 + '@unhead/shared': 1.11.20 + '@unhead/ssr': 1.11.20 + '@unhead/vue': 1.11.20(vue@3.5.13(typescript@5.9.3)) + '@vue/shared': 3.5.21 + acorn: 8.14.0 + c12: 2.0.1(magicast@0.3.5) + chokidar: 4.0.3 + compatx: 0.1.8 + consola: 3.4.2 + cookie-es: 1.2.2 + defu: 6.1.4 + destr: 2.0.5 + devalue: 5.3.2 + errx: 0.1.0 + esbuild: 0.24.2 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + globby: 14.1.0 + h3: 1.15.4 + hookable: 5.5.3 + ignore: 6.0.2 + impound: 0.2.2(rollup@4.50.0) + jiti: 2.6.1 + klona: 2.0.6 + knitwork: 1.2.0 + magic-string: 0.30.19 mlly: 1.8.0 nanotar: 0.1.1 nitropack: 2.12.4(@netlify/blobs@9.1.2)(encoding@0.1.13)(rolldown@1.0.0-beta.44) @@ -26297,7 +26714,7 @@ snapshots: '@unhead/shared': 1.11.20 '@unhead/ssr': 1.11.20 '@unhead/vue': 1.11.20(vue@3.5.13(typescript@5.9.3)) - '@vue/shared': 3.5.20 + '@vue/shared': 3.5.21 acorn: 8.14.0 c12: 2.0.1(magicast@0.3.5) chokidar: 4.0.3 @@ -26316,10 +26733,10 @@ snapshots: hookable: 5.5.3 ignore: 6.0.2 impound: 0.2.2(rollup@4.50.0) - jiti: 2.5.1 + jiti: 2.6.1 klona: 2.0.6 knitwork: 1.2.0 - magic-string: 0.30.18 + magic-string: 0.30.19 mlly: 1.8.0 nanotar: 0.1.1 nitropack: 2.12.4(@netlify/blobs@9.1.2)(encoding@0.1.13)(rolldown@1.0.0-beta.44) @@ -26406,10 +26823,10 @@ snapshots: - vue-tsc - xml2js - nuxt@3.14.1592(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.2)(encoding@0.1.13)(eslint@9.17.0(jiti@2.6.1))(ioredis@5.7.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.44)(rollup@4.50.0)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.3)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)): + nuxt@3.14.1592(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.2)(encoding@0.1.13)(eslint@9.17.0(jiti@2.6.1))(ioredis@5.7.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.44)(rollup@4.50.0)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.3)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)): dependencies: '@nuxt/devalue': 2.0.2 - '@nuxt/devtools': 1.7.0(rollup@4.50.0)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.13(typescript@5.9.3)) + '@nuxt/devtools': 1.7.0(rollup@4.50.0)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1))(vue@3.5.13(typescript@5.9.3)) '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.50.0) '@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@4.50.0) '@nuxt/telemetry': 2.6.6(magicast@0.3.5) @@ -26418,7 +26835,7 @@ snapshots: '@unhead/shared': 1.11.20 '@unhead/ssr': 1.11.20 '@unhead/vue': 1.11.20(vue@3.5.13(typescript@5.9.3)) - '@vue/shared': 3.5.20 + '@vue/shared': 3.5.21 acorn: 8.14.0 c12: 2.0.1(magicast@0.3.5) chokidar: 4.0.3 @@ -26437,10 +26854,10 @@ snapshots: hookable: 5.5.3 ignore: 6.0.2 impound: 0.2.2(rollup@4.50.0) - jiti: 2.5.1 + jiti: 2.6.1 klona: 2.0.6 knitwork: 1.2.0 - magic-string: 0.30.18 + magic-string: 0.30.19 mlly: 1.8.0 nanotar: 0.1.1 nitropack: 2.12.4(@netlify/blobs@9.1.2)(encoding@0.1.13)(rolldown@1.0.0-beta.44) @@ -27047,7 +27464,7 @@ snapshots: ts-node: 10.9.2(@types/node@22.10.5)(typescript@5.9.3) optional: true - postcss-loader@8.1.1(postcss@8.5.2)(typescript@5.8.3)(webpack@5.98.0(esbuild@0.25.0)): + postcss-loader@8.1.1(postcss@8.5.2)(typescript@5.8.3)(webpack@5.98.0): dependencies: cosmiconfig: 9.0.0(typescript@5.8.3) jiti: 1.21.7 @@ -27065,7 +27482,7 @@ snapshots: postcss: 8.5.2 semver: 7.7.2 optionalDependencies: - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.4) transitivePeerDependencies: - typescript @@ -27885,13 +28302,20 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@16.0.5(sass@1.85.0)(webpack@5.98.0): + sass-loader@16.0.5(sass@1.85.0)(webpack@5.98.0(esbuild@0.25.0)): dependencies: neo-async: 2.6.2 optionalDependencies: sass: 1.85.0 webpack: 5.98.0(esbuild@0.25.0) + sass-loader@16.0.5(sass@1.85.0)(webpack@5.98.0): + dependencies: + neo-async: 2.6.2 + optionalDependencies: + sass: 1.85.0 + webpack: 5.98.0(esbuild@0.25.4) + sass@1.85.0: dependencies: chokidar: 4.0.3 @@ -28253,12 +28677,18 @@ snapshots: source-map-js@1.2.1: {} - source-map-loader@5.0.0(webpack@5.98.0): + source-map-loader@5.0.0(webpack@5.98.0(esbuild@0.25.0)): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 webpack: 5.98.0(esbuild@0.25.0) + source-map-loader@5.0.0(webpack@5.98.0): + dependencies: + iconv-lite: 0.6.3 + source-map-js: 1.2.1 + webpack: 5.98.0(esbuild@0.25.4) + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -28706,7 +29136,7 @@ snapshots: schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.43.1 - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.4) optionalDependencies: esbuild: 0.25.4 @@ -29165,7 +29595,7 @@ snapshots: estree-walker: 3.0.3 fast-glob: 3.3.3 local-pkg: 1.1.2 - magic-string: 0.30.18 + magic-string: 0.30.19 mlly: 1.8.0 pathe: 2.0.3 picomatch: 4.0.3 @@ -29184,7 +29614,7 @@ snapshots: estree-walker: 3.0.3 fast-glob: 3.3.3 local-pkg: 1.1.2 - magic-string: 0.30.18 + magic-string: 0.30.19 mlly: 1.8.0 pathe: 2.0.3 picomatch: 4.0.3 @@ -29290,7 +29720,7 @@ snapshots: unplugin-vue-router@0.10.9(rollup@3.29.5)(vue-router@4.5.0(vue@3.5.13(typescript@5.9.3)))(vue@3.5.13(typescript@5.9.3)): dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@rollup/pluginutils': 5.2.0(rollup@3.29.5) '@vue-macros/common': 1.16.1(vue@3.5.13(typescript@5.9.3)) ast-walker-scope: 0.6.2 @@ -29298,7 +29728,7 @@ snapshots: fast-glob: 3.3.3 json5: 2.2.3 local-pkg: 0.5.1 - magic-string: 0.30.18 + magic-string: 0.30.19 mlly: 1.8.0 pathe: 1.1.2 scule: 1.3.0 @@ -29312,7 +29742,7 @@ snapshots: unplugin-vue-router@0.10.9(rollup@4.50.0)(vue-router@4.5.0(vue@3.5.13(typescript@5.9.3)))(vue@3.5.13(typescript@5.9.3)): dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 '@rollup/pluginutils': 5.2.0(rollup@4.50.0) '@vue-macros/common': 1.16.1(vue@3.5.13(typescript@5.9.3)) ast-walker-scope: 0.6.2 @@ -29320,7 +29750,7 @@ snapshots: fast-glob: 3.3.3 json5: 2.2.3 local-pkg: 0.5.1 - magic-string: 0.30.18 + magic-string: 0.30.19 mlly: 1.8.0 pathe: 1.1.2 scule: 1.3.0 @@ -29517,9 +29947,9 @@ snapshots: dependencies: vite: 7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.1) - vite-hot-client@0.2.4(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)): + vite-hot-client@0.2.4(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)): dependencies: - vite: 7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0) + vite: 7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1) vite-hot-client@2.1.0(vite@7.1.2(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)): dependencies: @@ -29657,7 +30087,7 @@ snapshots: open: 10.2.0 perfect-debounce: 1.0.0 picocolors: 1.1.1 - sirv: 3.0.1 + sirv: 3.0.2 vite: 7.1.2(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1) optionalDependencies: '@nuxt/kit': 3.15.4(magicast@0.3.5) @@ -29675,7 +30105,7 @@ snapshots: open: 10.2.0 perfect-debounce: 1.0.0 picocolors: 1.1.1 - sirv: 3.0.1 + sirv: 3.0.2 vite: 7.1.2(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1) optionalDependencies: '@nuxt/kit': 3.15.4(magicast@0.3.5) @@ -29693,7 +30123,7 @@ snapshots: open: 10.2.0 perfect-debounce: 1.0.0 picocolors: 1.1.1 - sirv: 3.0.1 + sirv: 3.0.2 vite: 7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.1) optionalDependencies: '@nuxt/kit': 3.15.4(magicast@0.3.5) @@ -29701,7 +30131,7 @@ snapshots: - rollup - supports-color - vite-plugin-inspect@0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.50.0)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)): + vite-plugin-inspect@0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.50.0)(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.2.0(rollup@4.50.0) @@ -29711,8 +30141,8 @@ snapshots: open: 10.2.0 perfect-debounce: 1.0.0 picocolors: 1.1.1 - sirv: 3.0.1 - vite: 7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0) + sirv: 3.0.2 + vite: 7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1) optionalDependencies: '@nuxt/kit': 3.15.4(magicast@0.3.5) transitivePeerDependencies: @@ -29779,7 +30209,7 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-vue-inspector@5.3.2(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)): + vite-plugin-vue-inspector@5.3.2(vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1)): dependencies: '@babel/core': 7.28.3 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.3) @@ -29790,7 +30220,7 @@ snapshots: '@vue/compiler-dom': 3.5.21 kolorist: 1.8.0 magic-string: 0.30.18 - vite: 7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0) + vite: 7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -29914,23 +30344,6 @@ snapshots: terser: 5.39.0 yaml: 2.8.1 - vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0): - dependencies: - esbuild: 0.25.9 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.50.0 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 22.10.5 - fsevents: 2.3.3 - jiti: 2.6.1 - less: 4.2.2 - sass: 1.85.0 - terser: 5.43.1 - yaml: 2.8.0 - vite@7.1.5(@types/node@22.10.5)(jiti@2.6.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.1): dependencies: esbuild: 0.25.9 @@ -30277,6 +30690,17 @@ snapshots: optionalDependencies: webpack: 5.98.0(esbuild@0.25.0) + webpack-dev-middleware@7.4.2(webpack@5.98.0): + dependencies: + colorette: 2.0.20 + memfs: 4.38.2 + mime-types: 2.1.35 + on-finished: 2.4.1 + range-parser: 1.2.1 + schema-utils: 4.3.2 + optionalDependencies: + webpack: 5.98.0(esbuild@0.25.4) + webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.0)): dependencies: '@types/bonjour': 3.5.13 @@ -30314,6 +30738,43 @@ snapshots: - supports-color - utf-8-validate + webpack-dev-server@5.2.0(webpack@5.98.0): + dependencies: + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.4 + '@types/express': 4.17.21 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.8 + '@types/sockjs': 0.3.36 + '@types/ws': 8.18.1 + ansi-html-community: 0.0.8 + bonjour-service: 1.3.0 + chokidar: 3.6.0 + colorette: 2.0.20 + compression: 1.8.1 + connect-history-api-fallback: 2.0.0 + express: 4.21.2 + graceful-fs: 4.2.11 + http-proxy-middleware: 2.0.9(@types/express@4.17.21) + ipaddr.js: 2.2.0 + launch-editor: 2.11.1 + open: 10.2.0 + p-retry: 6.2.1 + schema-utils: 4.3.2 + selfsigned: 2.4.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack-dev-middleware: 7.4.2(webpack@5.98.0) + ws: 8.18.3 + optionalDependencies: + webpack: 5.98.0(esbuild@0.25.0) + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + webpack-dev-server@5.2.2(webpack@5.98.0): dependencies: '@types/bonjour': 3.5.13 @@ -30342,10 +30803,10 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.0)) + webpack-dev-middleware: 7.4.2(webpack@5.98.0) ws: 8.18.3 optionalDependencies: - webpack: 5.98.0(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.4) transitivePeerDependencies: - bufferutil - debug @@ -30360,11 +30821,16 @@ snapshots: webpack-sources@3.3.3: {} - webpack-subresource-integrity@5.1.0(webpack@5.98.0): + webpack-subresource-integrity@5.1.0(webpack@5.98.0(esbuild@0.25.0)): dependencies: typed-assert: 1.0.9 webpack: 5.98.0(esbuild@0.25.0) + webpack-subresource-integrity@5.1.0(webpack@5.98.0): + dependencies: + typed-assert: 1.0.9 + webpack: 5.98.0(esbuild@0.25.4) + webpack-virtual-modules@0.6.2: {} webpack@5.98.0(esbuild@0.25.0): diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 02d09d6f4..6b1e031c1 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,6 @@ packages: - docs + - dev/** - examples/**/* - packages/**/*