fork of hey-api/openapi-ts because I need some additional things
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'main' into refactor/2597

authored by

Lubos and committed by
GitHub
cdbe3754 c0ca1c9f

+1748 -335
+6 -7
examples/openapi-ts-ofetch/src/client/client.gen.ts
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 import { 4 - type ClientOptions as DefaultClientOptions, 4 + type ClientOptions, 5 5 type Config, 6 6 createClient, 7 7 createConfig, 8 8 } from './client'; 9 - import type { ClientOptions } from './types.gen'; 9 + import type { ClientOptions as ClientOptions2 } from './types.gen'; 10 10 11 11 /** 12 12 * The `createClientConfig()` function will be called on client initialization ··· 16 16 * `setConfig()`. This is useful for example if you're using Next.js 17 17 * to ensure your client always has the correct values. 18 18 */ 19 - export type CreateClientConfig<T extends DefaultClientOptions = ClientOptions> = 20 - ( 21 - override?: Config<DefaultClientOptions & T>, 22 - ) => Config<Required<DefaultClientOptions> & T>; 19 + export type CreateClientConfig<T extends ClientOptions = ClientOptions2> = ( 20 + override?: Config<ClientOptions & T>, 21 + ) => Config<Required<ClientOptions> & T>; 23 22 24 23 export const client = createClient( 25 - createConfig<ClientOptions>({ 24 + createConfig<ClientOptions2>({ 26 25 baseUrl: 'https://petstore3.swagger.io/api/v3', 27 26 }), 28 27 );
+82 -44
examples/openapi-ts-ofetch/src/client/client/client.gen.ts
··· 28 28 } from './utils.gen'; 29 29 30 30 type ReqInit = Omit<RequestInit, 'body' | 'headers'> & { 31 - body?: any; 31 + body?: BodyInit | null | undefined; 32 32 headers: ReturnType<typeof mergeHeaders>; 33 33 }; 34 34 ··· 49 49 ResolvedRequestOptions 50 50 >(); 51 51 52 - const beforeRequest = async (options: RequestOptions) => { 52 + // precompute serialized / network body 53 + const resolveOptions = async (options: RequestOptions) => { 53 54 const opts = { 54 55 ..._config, 55 56 ...options, ··· 72 73 opts.serializedBody = opts.bodySerializer(opts.body); 73 74 } 74 75 75 - // remove Content-Type header if body is empty to avoid sending invalid requests 76 + // remove Content-Type if body is empty to avoid invalid requests 76 77 if (opts.body === undefined || opts.serializedBody === '') { 77 78 opts.headers.delete('Content-Type'); 78 79 } 79 80 80 - // Precompute network body for retries and consistent handling 81 + // if a raw body is provided (no serializer), adjust Content-Type only when it 82 + // equals the default JSON value to better match the concrete body type 83 + if ( 84 + opts.body !== undefined && 85 + opts.bodySerializer === null && 86 + (opts.headers.get('Content-Type') || '').toLowerCase() === 87 + 'application/json' 88 + ) { 89 + const b: unknown = opts.body; 90 + if (typeof FormData !== 'undefined' && b instanceof FormData) { 91 + // let the runtime set the multipart boundary 92 + opts.headers.delete('Content-Type'); 93 + } else if ( 94 + typeof URLSearchParams !== 'undefined' && 95 + b instanceof URLSearchParams 96 + ) { 97 + // standard urlencoded content type (+ charset) 98 + opts.headers.set( 99 + 'Content-Type', 100 + 'application/x-www-form-urlencoded;charset=UTF-8', 101 + ); 102 + } else if (typeof Blob !== 'undefined' && b instanceof Blob) { 103 + const t = b.type?.trim(); 104 + if (t) { 105 + opts.headers.set('Content-Type', t); 106 + } else { 107 + // unknown blob type: avoid sending a misleading JSON header 108 + opts.headers.delete('Content-Type'); 109 + } 110 + } 111 + } 112 + 113 + // precompute network body (stability for retries and interceptors) 81 114 const networkBody = getValidRequestBody(opts) as 82 115 | RequestInit['body'] 83 116 | null ··· 88 121 return { networkBody, opts, url }; 89 122 }; 90 123 124 + // apply request interceptors and mirror header/method/signal back to opts 125 + const applyRequestInterceptors = async ( 126 + request: Request, 127 + opts: ResolvedRequestOptions, 128 + ) => { 129 + for (const fn of interceptors.request.fns) { 130 + if (fn) { 131 + request = await fn(request, opts); 132 + } 133 + } 134 + // reflect interceptor changes into opts used by the network layer 135 + opts.headers = request.headers; 136 + opts.method = request.method as Uppercase<HttpMethod>; 137 + // ignore request.body changes to avoid turning serialized bodies into streams 138 + // body comes only from getValidRequestBody(options) 139 + // reflect signal if present 140 + opts.signal = (request as any).signal as AbortSignal | undefined; 141 + return request; 142 + }; 143 + 144 + // build ofetch options with stable retry logic based on body repeatability 145 + const buildNetworkOptions = ( 146 + opts: ResolvedRequestOptions, 147 + body: BodyInit | null | undefined, 148 + responseType: OfetchResponseType | undefined, 149 + ) => { 150 + const effectiveRetry = isRepeatableBody(body) 151 + ? (opts.retry as any) 152 + : (0 as any); 153 + return buildOfetchOptions(opts, body, responseType, effectiveRetry); 154 + }; 155 + 91 156 const request: Client['request'] = async (options) => { 92 157 const { 93 158 networkBody: initialNetworkBody, 94 159 opts, 95 160 url, 96 - } = await beforeRequest(options as any); 97 - // Compute response type mapping once 161 + } = await resolveOptions(options as any); 162 + // map parseAs -> ofetch responseType once per request 98 163 const ofetchResponseType: OfetchResponseType | undefined = 99 164 mapParseAsToResponseType(opts.parseAs, opts.responseType); 100 165 101 166 const $ofetch = opts.ofetch ?? ofetch; 102 167 103 - // Always create Request pre-network (align with client-fetch) 104 - let networkBody = initialNetworkBody; 168 + // create Request before network to run middleware consistently 169 + const networkBody = initialNetworkBody; 105 170 const requestInit: ReqInit = { 106 171 body: networkBody, 107 172 headers: opts.headers as Headers, ··· 111 176 }; 112 177 let request = new Request(url, requestInit); 113 178 114 - for (const fn of interceptors.request.fns) { 115 - if (fn) { 116 - request = await fn(request, opts); 117 - } 118 - } 119 - 120 - // Reflect any interceptor changes into opts used for network and downstream 121 - opts.headers = request.headers; 122 - opts.method = request.method as Uppercase<HttpMethod>; 123 - // Attempt to reflect possible signal/body changes (safely) 124 - 125 - const reqBody = (request as any).body as unknown; 126 - let effectiveRetry = opts.retry; 127 - if (reqBody !== undefined && reqBody !== null) { 128 - if (isRepeatableBody(reqBody)) { 129 - networkBody = reqBody as BodyInit; 130 - } else { 131 - networkBody = reqBody as BodyInit; 132 - // Disable retries for non-repeatable bodies 133 - effectiveRetry = 0 as any; 134 - } 135 - } 136 - 137 - opts.signal = (request as any).signal as AbortSignal | undefined; 179 + request = await applyRequestInterceptors(request, opts); 138 180 const finalUrl = request.url; 139 181 140 - // Build ofetch options and perform the request 141 - const responseOptions = buildOfetchOptions( 182 + // build ofetch options and perform the request (.raw keeps the Response) 183 + const responseOptions = buildNetworkOptions( 142 184 opts as ResolvedRequestOptions, 143 - networkBody ?? undefined, 144 - effectiveRetry as any, 185 + networkBody, 186 + ofetchResponseType, 145 187 ); 146 188 147 189 let response = await $ofetch.raw(finalUrl, responseOptions); ··· 167 209 } 168 210 } 169 211 170 - // Ensure error is never undefined after interceptors 212 + // ensure error is never undefined after interceptors 171 213 finalError = (finalError as any) || ({} as string); 172 214 173 215 if (opts.throwOnError) { ··· 183 225 184 226 const makeSseFn = 185 227 (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => { 186 - const { networkBody, opts, url } = await beforeRequest(options); 228 + const { networkBody, opts, url } = await resolveOptions(options); 187 229 const optsForSse: any = { ...opts }; 188 - delete optsForSse.body; 230 + delete optsForSse.body; // body is provided via serializedBody below 189 231 return createSseClient({ 190 232 ...optsForSse, 191 233 fetch: opts.fetch, ··· 193 235 method, 194 236 onRequest: async (url, init) => { 195 237 let request = new Request(url, init); 196 - for (const fn of interceptors.request.fns) { 197 - if (fn) { 198 - request = await fn(request, opts); 199 - } 200 - } 238 + request = await applyRequestInterceptors(request, opts); 201 239 return request; 202 240 }, 203 241 serializedBody: networkBody as BodyInit | null | undefined,
+38 -3
examples/openapi-ts-ofetch/src/client/client/types.gen.ts
··· 22 22 export interface Config<T extends ClientOptions = ClientOptions> 23 23 extends Omit<RequestInit, 'body' | 'headers' | 'method'>, 24 24 CoreConfig { 25 + /** 26 + * HTTP(S) agent configuration (Node.js only). Passed through to ofetch. 27 + */ 25 28 agent?: OfetchOptions['agent']; 26 29 /** 27 30 * Base URL for all requests made by this client. 28 31 */ 29 32 baseUrl?: T['baseUrl']; 30 - /** Node-only proxy/agent options */ 33 + /** 34 + * Node-only proxy/agent options. 35 + */ 31 36 dispatcher?: OfetchOptions['dispatcher']; 32 - /** Optional fetch instance used for SSE streaming */ 37 + /** 38 + * Fetch API implementation. Used for SSE streaming. You can use this option 39 + * to provide a custom fetch instance. 40 + * 41 + * @default globalThis.fetch 42 + */ 33 43 fetch?: typeof fetch; 44 + /** 45 + * Controls the native ofetch behaviour that throws `FetchError` when 46 + * `response.ok === false`. We default to suppressing it to match the fetch 47 + * client semantics and let `throwOnError` drive the outcome. 48 + */ 49 + ignoreResponseError?: OfetchOptions['ignoreResponseError']; 34 50 // No custom fetch option: provide custom instance via `ofetch` instead 35 51 /** 36 52 * Please don't use the Fetch client for Next.js applications. The `next` ··· 44 60 * be used for requests instead of the default `ofetch` export. 45 61 */ 46 62 ofetch?: typeof ofetch; 47 - /** ofetch interceptors and runtime options */ 63 + /** 64 + * ofetch hook called before a request is sent. 65 + */ 48 66 onRequest?: OfetchOptions['onRequest']; 67 + /** 68 + * ofetch hook called when a request fails before receiving a response 69 + * (e.g., network errors or aborted requests). 70 + */ 49 71 onRequestError?: OfetchOptions['onRequestError']; 72 + /** 73 + * ofetch hook called after a successful response is received and parsed. 74 + */ 50 75 onResponse?: OfetchOptions['onResponse']; 76 + /** 77 + * ofetch hook called when the response indicates an error (non-ok status) 78 + * or when response parsing fails. 79 + */ 51 80 onResponseError?: OfetchOptions['onResponseError']; 52 81 /** 53 82 * Return the response data parsed in a specified format. By default, `auto` ··· 82 111 * Automatically retry failed requests. 83 112 */ 84 113 retry?: OfetchOptions['retry']; 114 + /** 115 + * Delay (in ms) between retry attempts. 116 + */ 85 117 retryDelay?: OfetchOptions['retryDelay']; 118 + /** 119 + * HTTP status codes that should trigger a retry. 120 + */ 86 121 retryStatusCodes?: OfetchOptions['retryStatusCodes']; 87 122 /** 88 123 * Throw an error instead of returning it in the response?
+26 -15
examples/openapi-ts-ofetch/src/client/client/utils.gen.ts
··· 316 316 export const buildOfetchOptions = ( 317 317 opts: ResolvedRequestOptions, 318 318 body: BodyInit | null | undefined, 319 + responseType: OfetchResponseType | undefined, 319 320 retryOverride?: OfetchOptions['retry'], 320 - ): OfetchOptions => { 321 - const responseType = mapParseAsToResponseType( 322 - opts.parseAs, 323 - opts.responseType, 324 - ); 325 - return { 321 + ): OfetchOptions => 322 + ({ 326 323 agent: opts.agent as OfetchOptions['agent'], 327 - body: body as any, 324 + body, 325 + credentials: opts.credentials as OfetchOptions['credentials'], 328 326 dispatcher: opts.dispatcher as OfetchOptions['dispatcher'], 329 327 headers: opts.headers as Headers, 328 + ignoreResponseError: 329 + (opts.ignoreResponseError as OfetchOptions['ignoreResponseError']) ?? 330 + true, 330 331 method: opts.method, 331 332 onRequest: opts.onRequest as OfetchOptions['onRequest'], 332 333 onRequestError: opts.onRequestError as OfetchOptions['onRequestError'], 333 334 onResponse: opts.onResponse as OfetchOptions['onResponse'], 334 335 onResponseError: opts.onResponseError as OfetchOptions['onResponseError'], 335 336 parseResponse: opts.parseResponse as OfetchOptions['parseResponse'], 336 - query: undefined, // URL already includes query 337 + // URL already includes query 338 + query: undefined, 337 339 responseType, 338 - retry: (retryOverride ?? 339 - (opts.retry as OfetchOptions['retry'])) as OfetchOptions['retry'], 340 + retry: retryOverride ?? (opts.retry as OfetchOptions['retry']), 340 341 retryDelay: opts.retryDelay as OfetchOptions['retryDelay'], 341 342 retryStatusCodes: 342 343 opts.retryStatusCodes as OfetchOptions['retryStatusCodes'], 343 344 signal: opts.signal, 344 345 timeout: opts.timeout as number | undefined, 345 - } as OfetchOptions; 346 - }; 346 + }) as OfetchOptions; 347 347 348 348 /** 349 349 * Parse a successful response, handling empty bodies and stream cases. ··· 382 382 } 383 383 } 384 384 385 - // Prefer ofetch-populated data 385 + // Prefer ofetch-populated data unless we explicitly need raw `formData` 386 386 let data: unknown = (response as any)._data; 387 - if (typeof data === 'undefined') { 387 + if (inferredParseAs === 'formData' || typeof data === 'undefined') { 388 388 switch (inferredParseAs) { 389 389 case 'arrayBuffer': 390 390 case 'blob': 391 391 case 'formData': 392 - case 'json': 393 392 case 'text': 394 393 data = await (response as any)[inferredParseAs](); 395 394 break; 395 + case 'json': { 396 + // Some servers return 200 with no Content-Length and empty body. 397 + // response.json() would throw; detect empty via clone().text() first. 398 + const txt = await response.clone().text(); 399 + if (!txt) { 400 + data = {}; 401 + } else { 402 + data = await (response as any).json(); 403 + } 404 + break; 405 + } 396 406 case 'stream': 397 407 return response.body; 398 408 } ··· 526 536 ): Config<Omit<ClientOptions, keyof T> & T> => ({ 527 537 ...jsonBodySerializer, 528 538 headers: defaultHeaders, 539 + ignoreResponseError: true, 529 540 parseAs: 'auto', 530 541 querySerializer: defaultQuerySerializer, 531 542 ...override,
+1 -1
examples/openapi-ts-ofetch/src/client/index.ts
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 export * from './sdk.gen'; 4 - export * from './types.gen'; 4 + export type * from './types.gen';
+2 -2
examples/openapi-ts-ofetch/src/client/sdk.gen.ts
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 - import type { Client, Options as ClientOptions, TDataShape } from './client'; 3 + import type { Client, Options as Options2, TDataShape } from './client'; 4 4 import { client } from './client.gen'; 5 5 import type { 6 6 AddPetData, ··· 65 65 export type Options< 66 66 TData extends TDataShape = TDataShape, 67 67 ThrowOnError extends boolean = boolean, 68 - > = ClientOptions<TData, ThrowOnError> & { 68 + > = Options2<TData, ThrowOnError> & { 69 69 /** 70 70 * You can provide a client instance returned by `createClient()` instead of 71 71 * individual options. This might be also useful if you want to implement a
+4 -4
examples/openapi-ts-ofetch/src/client/types.gen.ts
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 + export type ClientOptions = { 4 + baseUrl: 'https://petstore3.swagger.io/api/v3' | (string & {}); 5 + }; 6 + 3 7 export type Order = { 4 8 complete?: boolean; 5 9 id?: number; ··· 693 697 */ 694 698 200: unknown; 695 699 }; 696 - 697 - export type ClientOptions = { 698 - baseUrl: 'https://petstore3.swagger.io/api/v3' | (string & {}); 699 - };
+1 -1
packages/openapi-ts-tests/main/package.json
··· 30 30 "@hey-api/codegen-core": "workspace:*", 31 31 "@hey-api/custom-client": "workspace:*", 32 32 "@hey-api/openapi-ts": "workspace:*", 33 - "@pinia/colada": "0.17.5", 33 + "@pinia/colada": "0.17.6", 34 34 "@tanstack/angular-query-experimental": "5.73.3", 35 35 "@tanstack/react-query": "5.73.3", 36 36 "@tanstack/solid-query": "5.73.3",
+1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ofetch/base-url-false/client/utils.gen.ts
··· 322 322 ({ 323 323 agent: opts.agent as OfetchOptions['agent'], 324 324 body, 325 + credentials: opts.credentials as OfetchOptions['credentials'], 325 326 dispatcher: opts.dispatcher as OfetchOptions['dispatcher'], 326 327 headers: opts.headers as Headers, 327 328 ignoreResponseError:
+1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ofetch/base-url-number/client/utils.gen.ts
··· 322 322 ({ 323 323 agent: opts.agent as OfetchOptions['agent'], 324 324 body, 325 + credentials: opts.credentials as OfetchOptions['credentials'], 325 326 dispatcher: opts.dispatcher as OfetchOptions['dispatcher'], 326 327 headers: opts.headers as Headers, 327 328 ignoreResponseError:
+1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ofetch/base-url-strict/client/utils.gen.ts
··· 322 322 ({ 323 323 agent: opts.agent as OfetchOptions['agent'], 324 324 body, 325 + credentials: opts.credentials as OfetchOptions['credentials'], 325 326 dispatcher: opts.dispatcher as OfetchOptions['dispatcher'], 326 327 headers: opts.headers as Headers, 327 328 ignoreResponseError:
+1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ofetch/base-url-string/client/utils.gen.ts
··· 322 322 ({ 323 323 agent: opts.agent as OfetchOptions['agent'], 324 324 body, 325 + credentials: opts.credentials as OfetchOptions['credentials'], 325 326 dispatcher: opts.dispatcher as OfetchOptions['dispatcher'], 326 327 headers: opts.headers as Headers, 327 328 ignoreResponseError:
+1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ofetch/clean-false/client/utils.gen.ts
··· 322 322 ({ 323 323 agent: opts.agent as OfetchOptions['agent'], 324 324 body, 325 + credentials: opts.credentials as OfetchOptions['credentials'], 325 326 dispatcher: opts.dispatcher as OfetchOptions['dispatcher'], 326 327 headers: opts.headers as Headers, 327 328 ignoreResponseError:
+1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ofetch/default/client/utils.gen.ts
··· 322 322 ({ 323 323 agent: opts.agent as OfetchOptions['agent'], 324 324 body, 325 + credentials: opts.credentials as OfetchOptions['credentials'], 325 326 dispatcher: opts.dispatcher as OfetchOptions['dispatcher'], 326 327 headers: opts.headers as Headers, 327 328 ignoreResponseError:
+1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ofetch/sdk-client-optional/client/utils.gen.ts
··· 322 322 ({ 323 323 agent: opts.agent as OfetchOptions['agent'], 324 324 body, 325 + credentials: opts.credentials as OfetchOptions['credentials'], 325 326 dispatcher: opts.dispatcher as OfetchOptions['dispatcher'], 326 327 headers: opts.headers as Headers, 327 328 ignoreResponseError:
+1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ofetch/sdk-client-required/client/utils.gen.ts
··· 322 322 ({ 323 323 agent: opts.agent as OfetchOptions['agent'], 324 324 body, 325 + credentials: opts.credentials as OfetchOptions['credentials'], 325 326 dispatcher: opts.dispatcher as OfetchOptions['dispatcher'], 326 327 headers: opts.headers as Headers, 327 328 ignoreResponseError:
+1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/clients/@hey-api/client-ofetch/tsconfig-nodenext-sdk/client/utils.gen.ts
··· 322 322 ({ 323 323 agent: opts.agent as OfetchOptions['agent'], 324 324 body, 325 + credentials: opts.credentials as OfetchOptions['credentials'], 325 326 dispatcher: opts.dispatcher as OfetchOptions['dispatcher'], 326 327 headers: opts.headers as Headers, 327 328 ignoreResponseError:
+1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/sse-ofetch/client/utils.gen.ts
··· 322 322 ({ 323 323 agent: opts.agent as OfetchOptions['agent'], 324 324 body, 325 + credentials: opts.credentials as OfetchOptions['credentials'], 325 326 dispatcher: opts.dispatcher as OfetchOptions['dispatcher'], 326 327 headers: opts.headers as Headers, 327 328 ignoreResponseError:
+15 -1
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/webhooks/zod.gen.ts
··· 630 630 host_id: z.string(), 631 631 message_id: z.string(), 632 632 inviter_name: z.string(), 633 - reason_type: z.unknown(), 633 + reason_type: z.union([ 634 + z.literal(0), 635 + z.literal(1), 636 + z.literal(2), 637 + z.literal(3), 638 + z.literal(4), 639 + z.literal(7), 640 + z.literal(8), 641 + z.literal(9), 642 + z.literal(10), 643 + z.literal(11), 644 + z.literal(12), 645 + z.literal(13), 646 + z.literal(14) 647 + ]), 634 648 participant: z.object({ 635 649 call_type: z.string(), 636 650 device_ip: z.string()
+23 -3
packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/mini/default/zod.gen.ts
··· 103 103 /** 104 104 * This is a simple enum with numbers 105 105 */ 106 - export const zEnumWithNumbers = z.unknown(); 106 + export const zEnumWithNumbers = z.union([ 107 + z.literal(1), 108 + z.literal(2), 109 + z.literal(3), 110 + z.literal(1.1), 111 + z.literal(1.2), 112 + z.literal(1.3), 113 + z.literal(100), 114 + z.literal(200), 115 + z.literal(300), 116 + z.literal(-100), 117 + z.literal(-200), 118 + z.literal(-300), 119 + z.literal(-1.1), 120 + z.literal(-1.2), 121 + z.literal(-1.3) 122 + ]); 107 123 108 124 /** 109 125 * Success=1,Warning=2,Error=3 ··· 113 129 /** 114 130 * This is a simple enum with numbers 115 131 */ 116 - export const zEnumWithExtensions = z.unknown(); 132 + export const zEnumWithExtensions = z.union([ 133 + z.literal(200), 134 + z.literal(400), 135 + z.literal(500) 136 + ]); 117 137 118 138 /** 119 139 * This is a simple array with numbers ··· 234 254 '500 foo.bar', 235 255 '600 foo&bar' 236 256 ])), 237 - bool: z.optional(z.unknown()) 257 + bool: z.optional(z.literal(true)) 238 258 }); 239 259 240 260 /**
+23 -3
packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/v3/default/zod.gen.ts
··· 103 103 /** 104 104 * This is a simple enum with numbers 105 105 */ 106 - export const zEnumWithNumbers = z.unknown(); 106 + export const zEnumWithNumbers = z.union([ 107 + z.literal(1), 108 + z.literal(2), 109 + z.literal(3), 110 + z.literal(1.1), 111 + z.literal(1.2), 112 + z.literal(1.3), 113 + z.literal(100), 114 + z.literal(200), 115 + z.literal(300), 116 + z.literal(-100), 117 + z.literal(-200), 118 + z.literal(-300), 119 + z.literal(-1.1), 120 + z.literal(-1.2), 121 + z.literal(-1.3) 122 + ]); 107 123 108 124 /** 109 125 * Success=1,Warning=2,Error=3 ··· 113 129 /** 114 130 * This is a simple enum with numbers 115 131 */ 116 - export const zEnumWithExtensions = z.unknown(); 132 + export const zEnumWithExtensions = z.union([ 133 + z.literal(200), 134 + z.literal(400), 135 + z.literal(500) 136 + ]); 117 137 118 138 /** 119 139 * This is a simple array with numbers ··· 234 254 '500 foo.bar', 235 255 '600 foo&bar' 236 256 ]).optional(), 237 - bool: z.unknown().optional() 257 + bool: z.literal(true).optional() 238 258 }); 239 259 240 260 /**
+23 -3
packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/v4/default/zod.gen.ts
··· 103 103 /** 104 104 * This is a simple enum with numbers 105 105 */ 106 - export const zEnumWithNumbers = z.unknown(); 106 + export const zEnumWithNumbers = z.union([ 107 + z.literal(1), 108 + z.literal(2), 109 + z.literal(3), 110 + z.literal(1.1), 111 + z.literal(1.2), 112 + z.literal(1.3), 113 + z.literal(100), 114 + z.literal(200), 115 + z.literal(300), 116 + z.literal(-100), 117 + z.literal(-200), 118 + z.literal(-300), 119 + z.literal(-1.1), 120 + z.literal(-1.2), 121 + z.literal(-1.3) 122 + ]); 107 123 108 124 /** 109 125 * Success=1,Warning=2,Error=3 ··· 113 129 /** 114 130 * This is a simple enum with numbers 115 131 */ 116 - export const zEnumWithExtensions = z.unknown(); 132 + export const zEnumWithExtensions = z.union([ 133 + z.literal(200), 134 + z.literal(400), 135 + z.literal(500) 136 + ]); 117 137 118 138 /** 119 139 * This is a simple array with numbers ··· 234 254 '500 foo.bar', 235 255 '600 foo&bar' 236 256 ])), 237 - bool: z.optional(z.unknown()) 257 + bool: z.optional(z.literal(true)) 238 258 }); 239 259 240 260 /**
+44 -11
packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/mini/default/zod.gen.ts
··· 119 119 'Non-ascii: øæåôöØÆÅÔÖ字符串' 120 120 ]); 121 121 122 - export const zEnumWithReplacedCharacters = z.enum([ 123 - "'Single Quote'", 124 - '"Double Quotes"', 125 - 'øæåôöØÆÅÔÖ字符串', 126 - '' 122 + export const zEnumWithReplacedCharacters = z.union([ 123 + z.literal("'Single Quote'"), 124 + z.literal('"Double Quotes"'), 125 + z.literal('øæåôöØÆÅÔÖ字符串'), 126 + z.literal(3.1), 127 + z.literal('') 127 128 ]); 128 129 129 130 /** 130 131 * This is a simple enum with numbers 131 132 */ 132 - export const zEnumWithNumbers = z.unknown(); 133 + export const zEnumWithNumbers = z.union([ 134 + z.literal(1), 135 + z.literal(2), 136 + z.literal(3), 137 + z.literal(1.1), 138 + z.literal(1.2), 139 + z.literal(1.3), 140 + z.literal(100), 141 + z.literal(200), 142 + z.literal(300), 143 + z.literal(-100), 144 + z.literal(-200), 145 + z.literal(-300), 146 + z.literal(-1.1), 147 + z.literal(-1.2), 148 + z.literal(-1.3) 149 + ]); 133 150 134 151 /** 135 152 * Success=1,Warning=2,Error=3 ··· 139 156 /** 140 157 * This is a simple enum with numbers 141 158 */ 142 - export const zEnumWithExtensions = z.unknown(); 159 + export const zEnumWithExtensions = z.union([ 160 + z.literal(200), 161 + z.literal(400), 162 + z.literal(500) 163 + ]); 143 164 144 - export const zEnumWithXEnumNames = z.unknown(); 165 + export const zEnumWithXEnumNames = z.union([ 166 + z.literal(0), 167 + z.literal(1), 168 + z.literal(2) 169 + ]); 145 170 146 171 /** 147 172 * This is a simple array with numbers ··· 311 336 '500 foo.bar', 312 337 '600 foo&bar' 313 338 ])), 314 - bool: z.optional(z.unknown()) 339 + bool: z.optional(z.literal(true)) 315 340 }); 316 341 317 342 /** ··· 752 777 String: z.optional(z.enum([ 753 778 'String' 754 779 ])), 755 - number: z.optional(z.unknown()), 780 + number: z.optional(z.literal(0)), 756 781 null: z.optional(z.unknown()), 757 782 withType: z.optional(z.enum([ 758 783 'Some string' ··· 938 963 ]); 939 964 940 965 export const zModelWithNumericEnumUnion = z.object({ 941 - value: z.optional(z.unknown()) 966 + value: z.optional(z.union([ 967 + z.literal(-10), 968 + z.literal(-1), 969 + z.literal(0), 970 + z.literal(1), 971 + z.literal(3), 972 + z.literal(6), 973 + z.literal(12) 974 + ])) 942 975 }); 943 976 944 977 /**
+44 -11
packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v3/default/zod.gen.ts
··· 119 119 'Non-ascii: øæåôöØÆÅÔÖ字符串' 120 120 ]); 121 121 122 - export const zEnumWithReplacedCharacters = z.enum([ 123 - "'Single Quote'", 124 - '"Double Quotes"', 125 - 'øæåôöØÆÅÔÖ字符串', 126 - '' 122 + export const zEnumWithReplacedCharacters = z.union([ 123 + z.literal("'Single Quote'"), 124 + z.literal('"Double Quotes"'), 125 + z.literal('øæåôöØÆÅÔÖ字符串'), 126 + z.literal(3.1), 127 + z.literal('') 127 128 ]); 128 129 129 130 /** 130 131 * This is a simple enum with numbers 131 132 */ 132 - export const zEnumWithNumbers = z.unknown(); 133 + export const zEnumWithNumbers = z.union([ 134 + z.literal(1), 135 + z.literal(2), 136 + z.literal(3), 137 + z.literal(1.1), 138 + z.literal(1.2), 139 + z.literal(1.3), 140 + z.literal(100), 141 + z.literal(200), 142 + z.literal(300), 143 + z.literal(-100), 144 + z.literal(-200), 145 + z.literal(-300), 146 + z.literal(-1.1), 147 + z.literal(-1.2), 148 + z.literal(-1.3) 149 + ]); 133 150 134 151 /** 135 152 * Success=1,Warning=2,Error=3 ··· 139 156 /** 140 157 * This is a simple enum with numbers 141 158 */ 142 - export const zEnumWithExtensions = z.unknown(); 159 + export const zEnumWithExtensions = z.union([ 160 + z.literal(200), 161 + z.literal(400), 162 + z.literal(500) 163 + ]); 143 164 144 - export const zEnumWithXEnumNames = z.unknown(); 165 + export const zEnumWithXEnumNames = z.union([ 166 + z.literal(0), 167 + z.literal(1), 168 + z.literal(2) 169 + ]); 145 170 146 171 /** 147 172 * This is a simple array with numbers ··· 311 336 '500 foo.bar', 312 337 '600 foo&bar' 313 338 ]).optional(), 314 - bool: z.unknown().optional() 339 + bool: z.literal(true).optional() 315 340 }); 316 341 317 342 /** ··· 750 775 String: z.enum([ 751 776 'String' 752 777 ]).optional(), 753 - number: z.unknown().optional(), 778 + number: z.literal(0).optional(), 754 779 null: z.unknown().optional(), 755 780 withType: z.enum([ 756 781 'Some string' ··· 936 961 ]); 937 962 938 963 export const zModelWithNumericEnumUnion = z.object({ 939 - value: z.unknown().optional() 964 + value: z.union([ 965 + z.literal(-10), 966 + z.literal(-1), 967 + z.literal(0), 968 + z.literal(1), 969 + z.literal(3), 970 + z.literal(6), 971 + z.literal(12) 972 + ]).optional() 940 973 }); 941 974 942 975 /**
+44 -11
packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v4/default/zod.gen.ts
··· 119 119 'Non-ascii: øæåôöØÆÅÔÖ字符串' 120 120 ]); 121 121 122 - export const zEnumWithReplacedCharacters = z.enum([ 123 - "'Single Quote'", 124 - '"Double Quotes"', 125 - 'øæåôöØÆÅÔÖ字符串', 126 - '' 122 + export const zEnumWithReplacedCharacters = z.union([ 123 + z.literal("'Single Quote'"), 124 + z.literal('"Double Quotes"'), 125 + z.literal('øæåôöØÆÅÔÖ字符串'), 126 + z.literal(3.1), 127 + z.literal('') 127 128 ]); 128 129 129 130 /** 130 131 * This is a simple enum with numbers 131 132 */ 132 - export const zEnumWithNumbers = z.unknown(); 133 + export const zEnumWithNumbers = z.union([ 134 + z.literal(1), 135 + z.literal(2), 136 + z.literal(3), 137 + z.literal(1.1), 138 + z.literal(1.2), 139 + z.literal(1.3), 140 + z.literal(100), 141 + z.literal(200), 142 + z.literal(300), 143 + z.literal(-100), 144 + z.literal(-200), 145 + z.literal(-300), 146 + z.literal(-1.1), 147 + z.literal(-1.2), 148 + z.literal(-1.3) 149 + ]); 133 150 134 151 /** 135 152 * Success=1,Warning=2,Error=3 ··· 139 156 /** 140 157 * This is a simple enum with numbers 141 158 */ 142 - export const zEnumWithExtensions = z.unknown(); 159 + export const zEnumWithExtensions = z.union([ 160 + z.literal(200), 161 + z.literal(400), 162 + z.literal(500) 163 + ]); 143 164 144 - export const zEnumWithXEnumNames = z.unknown(); 165 + export const zEnumWithXEnumNames = z.union([ 166 + z.literal(0), 167 + z.literal(1), 168 + z.literal(2) 169 + ]); 145 170 146 171 /** 147 172 * This is a simple array with numbers ··· 311 336 '500 foo.bar', 312 337 '600 foo&bar' 313 338 ])), 314 - bool: z.optional(z.unknown()) 339 + bool: z.optional(z.literal(true)) 315 340 }); 316 341 317 342 /** ··· 752 777 String: z.optional(z.enum([ 753 778 'String' 754 779 ])), 755 - number: z.optional(z.unknown()), 780 + number: z.optional(z.literal(0)), 756 781 null: z.optional(z.unknown()), 757 782 withType: z.optional(z.enum([ 758 783 'Some string' ··· 938 963 ]); 939 964 940 965 export const zModelWithNumericEnumUnion = z.object({ 941 - value: z.optional(z.unknown()) 966 + value: z.optional(z.union([ 967 + z.literal(-10), 968 + z.literal(-1), 969 + z.literal(0), 970 + z.literal(1), 971 + z.literal(3), 972 + z.literal(6), 973 + z.literal(12) 974 + ])) 942 975 }); 943 976 944 977 /**
+43 -10
packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/default/zod.gen.ts
··· 125 125 'Non-ascii: øæåôöØÆÅÔÖ字符串' 126 126 ]); 127 127 128 - export const zEnumWithReplacedCharacters = z.enum([ 129 - "'Single Quote'", 130 - '"Double Quotes"', 131 - 'øæåôöØÆÅÔÖ字符串', 132 - '' 128 + export const zEnumWithReplacedCharacters = z.union([ 129 + z.literal("'Single Quote'"), 130 + z.literal('"Double Quotes"'), 131 + z.literal('øæåôöØÆÅÔÖ字符串'), 132 + z.literal(3.1), 133 + z.literal('') 133 134 ]); 134 135 135 136 /** 136 137 * This is a simple enum with numbers 137 138 */ 138 - export const zEnumWithNumbers = z.unknown(); 139 + export const zEnumWithNumbers = z.union([ 140 + z.literal(1), 141 + z.literal(2), 142 + z.literal(3), 143 + z.literal(1.1), 144 + z.literal(1.2), 145 + z.literal(1.3), 146 + z.literal(100), 147 + z.literal(200), 148 + z.literal(300), 149 + z.literal(-100), 150 + z.literal(-200), 151 + z.literal(-300), 152 + z.literal(-1.1), 153 + z.literal(-1.2), 154 + z.literal(-1.3) 155 + ]); 139 156 140 157 /** 141 158 * Success=1,Warning=2,Error=3 ··· 145 162 /** 146 163 * This is a simple enum with numbers 147 164 */ 148 - export const zEnumWithExtensions = z.unknown(); 165 + export const zEnumWithExtensions = z.union([ 166 + z.literal(200), 167 + z.literal(400), 168 + z.literal(500) 169 + ]); 149 170 150 - export const zEnumWithXEnumNames = z.unknown(); 171 + export const zEnumWithXEnumNames = z.union([ 172 + z.literal(0), 173 + z.literal(1), 174 + z.literal(2) 175 + ]); 151 176 152 177 /** 153 178 * This is a simple array with numbers ··· 320 345 '500 foo.bar', 321 346 '600 foo&bar' 322 347 ])), 323 - bool: z.optional(z.unknown()) 348 + bool: z.optional(z.literal(true)) 324 349 }); 325 350 326 351 /** ··· 944 969 ]); 945 970 946 971 export const zModelWithNumericEnumUnion = z.object({ 947 - value: z.optional(z.unknown()) 972 + value: z.optional(z.union([ 973 + z.literal(-10), 974 + z.literal(-1), 975 + z.literal(0), 976 + z.literal(1), 977 + z.literal(3), 978 + z.literal(6), 979 + z.literal(12) 980 + ])) 948 981 }); 949 982 950 983 /**
+43 -10
packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/default/zod.gen.ts
··· 125 125 'Non-ascii: øæåôöØÆÅÔÖ字符串' 126 126 ]); 127 127 128 - export const zEnumWithReplacedCharacters = z.enum([ 129 - "'Single Quote'", 130 - '"Double Quotes"', 131 - 'øæåôöØÆÅÔÖ字符串', 132 - '' 128 + export const zEnumWithReplacedCharacters = z.union([ 129 + z.literal("'Single Quote'"), 130 + z.literal('"Double Quotes"'), 131 + z.literal('øæåôöØÆÅÔÖ字符串'), 132 + z.literal(3.1), 133 + z.literal('') 133 134 ]); 134 135 135 136 /** 136 137 * This is a simple enum with numbers 137 138 */ 138 - export const zEnumWithNumbers = z.unknown(); 139 + export const zEnumWithNumbers = z.union([ 140 + z.literal(1), 141 + z.literal(2), 142 + z.literal(3), 143 + z.literal(1.1), 144 + z.literal(1.2), 145 + z.literal(1.3), 146 + z.literal(100), 147 + z.literal(200), 148 + z.literal(300), 149 + z.literal(-100), 150 + z.literal(-200), 151 + z.literal(-300), 152 + z.literal(-1.1), 153 + z.literal(-1.2), 154 + z.literal(-1.3) 155 + ]); 139 156 140 157 /** 141 158 * Success=1,Warning=2,Error=3 ··· 145 162 /** 146 163 * This is a simple enum with numbers 147 164 */ 148 - export const zEnumWithExtensions = z.unknown(); 165 + export const zEnumWithExtensions = z.union([ 166 + z.literal(200), 167 + z.literal(400), 168 + z.literal(500) 169 + ]); 149 170 150 - export const zEnumWithXEnumNames = z.unknown(); 171 + export const zEnumWithXEnumNames = z.union([ 172 + z.literal(0), 173 + z.literal(1), 174 + z.literal(2) 175 + ]); 151 176 152 177 /** 153 178 * This is a simple array with numbers ··· 320 345 '500 foo.bar', 321 346 '600 foo&bar' 322 347 ]).optional(), 323 - bool: z.unknown().optional() 348 + bool: z.literal(true).optional() 324 349 }); 325 350 326 351 /** ··· 942 967 ]); 943 968 944 969 export const zModelWithNumericEnumUnion = z.object({ 945 - value: z.unknown().optional() 970 + value: z.union([ 971 + z.literal(-10), 972 + z.literal(-1), 973 + z.literal(0), 974 + z.literal(1), 975 + z.literal(3), 976 + z.literal(6), 977 + z.literal(12) 978 + ]).optional() 946 979 }); 947 980 948 981 /**
+43 -10
packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/default/zod.gen.ts
··· 125 125 'Non-ascii: øæåôöØÆÅÔÖ字符串' 126 126 ]); 127 127 128 - export const zEnumWithReplacedCharacters = z.enum([ 129 - "'Single Quote'", 130 - '"Double Quotes"', 131 - 'øæåôöØÆÅÔÖ字符串', 132 - '' 128 + export const zEnumWithReplacedCharacters = z.union([ 129 + z.literal("'Single Quote'"), 130 + z.literal('"Double Quotes"'), 131 + z.literal('øæåôöØÆÅÔÖ字符串'), 132 + z.literal(3.1), 133 + z.literal('') 133 134 ]); 134 135 135 136 /** 136 137 * This is a simple enum with numbers 137 138 */ 138 - export const zEnumWithNumbers = z.unknown(); 139 + export const zEnumWithNumbers = z.union([ 140 + z.literal(1), 141 + z.literal(2), 142 + z.literal(3), 143 + z.literal(1.1), 144 + z.literal(1.2), 145 + z.literal(1.3), 146 + z.literal(100), 147 + z.literal(200), 148 + z.literal(300), 149 + z.literal(-100), 150 + z.literal(-200), 151 + z.literal(-300), 152 + z.literal(-1.1), 153 + z.literal(-1.2), 154 + z.literal(-1.3) 155 + ]); 139 156 140 157 /** 141 158 * Success=1,Warning=2,Error=3 ··· 145 162 /** 146 163 * This is a simple enum with numbers 147 164 */ 148 - export const zEnumWithExtensions = z.unknown(); 165 + export const zEnumWithExtensions = z.union([ 166 + z.literal(200), 167 + z.literal(400), 168 + z.literal(500) 169 + ]); 149 170 150 - export const zEnumWithXEnumNames = z.unknown(); 171 + export const zEnumWithXEnumNames = z.union([ 172 + z.literal(0), 173 + z.literal(1), 174 + z.literal(2) 175 + ]); 151 176 152 177 /** 153 178 * This is a simple array with numbers ··· 320 345 '500 foo.bar', 321 346 '600 foo&bar' 322 347 ])), 323 - bool: z.optional(z.unknown()) 348 + bool: z.optional(z.literal(true)) 324 349 }); 325 350 326 351 /** ··· 944 969 ]); 945 970 946 971 export const zModelWithNumericEnumUnion = z.object({ 947 - value: z.optional(z.unknown()) 972 + value: z.optional(z.union([ 973 + z.literal(-10), 974 + z.literal(-1), 975 + z.literal(0), 976 + z.literal(1), 977 + z.literal(3), 978 + z.literal(6), 979 + z.literal(12) 980 + ])) 948 981 }); 949 982 950 983 /**
+23 -3
packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/mini/default/zod.gen.ts
··· 103 103 /** 104 104 * This is a simple enum with numbers 105 105 */ 106 - export const zEnumWithNumbers = z.unknown(); 106 + export const zEnumWithNumbers = z.union([ 107 + z.literal(1), 108 + z.literal(2), 109 + z.literal(3), 110 + z.literal(1.1), 111 + z.literal(1.2), 112 + z.literal(1.3), 113 + z.literal(100), 114 + z.literal(200), 115 + z.literal(300), 116 + z.literal(-100), 117 + z.literal(-200), 118 + z.literal(-300), 119 + z.literal(-1.1), 120 + z.literal(-1.2), 121 + z.literal(-1.3) 122 + ]); 107 123 108 124 /** 109 125 * Success=1,Warning=2,Error=3 ··· 113 129 /** 114 130 * This is a simple enum with numbers 115 131 */ 116 - export const zEnumWithExtensions = z.unknown(); 132 + export const zEnumWithExtensions = z.union([ 133 + z.literal(200), 134 + z.literal(400), 135 + z.literal(500) 136 + ]); 117 137 118 138 /** 119 139 * This is a simple array with numbers ··· 234 254 '500 foo.bar', 235 255 '600 foo&bar' 236 256 ])), 237 - bool: z.optional(z.unknown()) 257 + bool: z.optional(z.literal(true)) 238 258 }); 239 259 240 260 /**
+23 -3
packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v3/default/zod.gen.ts
··· 103 103 /** 104 104 * This is a simple enum with numbers 105 105 */ 106 - export const zEnumWithNumbers = z.unknown(); 106 + export const zEnumWithNumbers = z.union([ 107 + z.literal(1), 108 + z.literal(2), 109 + z.literal(3), 110 + z.literal(1.1), 111 + z.literal(1.2), 112 + z.literal(1.3), 113 + z.literal(100), 114 + z.literal(200), 115 + z.literal(300), 116 + z.literal(-100), 117 + z.literal(-200), 118 + z.literal(-300), 119 + z.literal(-1.1), 120 + z.literal(-1.2), 121 + z.literal(-1.3) 122 + ]); 107 123 108 124 /** 109 125 * Success=1,Warning=2,Error=3 ··· 113 129 /** 114 130 * This is a simple enum with numbers 115 131 */ 116 - export const zEnumWithExtensions = z.unknown(); 132 + export const zEnumWithExtensions = z.union([ 133 + z.literal(200), 134 + z.literal(400), 135 + z.literal(500) 136 + ]); 117 137 118 138 /** 119 139 * This is a simple array with numbers ··· 234 254 '500 foo.bar', 235 255 '600 foo&bar' 236 256 ]).optional(), 237 - bool: z.unknown().optional() 257 + bool: z.literal(true).optional() 238 258 }); 239 259 240 260 /**
+23 -3
packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v4/default/zod.gen.ts
··· 103 103 /** 104 104 * This is a simple enum with numbers 105 105 */ 106 - export const zEnumWithNumbers = z.unknown(); 106 + export const zEnumWithNumbers = z.union([ 107 + z.literal(1), 108 + z.literal(2), 109 + z.literal(3), 110 + z.literal(1.1), 111 + z.literal(1.2), 112 + z.literal(1.3), 113 + z.literal(100), 114 + z.literal(200), 115 + z.literal(300), 116 + z.literal(-100), 117 + z.literal(-200), 118 + z.literal(-300), 119 + z.literal(-1.1), 120 + z.literal(-1.2), 121 + z.literal(-1.3) 122 + ]); 107 123 108 124 /** 109 125 * Success=1,Warning=2,Error=3 ··· 113 129 /** 114 130 * This is a simple enum with numbers 115 131 */ 116 - export const zEnumWithExtensions = z.unknown(); 132 + export const zEnumWithExtensions = z.union([ 133 + z.literal(200), 134 + z.literal(400), 135 + z.literal(500) 136 + ]); 117 137 118 138 /** 119 139 * This is a simple array with numbers ··· 234 254 '500 foo.bar', 235 255 '600 foo&bar' 236 256 ])), 237 - bool: z.optional(z.unknown()) 257 + bool: z.optional(z.literal(true)) 238 258 }); 239 259 240 260 /**
+44 -11
packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/default/zod.gen.ts
··· 119 119 'Non-ascii: øæåôöØÆÅÔÖ字符串' 120 120 ]); 121 121 122 - export const zEnumWithReplacedCharacters = z.enum([ 123 - "'Single Quote'", 124 - '"Double Quotes"', 125 - 'øæåôöØÆÅÔÖ字符串', 126 - '' 122 + export const zEnumWithReplacedCharacters = z.union([ 123 + z.literal("'Single Quote'"), 124 + z.literal('"Double Quotes"'), 125 + z.literal('øæåôöØÆÅÔÖ字符串'), 126 + z.literal(3.1), 127 + z.literal('') 127 128 ]); 128 129 129 130 /** 130 131 * This is a simple enum with numbers 131 132 */ 132 - export const zEnumWithNumbers = z.unknown(); 133 + export const zEnumWithNumbers = z.union([ 134 + z.literal(1), 135 + z.literal(2), 136 + z.literal(3), 137 + z.literal(1.1), 138 + z.literal(1.2), 139 + z.literal(1.3), 140 + z.literal(100), 141 + z.literal(200), 142 + z.literal(300), 143 + z.literal(-100), 144 + z.literal(-200), 145 + z.literal(-300), 146 + z.literal(-1.1), 147 + z.literal(-1.2), 148 + z.literal(-1.3) 149 + ]); 133 150 134 151 /** 135 152 * Success=1,Warning=2,Error=3 ··· 139 156 /** 140 157 * This is a simple enum with numbers 141 158 */ 142 - export const zEnumWithExtensions = z.unknown(); 159 + export const zEnumWithExtensions = z.union([ 160 + z.literal(200), 161 + z.literal(400), 162 + z.literal(500) 163 + ]); 143 164 144 - export const zEnumWithXEnumNames = z.unknown(); 165 + export const zEnumWithXEnumNames = z.union([ 166 + z.literal(0), 167 + z.literal(1), 168 + z.literal(2) 169 + ]); 145 170 146 171 /** 147 172 * This is a simple array with numbers ··· 311 336 '500 foo.bar', 312 337 '600 foo&bar' 313 338 ])), 314 - bool: z.optional(z.unknown()) 339 + bool: z.optional(z.literal(true)) 315 340 }); 316 341 317 342 /** ··· 752 777 String: z.optional(z.enum([ 753 778 'String' 754 779 ])), 755 - number: z.optional(z.unknown()), 780 + number: z.optional(z.literal(0)), 756 781 null: z.optional(z.unknown()), 757 782 withType: z.optional(z.enum([ 758 783 'Some string' ··· 938 963 ]); 939 964 940 965 export const zModelWithNumericEnumUnion = z.object({ 941 - value: z.optional(z.unknown()) 966 + value: z.optional(z.union([ 967 + z.literal(-10), 968 + z.literal(-1), 969 + z.literal(0), 970 + z.literal(1), 971 + z.literal(3), 972 + z.literal(6), 973 + z.literal(12) 974 + ])) 942 975 }); 943 976 944 977 /**
+44 -11
packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/default/zod.gen.ts
··· 119 119 'Non-ascii: øæåôöØÆÅÔÖ字符串' 120 120 ]); 121 121 122 - export const zEnumWithReplacedCharacters = z.enum([ 123 - "'Single Quote'", 124 - '"Double Quotes"', 125 - 'øæåôöØÆÅÔÖ字符串', 126 - '' 122 + export const zEnumWithReplacedCharacters = z.union([ 123 + z.literal("'Single Quote'"), 124 + z.literal('"Double Quotes"'), 125 + z.literal('øæåôöØÆÅÔÖ字符串'), 126 + z.literal(3.1), 127 + z.literal('') 127 128 ]); 128 129 129 130 /** 130 131 * This is a simple enum with numbers 131 132 */ 132 - export const zEnumWithNumbers = z.unknown(); 133 + export const zEnumWithNumbers = z.union([ 134 + z.literal(1), 135 + z.literal(2), 136 + z.literal(3), 137 + z.literal(1.1), 138 + z.literal(1.2), 139 + z.literal(1.3), 140 + z.literal(100), 141 + z.literal(200), 142 + z.literal(300), 143 + z.literal(-100), 144 + z.literal(-200), 145 + z.literal(-300), 146 + z.literal(-1.1), 147 + z.literal(-1.2), 148 + z.literal(-1.3) 149 + ]); 133 150 134 151 /** 135 152 * Success=1,Warning=2,Error=3 ··· 139 156 /** 140 157 * This is a simple enum with numbers 141 158 */ 142 - export const zEnumWithExtensions = z.unknown(); 159 + export const zEnumWithExtensions = z.union([ 160 + z.literal(200), 161 + z.literal(400), 162 + z.literal(500) 163 + ]); 143 164 144 - export const zEnumWithXEnumNames = z.unknown(); 165 + export const zEnumWithXEnumNames = z.union([ 166 + z.literal(0), 167 + z.literal(1), 168 + z.literal(2) 169 + ]); 145 170 146 171 /** 147 172 * This is a simple array with numbers ··· 311 336 '500 foo.bar', 312 337 '600 foo&bar' 313 338 ]).optional(), 314 - bool: z.unknown().optional() 339 + bool: z.literal(true).optional() 315 340 }); 316 341 317 342 /** ··· 750 775 String: z.enum([ 751 776 'String' 752 777 ]).optional(), 753 - number: z.unknown().optional(), 778 + number: z.literal(0).optional(), 754 779 null: z.unknown().optional(), 755 780 withType: z.enum([ 756 781 'Some string' ··· 936 961 ]); 937 962 938 963 export const zModelWithNumericEnumUnion = z.object({ 939 - value: z.unknown().optional() 964 + value: z.union([ 965 + z.literal(-10), 966 + z.literal(-1), 967 + z.literal(0), 968 + z.literal(1), 969 + z.literal(3), 970 + z.literal(6), 971 + z.literal(12) 972 + ]).optional() 940 973 }); 941 974 942 975 /**
+44 -11
packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/default/zod.gen.ts
··· 119 119 'Non-ascii: øæåôöØÆÅÔÖ字符串' 120 120 ]); 121 121 122 - export const zEnumWithReplacedCharacters = z.enum([ 123 - "'Single Quote'", 124 - '"Double Quotes"', 125 - 'øæåôöØÆÅÔÖ字符串', 126 - '' 122 + export const zEnumWithReplacedCharacters = z.union([ 123 + z.literal("'Single Quote'"), 124 + z.literal('"Double Quotes"'), 125 + z.literal('øæåôöØÆÅÔÖ字符串'), 126 + z.literal(3.1), 127 + z.literal('') 127 128 ]); 128 129 129 130 /** 130 131 * This is a simple enum with numbers 131 132 */ 132 - export const zEnumWithNumbers = z.unknown(); 133 + export const zEnumWithNumbers = z.union([ 134 + z.literal(1), 135 + z.literal(2), 136 + z.literal(3), 137 + z.literal(1.1), 138 + z.literal(1.2), 139 + z.literal(1.3), 140 + z.literal(100), 141 + z.literal(200), 142 + z.literal(300), 143 + z.literal(-100), 144 + z.literal(-200), 145 + z.literal(-300), 146 + z.literal(-1.1), 147 + z.literal(-1.2), 148 + z.literal(-1.3) 149 + ]); 133 150 134 151 /** 135 152 * Success=1,Warning=2,Error=3 ··· 139 156 /** 140 157 * This is a simple enum with numbers 141 158 */ 142 - export const zEnumWithExtensions = z.unknown(); 159 + export const zEnumWithExtensions = z.union([ 160 + z.literal(200), 161 + z.literal(400), 162 + z.literal(500) 163 + ]); 143 164 144 - export const zEnumWithXEnumNames = z.unknown(); 165 + export const zEnumWithXEnumNames = z.union([ 166 + z.literal(0), 167 + z.literal(1), 168 + z.literal(2) 169 + ]); 145 170 146 171 /** 147 172 * This is a simple array with numbers ··· 311 336 '500 foo.bar', 312 337 '600 foo&bar' 313 338 ])), 314 - bool: z.optional(z.unknown()) 339 + bool: z.optional(z.literal(true)) 315 340 }); 316 341 317 342 /** ··· 752 777 String: z.optional(z.enum([ 753 778 'String' 754 779 ])), 755 - number: z.optional(z.unknown()), 780 + number: z.optional(z.literal(0)), 756 781 null: z.optional(z.unknown()), 757 782 withType: z.optional(z.enum([ 758 783 'Some string' ··· 938 963 ]); 939 964 940 965 export const zModelWithNumericEnumUnion = z.object({ 941 - value: z.optional(z.unknown()) 966 + value: z.optional(z.union([ 967 + z.literal(-10), 968 + z.literal(-1), 969 + z.literal(0), 970 + z.literal(1), 971 + z.literal(3), 972 + z.literal(6), 973 + z.literal(12) 974 + ])) 942 975 }); 943 976 944 977 /**
+43 -10
packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/default/zod.gen.ts
··· 125 125 'Non-ascii: øæåôöØÆÅÔÖ字符串' 126 126 ]); 127 127 128 - export const zEnumWithReplacedCharacters = z.enum([ 129 - "'Single Quote'", 130 - '"Double Quotes"', 131 - 'øæåôöØÆÅÔÖ字符串', 132 - '' 128 + export const zEnumWithReplacedCharacters = z.union([ 129 + z.literal("'Single Quote'"), 130 + z.literal('"Double Quotes"'), 131 + z.literal('øæåôöØÆÅÔÖ字符串'), 132 + z.literal(3.1), 133 + z.literal('') 133 134 ]); 134 135 135 136 /** 136 137 * This is a simple enum with numbers 137 138 */ 138 - export const zEnumWithNumbers = z.unknown(); 139 + export const zEnumWithNumbers = z.union([ 140 + z.literal(1), 141 + z.literal(2), 142 + z.literal(3), 143 + z.literal(1.1), 144 + z.literal(1.2), 145 + z.literal(1.3), 146 + z.literal(100), 147 + z.literal(200), 148 + z.literal(300), 149 + z.literal(-100), 150 + z.literal(-200), 151 + z.literal(-300), 152 + z.literal(-1.1), 153 + z.literal(-1.2), 154 + z.literal(-1.3) 155 + ]); 139 156 140 157 /** 141 158 * Success=1,Warning=2,Error=3 ··· 145 162 /** 146 163 * This is a simple enum with numbers 147 164 */ 148 - export const zEnumWithExtensions = z.unknown(); 165 + export const zEnumWithExtensions = z.union([ 166 + z.literal(200), 167 + z.literal(400), 168 + z.literal(500) 169 + ]); 149 170 150 - export const zEnumWithXEnumNames = z.unknown(); 171 + export const zEnumWithXEnumNames = z.union([ 172 + z.literal(0), 173 + z.literal(1), 174 + z.literal(2) 175 + ]); 151 176 152 177 /** 153 178 * This is a simple array with numbers ··· 320 345 '500 foo.bar', 321 346 '600 foo&bar' 322 347 ])), 323 - bool: z.optional(z.unknown()) 348 + bool: z.optional(z.literal(true)) 324 349 }); 325 350 326 351 /** ··· 944 969 ]); 945 970 946 971 export const zModelWithNumericEnumUnion = z.object({ 947 - value: z.optional(z.unknown()) 972 + value: z.optional(z.union([ 973 + z.literal(-10), 974 + z.literal(-1), 975 + z.literal(0), 976 + z.literal(1), 977 + z.literal(3), 978 + z.literal(6), 979 + z.literal(12) 980 + ])) 948 981 }); 949 982 950 983 /**
+43 -10
packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/default/zod.gen.ts
··· 125 125 'Non-ascii: øæåôöØÆÅÔÖ字符串' 126 126 ]); 127 127 128 - export const zEnumWithReplacedCharacters = z.enum([ 129 - "'Single Quote'", 130 - '"Double Quotes"', 131 - 'øæåôöØÆÅÔÖ字符串', 132 - '' 128 + export const zEnumWithReplacedCharacters = z.union([ 129 + z.literal("'Single Quote'"), 130 + z.literal('"Double Quotes"'), 131 + z.literal('øæåôöØÆÅÔÖ字符串'), 132 + z.literal(3.1), 133 + z.literal('') 133 134 ]); 134 135 135 136 /** 136 137 * This is a simple enum with numbers 137 138 */ 138 - export const zEnumWithNumbers = z.unknown(); 139 + export const zEnumWithNumbers = z.union([ 140 + z.literal(1), 141 + z.literal(2), 142 + z.literal(3), 143 + z.literal(1.1), 144 + z.literal(1.2), 145 + z.literal(1.3), 146 + z.literal(100), 147 + z.literal(200), 148 + z.literal(300), 149 + z.literal(-100), 150 + z.literal(-200), 151 + z.literal(-300), 152 + z.literal(-1.1), 153 + z.literal(-1.2), 154 + z.literal(-1.3) 155 + ]); 139 156 140 157 /** 141 158 * Success=1,Warning=2,Error=3 ··· 145 162 /** 146 163 * This is a simple enum with numbers 147 164 */ 148 - export const zEnumWithExtensions = z.unknown(); 165 + export const zEnumWithExtensions = z.union([ 166 + z.literal(200), 167 + z.literal(400), 168 + z.literal(500) 169 + ]); 149 170 150 - export const zEnumWithXEnumNames = z.unknown(); 171 + export const zEnumWithXEnumNames = z.union([ 172 + z.literal(0), 173 + z.literal(1), 174 + z.literal(2) 175 + ]); 151 176 152 177 /** 153 178 * This is a simple array with numbers ··· 320 345 '500 foo.bar', 321 346 '600 foo&bar' 322 347 ]).optional(), 323 - bool: z.unknown().optional() 348 + bool: z.literal(true).optional() 324 349 }); 325 350 326 351 /** ··· 942 967 ]); 943 968 944 969 export const zModelWithNumericEnumUnion = z.object({ 945 - value: z.unknown().optional() 970 + value: z.union([ 971 + z.literal(-10), 972 + z.literal(-1), 973 + z.literal(0), 974 + z.literal(1), 975 + z.literal(3), 976 + z.literal(6), 977 + z.literal(12) 978 + ]).optional() 946 979 }); 947 980 948 981 /**
+43 -10
packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/default/zod.gen.ts
··· 125 125 'Non-ascii: øæåôöØÆÅÔÖ字符串' 126 126 ]); 127 127 128 - export const zEnumWithReplacedCharacters = z.enum([ 129 - "'Single Quote'", 130 - '"Double Quotes"', 131 - 'øæåôöØÆÅÔÖ字符串', 132 - '' 128 + export const zEnumWithReplacedCharacters = z.union([ 129 + z.literal("'Single Quote'"), 130 + z.literal('"Double Quotes"'), 131 + z.literal('øæåôöØÆÅÔÖ字符串'), 132 + z.literal(3.1), 133 + z.literal('') 133 134 ]); 134 135 135 136 /** 136 137 * This is a simple enum with numbers 137 138 */ 138 - export const zEnumWithNumbers = z.unknown(); 139 + export const zEnumWithNumbers = z.union([ 140 + z.literal(1), 141 + z.literal(2), 142 + z.literal(3), 143 + z.literal(1.1), 144 + z.literal(1.2), 145 + z.literal(1.3), 146 + z.literal(100), 147 + z.literal(200), 148 + z.literal(300), 149 + z.literal(-100), 150 + z.literal(-200), 151 + z.literal(-300), 152 + z.literal(-1.1), 153 + z.literal(-1.2), 154 + z.literal(-1.3) 155 + ]); 139 156 140 157 /** 141 158 * Success=1,Warning=2,Error=3 ··· 145 162 /** 146 163 * This is a simple enum with numbers 147 164 */ 148 - export const zEnumWithExtensions = z.unknown(); 165 + export const zEnumWithExtensions = z.union([ 166 + z.literal(200), 167 + z.literal(400), 168 + z.literal(500) 169 + ]); 149 170 150 - export const zEnumWithXEnumNames = z.unknown(); 171 + export const zEnumWithXEnumNames = z.union([ 172 + z.literal(0), 173 + z.literal(1), 174 + z.literal(2) 175 + ]); 151 176 152 177 /** 153 178 * This is a simple array with numbers ··· 320 345 '500 foo.bar', 321 346 '600 foo&bar' 322 347 ])), 323 - bool: z.optional(z.unknown()) 348 + bool: z.optional(z.literal(true)) 324 349 }); 325 350 326 351 /** ··· 944 969 ]); 945 970 946 971 export const zModelWithNumericEnumUnion = z.object({ 947 - value: z.optional(z.unknown()) 972 + value: z.optional(z.union([ 973 + z.literal(-10), 974 + z.literal(-1), 975 + z.literal(0), 976 + z.literal(1), 977 + z.literal(3), 978 + z.literal(6), 979 + z.literal(12) 980 + ])) 948 981 }); 949 982 950 983 /**
+10
packages/openapi-ts/CHANGELOG.md
··· 1 1 # @hey-api/openapi-ts 2 2 3 + ## 0.84.4 4 + 5 + ### Patch Changes 6 + 7 + - fix(client-ofetch): add missing credentials property support ([#2710](https://github.com/hey-api/openapi-ts/pull/2710)) ([`ba7e6dc`](https://github.com/hey-api/openapi-ts/commit/ba7e6dc1af3a8e64082bd101de6c1cd6e0e8fc17)) by [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent) 8 + 9 + - fix(config): do not override interactive config from CLI if defined in config file ([#2708](https://github.com/hey-api/openapi-ts/pull/2708)) ([`21e9fa0`](https://github.com/hey-api/openapi-ts/commit/21e9fa089d2305714f37c1a16cb3e6f9fedb49b9)) by [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent) 10 + 11 + - fix(zod): correct schemas for numeric and boolean enums ([#2704](https://github.com/hey-api/openapi-ts/pull/2704)) ([`59ea38e`](https://github.com/hey-api/openapi-ts/commit/59ea38ea9e47b515c54e55d169591fe6188990b4)) by [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent) 12 + 3 13 ## 0.84.3 4 14 5 15 ### Patch Changes
-8
packages/openapi-ts/bin/index.cjs
··· 93 93 'useOptions', 94 94 ]); 95 95 96 - const isInteractive = 97 - process.stdin.isTTY && 98 - process.stdout.isTTY && 99 - !process.env.CI && 100 - !process.env.NO_INTERACTIVE && 101 - !process.env.NO_INTERACTION; 102 - userConfig.interactive = isInteractive; 103 - 104 96 if (params.plugins === true) { 105 97 userConfig.plugins = []; 106 98 } else if (params.plugins) {
+1 -1
packages/openapi-ts/package.json
··· 1 1 { 2 2 "name": "@hey-api/openapi-ts", 3 - "version": "0.84.3", 3 + "version": "0.84.4", 4 4 "description": "🚀 The OpenAPI to TypeScript codegen. Generate clients, SDKs, validators, and more.", 5 5 "homepage": "https://heyapi.dev/", 6 6 "repository": {
+111
packages/openapi-ts/src/__tests__/error.test.ts
··· 1 + import { describe, expect, it, vi } from 'vitest'; 2 + 3 + import { shouldReportCrash } from '../error'; 4 + 5 + describe('shouldReportCrash', () => { 6 + it('should return false when isInteractive is false', async () => { 7 + const result = await shouldReportCrash({ 8 + error: new Error('test error'), 9 + isInteractive: false, 10 + }); 11 + expect(result).toBe(false); 12 + }); 13 + 14 + it('should return false when isInteractive is undefined', async () => { 15 + const result = await shouldReportCrash({ 16 + error: new Error('test error'), 17 + isInteractive: undefined, 18 + }); 19 + expect(result).toBe(false); 20 + }); 21 + 22 + it('should not prompt when isInteractive is explicitly false', async () => { 23 + // Mock stdin/stdout to ensure we don't wait for user input 24 + const writeSpy = vi 25 + .spyOn(process.stdout, 'write') 26 + .mockImplementation(() => true); 27 + const setEncodingSpy = vi 28 + .spyOn(process.stdin, 'setEncoding') 29 + .mockImplementation(() => process.stdin as any); 30 + const onceSpy = vi 31 + .spyOn(process.stdin, 'once') 32 + .mockImplementation(() => process.stdin); 33 + 34 + const result = await shouldReportCrash({ 35 + error: new Error('test error'), 36 + isInteractive: false, 37 + }); 38 + 39 + expect(result).toBe(false); 40 + expect(writeSpy).not.toHaveBeenCalled(); 41 + expect(setEncodingSpy).not.toHaveBeenCalled(); 42 + expect(onceSpy).not.toHaveBeenCalled(); 43 + 44 + writeSpy.mockRestore(); 45 + setEncodingSpy.mockRestore(); 46 + onceSpy.mockRestore(); 47 + }); 48 + 49 + it('should prompt when isInteractive is true', async () => { 50 + // Mock stdin/stdout for interactive session 51 + const writeSpy = vi 52 + .spyOn(process.stdout, 'write') 53 + .mockImplementation(() => true); 54 + const setEncodingSpy = vi 55 + .spyOn(process.stdin, 'setEncoding') 56 + .mockImplementation(() => process.stdin as any); 57 + const onceSpy = vi 58 + .spyOn(process.stdin, 'once') 59 + .mockImplementation((_event, callback) => { 60 + // Simulate user typing 'n' 61 + setTimeout(() => { 62 + (callback as any)('n'); 63 + }, 0); 64 + return process.stdin; 65 + }); 66 + 67 + const result = await shouldReportCrash({ 68 + error: new Error('test error'), 69 + isInteractive: true, 70 + }); 71 + 72 + expect(result).toBe(false); // User said 'n' 73 + expect(writeSpy).toHaveBeenCalledWith( 74 + expect.stringContaining('📢 Open a GitHub issue with crash details?'), 75 + ); 76 + 77 + writeSpy.mockRestore(); 78 + setEncodingSpy.mockRestore(); 79 + onceSpy.mockRestore(); 80 + }); 81 + 82 + it('should handle user saying yes to crash report', async () => { 83 + // Mock stdin/stdout for interactive session 84 + const writeSpy = vi 85 + .spyOn(process.stdout, 'write') 86 + .mockImplementation(() => true); 87 + const setEncodingSpy = vi 88 + .spyOn(process.stdin, 'setEncoding') 89 + .mockImplementation(() => process.stdin as any); 90 + const onceSpy = vi 91 + .spyOn(process.stdin, 'once') 92 + .mockImplementation((_event, callback) => { 93 + // Simulate user typing 'y' 94 + setTimeout(() => { 95 + (callback as any)('y'); 96 + }, 0); 97 + return process.stdin; 98 + }); 99 + 100 + const result = await shouldReportCrash({ 101 + error: new Error('test error'), 102 + isInteractive: true, 103 + }); 104 + 105 + expect(result).toBe(true); // User said 'y' 106 + 107 + writeSpy.mockRestore(); 108 + setEncodingSpy.mockRestore(); 109 + onceSpy.mockRestore(); 110 + }); 111 + });
+175
packages/openapi-ts/src/__tests__/interactive.test.ts
··· 1 + import { afterEach, describe, expect, it } from 'vitest'; 2 + 3 + import { detectInteractiveSession, initConfigs } from '../config/init'; 4 + import { mergeConfigs } from '../config/merge'; 5 + 6 + describe('interactive config', () => { 7 + it('should use detectInteractiveSession when not provided', async () => { 8 + const result = await initConfigs({ 9 + input: 'test.json', 10 + output: './test', 11 + }); 12 + 13 + // In test environment, TTY is typically not available, so it should be false 14 + expect(result.results[0]?.config.interactive).toBe(false); 15 + }); 16 + 17 + it('should respect user config when set to true', async () => { 18 + const result = await initConfigs({ 19 + input: 'test.json', 20 + interactive: true, 21 + output: './test', 22 + }); 23 + 24 + expect(result.results[0]?.config.interactive).toBe(true); 25 + }); 26 + 27 + it('should respect user config when set to false', async () => { 28 + const result = await initConfigs({ 29 + input: 'test.json', 30 + interactive: false, 31 + output: './test', 32 + }); 33 + 34 + expect(result.results[0]?.config.interactive).toBe(false); 35 + }); 36 + 37 + it('should allow file config to set interactive when CLI does not provide it', () => { 38 + // This simulates what happens when: 39 + // 1. User has a config file with interactive: false 40 + // 2. CLI doesn't provide interactive (undefined) 41 + // 3. The bug was: bin script would set interactive = isInteractive (true in TTY) 42 + 43 + const fileConfig = { 44 + input: 'test.json', 45 + interactive: false, 46 + output: './test', 47 + }; 48 + 49 + // CLI config without interactive (correct behavior after fix) 50 + const cliConfigWithoutInteractive = { 51 + input: 'test.json', 52 + output: './test', 53 + }; 54 + 55 + // CLI config with interactive set to true (simulating the bug) 56 + const cliConfigWithInteractiveBug = { 57 + input: 'test.json', 58 + interactive: true, 59 + output: './test', // Bug: bin script was setting this even when user didn't provide it 60 + }; 61 + 62 + // After fix: file config's interactive should be preserved 63 + const mergedCorrect = mergeConfigs(fileConfig, cliConfigWithoutInteractive); 64 + expect(mergedCorrect.interactive).toBe(false); 65 + 66 + // Before fix: CLI's auto-detected interactive would override file config 67 + const mergedWithBug = mergeConfigs(fileConfig, cliConfigWithInteractiveBug); 68 + expect(mergedWithBug.interactive).toBe(true); // This was the bug - it overrode the file config 69 + }); 70 + }); 71 + 72 + describe('detectInteractiveSession', () => { 73 + const originalEnv = process.env; 74 + const originalStdin = process.stdin; 75 + const originalStdout = process.stdout; 76 + 77 + afterEach(() => { 78 + process.env = originalEnv; 79 + Object.defineProperty(process, 'stdin', { value: originalStdin }); 80 + Object.defineProperty(process, 'stdout', { value: originalStdout }); 81 + }); 82 + 83 + it('should return false when CI environment variable is set', () => { 84 + process.env = { ...originalEnv, CI: 'true' }; 85 + Object.defineProperty(process.stdin, 'isTTY', { 86 + configurable: true, 87 + value: true, 88 + }); 89 + Object.defineProperty(process.stdout, 'isTTY', { 90 + configurable: true, 91 + value: true, 92 + }); 93 + 94 + expect(detectInteractiveSession()).toBe(false); 95 + }); 96 + 97 + it('should return false when NO_INTERACTIVE environment variable is set', () => { 98 + process.env = { ...originalEnv, NO_INTERACTIVE: '1' }; 99 + Object.defineProperty(process.stdin, 'isTTY', { 100 + configurable: true, 101 + value: true, 102 + }); 103 + Object.defineProperty(process.stdout, 'isTTY', { 104 + configurable: true, 105 + value: true, 106 + }); 107 + 108 + expect(detectInteractiveSession()).toBe(false); 109 + }); 110 + 111 + it('should return false when NO_INTERACTION environment variable is set', () => { 112 + process.env = { ...originalEnv, NO_INTERACTION: '1' }; 113 + Object.defineProperty(process.stdin, 'isTTY', { 114 + configurable: true, 115 + value: true, 116 + }); 117 + Object.defineProperty(process.stdout, 'isTTY', { 118 + configurable: true, 119 + value: true, 120 + }); 121 + 122 + expect(detectInteractiveSession()).toBe(false); 123 + }); 124 + 125 + it('should return false when stdin is not TTY', () => { 126 + process.env = { ...originalEnv }; 127 + delete process.env.CI; 128 + delete process.env.NO_INTERACTIVE; 129 + delete process.env.NO_INTERACTION; 130 + Object.defineProperty(process.stdin, 'isTTY', { 131 + configurable: true, 132 + value: false, 133 + }); 134 + Object.defineProperty(process.stdout, 'isTTY', { 135 + configurable: true, 136 + value: true, 137 + }); 138 + 139 + expect(detectInteractiveSession()).toBe(false); 140 + }); 141 + 142 + it('should return false when stdout is not TTY', () => { 143 + process.env = { ...originalEnv }; 144 + delete process.env.CI; 145 + delete process.env.NO_INTERACTIVE; 146 + delete process.env.NO_INTERACTION; 147 + Object.defineProperty(process.stdin, 'isTTY', { 148 + configurable: true, 149 + value: true, 150 + }); 151 + Object.defineProperty(process.stdout, 'isTTY', { 152 + configurable: true, 153 + value: false, 154 + }); 155 + 156 + expect(detectInteractiveSession()).toBe(false); 157 + }); 158 + 159 + it('should return true when TTY is available and no blocking env vars are set', () => { 160 + process.env = { ...originalEnv }; 161 + delete process.env.CI; 162 + delete process.env.NO_INTERACTIVE; 163 + delete process.env.NO_INTERACTION; 164 + Object.defineProperty(process.stdin, 'isTTY', { 165 + configurable: true, 166 + value: true, 167 + }); 168 + Object.defineProperty(process.stdout, 'isTTY', { 169 + configurable: true, 170 + value: true, 171 + }); 172 + 173 + expect(detectInteractiveSession()).toBe(true); 174 + }); 175 + });
+19 -1
packages/openapi-ts/src/config/init.ts
··· 14 14 import { getPlugins } from './plugins'; 15 15 16 16 /** 17 + * Detect if the current session is interactive based on TTY status and environment variables. 18 + * This is used as a fallback when the user doesn't explicitly set the interactive option. 19 + * @internal 20 + */ 21 + export const detectInteractiveSession = (): boolean => 22 + Boolean( 23 + process.stdin.isTTY && 24 + process.stdout.isTTY && 25 + !process.env.CI && 26 + !process.env.NO_INTERACTIVE && 27 + !process.env.NO_INTERACTION, 28 + ); 29 + 30 + /** 17 31 * @internal 18 32 */ 19 33 export const initConfigs = async ( ··· 59 73 dryRun = false, 60 74 experimentalParser = true, 61 75 exportCore = true, 62 - interactive = false, 63 76 name, 64 77 request, 65 78 useOptions = true, 66 79 } = userConfig; 80 + 81 + const interactive = 82 + userConfig.interactive !== undefined 83 + ? userConfig.interactive 84 + : detectInteractiveSession(); 67 85 68 86 const errors: Array<Error> = []; 69 87
+57 -1
packages/openapi-ts/src/plugins/@hey-api/client-ofetch/__tests__/utils.test.ts
··· 1 1 import { describe, expect, it, vi } from 'vitest'; 2 2 3 3 import type { Auth } from '../../client-core/bundle/auth'; 4 - import { mergeHeaders, setAuthParams } from '../bundle/utils'; 4 + import type { ResolvedRequestOptions } from '../bundle/types'; 5 + import { 6 + buildOfetchOptions, 7 + mergeHeaders, 8 + setAuthParams, 9 + } from '../bundle/utils'; 5 10 6 11 describe('mergeHeaders', () => { 7 12 it('merges plain objects into Headers', () => { ··· 200 205 expect(Object.keys(query).length).toBe(0); 201 206 }); 202 207 }); 208 + 209 + describe('buildOfetchOptions', () => { 210 + it('passes through credentials property when provided', () => { 211 + const opts: ResolvedRequestOptions = { 212 + baseUrl: 'https://api.example.com', 213 + credentials: 'include' as const, 214 + headers: new Headers({ 'Content-Type': 'application/json' }), 215 + method: 'GET', 216 + url: '/test', 217 + }; 218 + 219 + const result = buildOfetchOptions(opts, null, undefined); 220 + 221 + expect(result.credentials).toBe('include'); 222 + }); 223 + 224 + it('passes through undefined credentials when not provided', () => { 225 + const opts: ResolvedRequestOptions = { 226 + baseUrl: 'https://api.example.com', 227 + headers: new Headers({ 'Content-Type': 'application/json' }), 228 + method: 'GET', 229 + url: '/test', 230 + }; 231 + 232 + const result = buildOfetchOptions(opts, null, undefined); 233 + 234 + expect(result.credentials).toBeUndefined(); 235 + }); 236 + 237 + it('passes through different credential values', () => { 238 + const testCases: Array<RequestCredentials> = [ 239 + 'omit', 240 + 'same-origin', 241 + 'include', 242 + ]; 243 + 244 + testCases.forEach((credentialValue) => { 245 + const opts: ResolvedRequestOptions = { 246 + baseUrl: 'https://api.example.com', 247 + credentials: credentialValue, 248 + headers: new Headers({ 'Content-Type': 'application/json' }), 249 + method: 'GET', 250 + url: '/test', 251 + }; 252 + 253 + const result = buildOfetchOptions(opts, null, undefined); 254 + 255 + expect(result.credentials).toBe(credentialValue); 256 + }); 257 + }); 258 + });
+1
packages/openapi-ts/src/plugins/@hey-api/client-ofetch/bundle/utils.ts
··· 320 320 ({ 321 321 agent: opts.agent as OfetchOptions['agent'], 322 322 body, 323 + credentials: opts.credentials as OfetchOptions['credentials'], 323 324 dispatcher: opts.dispatcher as OfetchOptions['dispatcher'], 324 325 headers: opts.headers as Headers, 325 326 ignoreResponseError:
+72 -16
packages/openapi-ts/src/plugins/zod/mini/plugin.ts
··· 195 195 const result: Partial<Omit<ZodSchema, 'typeName'>> = {}; 196 196 197 197 const enumMembers: Array<ts.LiteralExpression> = []; 198 + const literalMembers: Array<ts.CallExpression> = []; 198 199 199 200 let isNullable = false; 201 + let allStrings = true; 200 202 201 203 for (const item of schema.items ?? []) { 202 - // Zod supports only string enums 204 + // Zod supports string, number, and boolean enums 203 205 if (item.type === 'string' && typeof item.const === 'string') { 204 - enumMembers.push( 205 - tsc.stringLiteral({ 206 - text: item.const, 206 + const stringLiteral = tsc.stringLiteral({ 207 + text: item.const, 208 + }); 209 + enumMembers.push(stringLiteral); 210 + literalMembers.push( 211 + tsc.callExpression({ 212 + functionName: tsc.propertyAccessExpression({ 213 + expression: zSymbol.placeholder, 214 + name: identifiers.literal, 215 + }), 216 + parameters: [stringLiteral], 217 + }), 218 + ); 219 + } else if ( 220 + (item.type === 'number' || item.type === 'integer') && 221 + typeof item.const === 'number' 222 + ) { 223 + allStrings = false; 224 + const numberLiteral = tsc.ots.number(item.const); 225 + literalMembers.push( 226 + tsc.callExpression({ 227 + functionName: tsc.propertyAccessExpression({ 228 + expression: zSymbol.placeholder, 229 + name: identifiers.literal, 230 + }), 231 + parameters: [numberLiteral], 232 + }), 233 + ); 234 + } else if (item.type === 'boolean' && typeof item.const === 'boolean') { 235 + allStrings = false; 236 + const booleanLiteral = tsc.ots.boolean(item.const); 237 + literalMembers.push( 238 + tsc.callExpression({ 239 + functionName: tsc.propertyAccessExpression({ 240 + expression: zSymbol.placeholder, 241 + name: identifiers.literal, 242 + }), 243 + parameters: [booleanLiteral], 207 244 }), 208 245 ); 209 246 } else if (item.type === 'null' || item.const === null) { ··· 211 248 } 212 249 } 213 250 214 - if (!enumMembers.length) { 251 + if (!literalMembers.length) { 215 252 return unknownTypeToZodSchema({ 216 253 plugin, 217 254 schema: { ··· 220 257 }); 221 258 } 222 259 223 - result.expression = tsc.callExpression({ 224 - functionName: tsc.propertyAccessExpression({ 225 - expression: zSymbol.placeholder, 226 - name: identifiers.enum, 227 - }), 228 - parameters: [ 229 - tsc.arrayLiteralExpression({ 230 - elements: enumMembers, 231 - multiLine: false, 260 + // Use z.enum() for pure string enums, z.union() for mixed or non-string types 261 + if (allStrings && enumMembers.length > 0) { 262 + result.expression = tsc.callExpression({ 263 + functionName: tsc.propertyAccessExpression({ 264 + expression: zSymbol.placeholder, 265 + name: identifiers.enum, 232 266 }), 233 - ], 234 - }); 267 + parameters: [ 268 + tsc.arrayLiteralExpression({ 269 + elements: enumMembers, 270 + multiLine: false, 271 + }), 272 + ], 273 + }); 274 + } else if (literalMembers.length === 1) { 275 + // For single-member unions, use the member directly instead of wrapping in z.union() 276 + result.expression = literalMembers[0]; 277 + } else { 278 + result.expression = tsc.callExpression({ 279 + functionName: tsc.propertyAccessExpression({ 280 + expression: zSymbol.placeholder, 281 + name: identifiers.union, 282 + }), 283 + parameters: [ 284 + tsc.arrayLiteralExpression({ 285 + elements: literalMembers, 286 + multiLine: literalMembers.length > 3, 287 + }), 288 + ], 289 + }); 290 + } 235 291 236 292 if (isNullable) { 237 293 result.expression = tsc.callExpression({
+73 -16
packages/openapi-ts/src/plugins/zod/v3/plugin.ts
··· 179 179 ); 180 180 181 181 const enumMembers: Array<ts.LiteralExpression> = []; 182 + const literalMembers: Array<ts.CallExpression> = []; 182 183 183 184 let isNullable = false; 185 + let allStrings = true; 184 186 185 187 for (const item of schema.items ?? []) { 186 - // Zod supports only string enums 188 + // Zod supports string, number, and boolean enums 187 189 if (item.type === 'string' && typeof item.const === 'string') { 188 - enumMembers.push( 189 - tsc.stringLiteral({ 190 - text: item.const, 190 + const stringLiteral = tsc.stringLiteral({ 191 + text: item.const, 192 + }); 193 + enumMembers.push(stringLiteral); 194 + literalMembers.push( 195 + tsc.callExpression({ 196 + functionName: tsc.propertyAccessExpression({ 197 + expression: zSymbol.placeholder, 198 + name: identifiers.literal, 199 + }), 200 + parameters: [stringLiteral], 201 + }), 202 + ); 203 + } else if ( 204 + (item.type === 'number' || item.type === 'integer') && 205 + typeof item.const === 'number' 206 + ) { 207 + allStrings = false; 208 + const numberLiteral = tsc.ots.number(item.const); 209 + literalMembers.push( 210 + tsc.callExpression({ 211 + functionName: tsc.propertyAccessExpression({ 212 + expression: zSymbol.placeholder, 213 + name: identifiers.literal, 214 + }), 215 + parameters: [numberLiteral], 216 + }), 217 + ); 218 + } else if (item.type === 'boolean' && typeof item.const === 'boolean') { 219 + allStrings = false; 220 + const booleanLiteral = tsc.ots.boolean(item.const); 221 + literalMembers.push( 222 + tsc.callExpression({ 223 + functionName: tsc.propertyAccessExpression({ 224 + expression: zSymbol.placeholder, 225 + name: identifiers.literal, 226 + }), 227 + parameters: [booleanLiteral], 191 228 }), 192 229 ); 193 230 } else if (item.type === 'null' || item.const === null) { ··· 195 232 } 196 233 } 197 234 198 - if (!enumMembers.length) { 235 + if (!literalMembers.length) { 199 236 return unknownTypeToZodSchema({ 200 237 plugin, 201 238 schema: { ··· 204 241 }); 205 242 } 206 243 207 - let enumExpression = tsc.callExpression({ 208 - functionName: tsc.propertyAccessExpression({ 209 - expression: zSymbol.placeholder, 210 - name: identifiers.enum, 211 - }), 212 - parameters: [ 213 - tsc.arrayLiteralExpression({ 214 - elements: enumMembers, 215 - multiLine: false, 244 + // Use z.enum() for pure string enums, z.union() for mixed or non-string types 245 + let enumExpression: ts.CallExpression; 246 + if (allStrings && enumMembers.length > 0) { 247 + enumExpression = tsc.callExpression({ 248 + functionName: tsc.propertyAccessExpression({ 249 + expression: zSymbol.placeholder, 250 + name: identifiers.enum, 216 251 }), 217 - ], 218 - }); 252 + parameters: [ 253 + tsc.arrayLiteralExpression({ 254 + elements: enumMembers, 255 + multiLine: false, 256 + }), 257 + ], 258 + }); 259 + } else if (literalMembers.length === 1) { 260 + // For single-member unions, use the member directly instead of wrapping in z.union() 261 + enumExpression = literalMembers[0]!; 262 + } else { 263 + enumExpression = tsc.callExpression({ 264 + functionName: tsc.propertyAccessExpression({ 265 + expression: zSymbol.placeholder, 266 + name: identifiers.union, 267 + }), 268 + parameters: [ 269 + tsc.arrayLiteralExpression({ 270 + elements: literalMembers, 271 + multiLine: literalMembers.length > 3, 272 + }), 273 + ], 274 + }); 275 + } 219 276 220 277 if (isNullable) { 221 278 enumExpression = tsc.callExpression({
+76 -20
packages/openapi-ts/src/plugins/zod/v4/plugin.ts
··· 172 172 }): Omit<ZodSchema, 'typeName'> => { 173 173 const result: Partial<Omit<ZodSchema, 'typeName'>> = {}; 174 174 175 + const zSymbol = plugin.referenceSymbol( 176 + plugin.api.getSelector('import', 'zod'), 177 + ); 178 + 175 179 const enumMembers: Array<ts.LiteralExpression> = []; 180 + const literalMembers: Array<ts.CallExpression> = []; 176 181 177 182 let isNullable = false; 183 + let allStrings = true; 178 184 179 185 for (const item of schema.items ?? []) { 180 - // Zod supports only string enums 186 + // Zod supports string, number, and boolean enums 181 187 if (item.type === 'string' && typeof item.const === 'string') { 182 - enumMembers.push( 183 - tsc.stringLiteral({ 184 - text: item.const, 188 + const stringLiteral = tsc.stringLiteral({ 189 + text: item.const, 190 + }); 191 + enumMembers.push(stringLiteral); 192 + literalMembers.push( 193 + tsc.callExpression({ 194 + functionName: tsc.propertyAccessExpression({ 195 + expression: zSymbol.placeholder, 196 + name: identifiers.literal, 197 + }), 198 + parameters: [stringLiteral], 199 + }), 200 + ); 201 + } else if ( 202 + (item.type === 'number' || item.type === 'integer') && 203 + typeof item.const === 'number' 204 + ) { 205 + allStrings = false; 206 + const numberLiteral = tsc.ots.number(item.const); 207 + literalMembers.push( 208 + tsc.callExpression({ 209 + functionName: tsc.propertyAccessExpression({ 210 + expression: zSymbol.placeholder, 211 + name: identifiers.literal, 212 + }), 213 + parameters: [numberLiteral], 214 + }), 215 + ); 216 + } else if (item.type === 'boolean' && typeof item.const === 'boolean') { 217 + allStrings = false; 218 + const booleanLiteral = tsc.ots.boolean(item.const); 219 + literalMembers.push( 220 + tsc.callExpression({ 221 + functionName: tsc.propertyAccessExpression({ 222 + expression: zSymbol.placeholder, 223 + name: identifiers.literal, 224 + }), 225 + parameters: [booleanLiteral], 185 226 }), 186 227 ); 187 228 } else if (item.type === 'null' || item.const === null) { ··· 189 230 } 190 231 } 191 232 192 - if (!enumMembers.length) { 233 + if (!literalMembers.length) { 193 234 return unknownTypeToZodSchema({ 194 235 plugin, 195 236 schema: { ··· 198 239 }); 199 240 } 200 241 201 - const zSymbol = plugin.referenceSymbol( 202 - plugin.api.getSelector('import', 'zod'), 203 - ); 204 - 205 - result.expression = tsc.callExpression({ 206 - functionName: tsc.propertyAccessExpression({ 207 - expression: zSymbol.placeholder, 208 - name: identifiers.enum, 209 - }), 210 - parameters: [ 211 - tsc.arrayLiteralExpression({ 212 - elements: enumMembers, 213 - multiLine: false, 242 + // Use z.enum() for pure string enums, z.union() for mixed or non-string types 243 + if (allStrings && enumMembers.length > 0) { 244 + result.expression = tsc.callExpression({ 245 + functionName: tsc.propertyAccessExpression({ 246 + expression: zSymbol.placeholder, 247 + name: identifiers.enum, 214 248 }), 215 - ], 216 - }); 249 + parameters: [ 250 + tsc.arrayLiteralExpression({ 251 + elements: enumMembers, 252 + multiLine: false, 253 + }), 254 + ], 255 + }); 256 + } else if (literalMembers.length === 1) { 257 + // For single-member unions, use the member directly instead of wrapping in z.union() 258 + result.expression = literalMembers[0]; 259 + } else { 260 + result.expression = tsc.callExpression({ 261 + functionName: tsc.propertyAccessExpression({ 262 + expression: zSymbol.placeholder, 263 + name: identifiers.union, 264 + }), 265 + parameters: [ 266 + tsc.arrayLiteralExpression({ 267 + elements: literalMembers, 268 + multiLine: literalMembers.length > 3, 269 + }), 270 + ], 271 + }); 272 + } 217 273 218 274 if (isNullable) { 219 275 result.expression = tsc.callExpression({
+308 -50
pnpm-lock.yaml
··· 1235 1235 version: 1.7.4 1236 1236 nuxt: 1237 1237 specifier: '>=3.0.0' 1238 - 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.5.1))(ioredis@5.7.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.2)(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)) 1238 + 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.5.1))(ioredis@5.7.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.8.3)(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)) 1239 1239 vue: 1240 1240 specifier: '>=3.5.13' 1241 - version: 3.5.13(typescript@5.9.2) 1241 + version: 3.5.13(typescript@5.8.3) 1242 1242 devDependencies: 1243 1243 '@config/vite-base': 1244 1244 specifier: workspace:* ··· 1248 1248 version: link:../openapi-ts 1249 1249 '@nuxt/module-builder': 1250 1250 specifier: 0.8.4 1251 - version: 0.8.4(@nuxt/kit@3.15.4(magicast@0.3.5))(nuxi@3.28.0)(sass@1.85.0)(typescript@5.9.2) 1251 + version: 0.8.4(@nuxt/kit@3.15.4(magicast@0.3.5))(nuxi@3.28.0)(sass@1.85.0)(typescript@5.8.3) 1252 1252 '@nuxt/schema': 1253 1253 specifier: 3.16.2 1254 1254 version: 3.16.2 1255 1255 '@nuxt/test-utils': 1256 1256 specifier: 3.17.2 1257 - version: 3.17.2(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.5)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(yaml@2.8.0) 1257 + version: 3.17.2(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.5)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(yaml@2.8.0) 1258 1258 vite: 1259 1259 specifier: 7.1.2 1260 1260 version: 7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0) ··· 1345 1345 version: 3.3.2 1346 1346 nuxt: 1347 1347 specifier: 3.14.1592 1348 - 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.5.1))(ioredis@5.7.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.0)(sass@1.85.0)(terser@5.43.1)(typescript@5.8.3)(vite@7.1.5(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)) 1348 + 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.5.1))(ioredis@5.7.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.0)(sass@1.85.0)(terser@5.43.1)(typescript@5.8.3)(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)) 1349 1349 ofetch: 1350 1350 specifier: 1.4.1 1351 1351 version: 1.4.1 ··· 1422 1422 specifier: workspace:* 1423 1423 version: link:../../openapi-ts 1424 1424 '@pinia/colada': 1425 - specifier: 0.17.5 1426 - version: 0.17.5(pinia@3.0.3(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)) 1425 + specifier: 0.17.6 1426 + version: 0.17.6(pinia@3.0.3(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)) 1427 1427 '@tanstack/angular-query-experimental': 1428 1428 specifier: 5.73.3 1429 1429 version: 5.73.3(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.1)(zone.js@0.15.1))(rxjs@7.8.1))(@angular/core@19.2.15(rxjs@7.8.1)(zone.js@0.15.1)) ··· 4758 4758 pinia: ^2.2.6 || ^3.0.0 4759 4759 vue: ^3.5.17 4760 4760 4761 + '@pinia/colada@0.17.6': 4762 + resolution: {integrity: sha512-odayx9xVMUgC8ZMU/hwqODoboHnSWigp7VsbKGHKrNl9yHnljmxgJMwm1vtF/KIBSd2vUBigmN3maFqcC48/Rg==} 4763 + peerDependencies: 4764 + pinia: ^2.2.6 || ^3.0.0 4765 + vue: ^3.5.17 4766 + 4761 4767 '@pkgjs/parseargs@0.11.0': 4762 4768 resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 4763 4769 engines: {node: '>=14'} ··· 6634 6640 6635 6641 '@vue/devtools-api@8.0.1': 6636 6642 resolution: {integrity: sha512-YBvjfpM7LEp5+b7ZDm4+mFrC+TgGjUmN8ff9lZcbHQ1MKhmftT/urCTZP0y1j26YQWr25l9TPaEbNLbILRiGoQ==} 6643 + 6644 + '@vue/devtools-api@8.0.2': 6645 + resolution: {integrity: sha512-RdwsaYoSTumwZ7XOt5yIPP1/T4O0bTs+c5XaEjmUB6f9x+FvDSL9AekxW1vuhK1lmA9TfewpXVt2r5LIax3LHw==} 6637 6646 6638 6647 '@vue/devtools-core@7.6.8': 6639 6648 resolution: {integrity: sha512-8X4roysTwzQ94o7IobjVcOd1aZF5iunikrMrHPI2uUdigZCi2kFTQc7ffYiFiTNaLElCpjOhCnM7bo7aK1yU7A==} ··· 17723 17732 17724 17733 '@nuxt/devalue@2.0.2': {} 17725 17734 17735 + '@nuxt/devtools-kit@1.7.0(magicast@0.3.5)(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1))': 17736 + dependencies: 17737 + '@nuxt/kit': 3.15.4(magicast@0.3.5) 17738 + '@nuxt/schema': 3.16.2 17739 + execa: 7.2.0 17740 + vite: 5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1) 17741 + transitivePeerDependencies: 17742 + - magicast 17743 + - supports-color 17744 + 17726 17745 '@nuxt/devtools-kit@1.7.0(magicast@0.3.5)(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))': 17727 17746 dependencies: 17728 17747 '@nuxt/kit': 3.15.4(magicast@0.3.5) ··· 17756 17775 rc9: 2.1.2 17757 17776 semver: 7.7.2 17758 17777 17759 - '@nuxt/devtools@1.7.0(rollup@3.29.5)(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.13(typescript@5.9.2))': 17778 + '@nuxt/devtools@1.7.0(rollup@3.29.5)(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3))': 17760 17779 dependencies: 17761 17780 '@antfu/utils': 0.7.10 17762 17781 '@nuxt/devtools-kit': 1.7.0(magicast@0.3.5)(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)) 17763 17782 '@nuxt/devtools-wizard': 1.7.0 17764 17783 '@nuxt/kit': 3.15.4(magicast@0.3.5) 17765 - '@vue/devtools-core': 7.6.8(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.13(typescript@5.9.2)) 17784 + '@vue/devtools-core': 7.6.8(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3)) 17766 17785 '@vue/devtools-kit': 7.6.8 17767 17786 birpc: 0.2.19 17768 17787 consola: 3.4.2 ··· 17794 17813 vite: 7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0) 17795 17814 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.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)) 17796 17815 vite-plugin-vue-inspector: 5.3.2(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)) 17816 + which: 3.0.1 17817 + ws: 8.18.3 17818 + transitivePeerDependencies: 17819 + - bufferutil 17820 + - rollup 17821 + - supports-color 17822 + - utf-8-validate 17823 + - vue 17824 + 17825 + '@nuxt/devtools@1.7.0(rollup@4.50.0)(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1))(vue@3.5.13(typescript@5.8.3))': 17826 + dependencies: 17827 + '@antfu/utils': 0.7.10 17828 + '@nuxt/devtools-kit': 1.7.0(magicast@0.3.5)(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)) 17829 + '@nuxt/devtools-wizard': 1.7.0 17830 + '@nuxt/kit': 3.15.4(magicast@0.3.5) 17831 + '@vue/devtools-core': 7.6.8(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1))(vue@3.5.13(typescript@5.8.3)) 17832 + '@vue/devtools-kit': 7.6.8 17833 + birpc: 0.2.19 17834 + consola: 3.4.2 17835 + cronstrue: 2.59.0 17836 + destr: 2.0.5 17837 + error-stack-parser-es: 0.1.5 17838 + execa: 7.2.0 17839 + fast-npm-meta: 0.2.2 17840 + flatted: 3.3.3 17841 + get-port-please: 3.2.0 17842 + hookable: 5.5.3 17843 + image-meta: 0.2.1 17844 + is-installed-globally: 1.0.0 17845 + launch-editor: 2.11.1 17846 + local-pkg: 0.5.1 17847 + magicast: 0.3.5 17848 + nypm: 0.4.1 17849 + ohash: 1.1.6 17850 + pathe: 1.1.2 17851 + perfect-debounce: 1.0.0 17852 + pkg-types: 1.3.1 17853 + rc9: 2.1.2 17854 + scule: 1.3.0 17855 + semver: 7.7.2 17856 + simple-git: 3.28.0 17857 + sirv: 3.0.1 17858 + tinyglobby: 0.2.10 17859 + unimport: 3.14.6(rollup@4.50.0) 17860 + vite: 5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1) 17861 + vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.50.0)(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)) 17862 + vite-plugin-vue-inspector: 5.3.2(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)) 17797 17863 which: 3.0.1 17798 17864 ws: 8.18.3 17799 17865 transitivePeerDependencies: ··· 18004 18070 transitivePeerDependencies: 18005 18071 - magicast 18006 18072 18007 - '@nuxt/module-builder@0.8.4(@nuxt/kit@3.15.4(magicast@0.3.5))(nuxi@3.28.0)(sass@1.85.0)(typescript@5.9.2)': 18073 + '@nuxt/module-builder@0.8.4(@nuxt/kit@3.15.4(magicast@0.3.5))(nuxi@3.28.0)(sass@1.85.0)(typescript@5.8.3)': 18008 18074 dependencies: 18009 18075 '@nuxt/kit': 3.15.4(magicast@0.3.5) 18010 18076 citty: 0.1.6 ··· 18015 18081 nuxi: 3.28.0 18016 18082 pathe: 1.1.2 18017 18083 pkg-types: 1.3.1 18018 - tsconfck: 3.1.6(typescript@5.9.2) 18019 - unbuild: 2.0.0(sass@1.85.0)(typescript@5.9.2) 18084 + tsconfck: 3.1.6(typescript@5.8.3) 18085 + unbuild: 2.0.0(sass@1.85.0)(typescript@5.8.3) 18020 18086 transitivePeerDependencies: 18021 18087 - sass 18022 18088 - supports-color ··· 18088 18154 - magicast 18089 18155 - supports-color 18090 18156 18091 - '@nuxt/test-utils@3.17.2(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.5)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(yaml@2.8.0)': 18157 + '@nuxt/test-utils@3.17.2(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.5)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(yaml@2.8.0)': 18092 18158 dependencies: 18093 18159 '@nuxt/kit': 3.18.1(magicast@0.3.5) 18094 18160 '@nuxt/schema': 3.16.2 ··· 18114 18180 ufo: 1.6.1 18115 18181 unplugin: 2.3.10 18116 18182 vite: 6.3.5(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0) 18117 - vitest-environment-nuxt: 1.0.1(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.5)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(yaml@2.8.0) 18118 - vue: 3.5.13(typescript@5.9.2) 18183 + vitest-environment-nuxt: 1.0.1(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.5)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(yaml@2.8.0) 18184 + vue: 3.5.13(typescript@5.8.3) 18119 18185 optionalDependencies: 18120 18186 '@vue/test-utils': 2.4.6 18121 18187 jsdom: 23.0.0 ··· 18135 18201 - typescript 18136 18202 - yaml 18137 18203 18138 - '@nuxt/vite-builder@3.14.1592(@types/node@22.10.5)(eslint@9.17.0(jiti@2.5.1))(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2))': 18204 + '@nuxt/vite-builder@3.14.1592(@types/node@22.10.5)(eslint@9.17.0(jiti@2.5.1))(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3))': 18139 18205 dependencies: 18140 18206 '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@3.29.5) 18141 18207 '@rollup/plugin-replace': 6.0.2(rollup@3.29.5) 18142 - '@vitejs/plugin-vue': 5.2.1(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1))(vue@3.5.13(typescript@5.9.2)) 18143 - '@vitejs/plugin-vue-jsx': 4.1.1(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1))(vue@3.5.13(typescript@5.9.2)) 18208 + '@vitejs/plugin-vue': 5.2.1(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1))(vue@3.5.13(typescript@5.8.3)) 18209 + '@vitejs/plugin-vue-jsx': 4.1.1(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1))(vue@3.5.13(typescript@5.8.3)) 18144 18210 autoprefixer: 10.4.20(postcss@8.5.6) 18145 18211 clear: 0.1.0 18146 18212 consola: 3.4.2 ··· 18169 18235 unplugin: 1.16.1 18170 18236 vite: 5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1) 18171 18237 vite-node: 2.1.9(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1) 18172 - vite-plugin-checker: 0.8.0(eslint@9.17.0(jiti@2.5.1))(optionator@0.9.4)(typescript@5.9.2)(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)) 18173 - vue: 3.5.13(typescript@5.9.2) 18238 + vite-plugin-checker: 0.8.0(eslint@9.17.0(jiti@2.5.1))(optionator@0.9.4)(typescript@5.8.3)(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)) 18239 + vue: 3.5.13(typescript@5.8.3) 18174 18240 vue-bundle-renderer: 2.1.2 18175 18241 transitivePeerDependencies: 18176 18242 - '@biomejs/biome' ··· 18387 18453 '@pinia/colada@0.17.5(pinia@3.0.3(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3))': 18388 18454 dependencies: 18389 18455 '@vue/devtools-api': 8.0.1 18456 + pinia: 3.0.3(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3)) 18457 + vue: 3.5.13(typescript@5.8.3) 18458 + 18459 + '@pinia/colada@0.17.6(pinia@3.0.3(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3))': 18460 + dependencies: 18461 + '@vue/devtools-api': 8.0.2 18390 18462 pinia: 3.0.3(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3)) 18391 18463 vue: 3.5.13(typescript@5.8.3) 18392 18464 ··· 20490 20562 dependencies: 20491 20563 '@vue/devtools-kit': 8.0.1 20492 20564 20565 + '@vue/devtools-api@8.0.2': 20566 + dependencies: 20567 + '@vue/devtools-kit': 8.0.2 20568 + 20569 + '@vue/devtools-core@7.6.8(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1))(vue@3.5.13(typescript@5.8.3))': 20570 + dependencies: 20571 + '@vue/devtools-kit': 7.7.7 20572 + '@vue/devtools-shared': 7.7.7 20573 + mitt: 3.0.1 20574 + nanoid: 5.1.5 20575 + pathe: 1.1.2 20576 + vite-hot-client: 0.2.4(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)) 20577 + vue: 3.5.13(typescript@5.8.3) 20578 + transitivePeerDependencies: 20579 + - vite 20580 + 20581 + '@vue/devtools-core@7.6.8(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3))': 20582 + dependencies: 20583 + '@vue/devtools-kit': 7.7.7 20584 + '@vue/devtools-shared': 7.7.7 20585 + mitt: 3.0.1 20586 + nanoid: 5.1.5 20587 + pathe: 1.1.2 20588 + vite-hot-client: 0.2.4(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)) 20589 + vue: 3.5.13(typescript@5.8.3) 20590 + transitivePeerDependencies: 20591 + - vite 20592 + 20493 20593 '@vue/devtools-core@7.6.8(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.13(typescript@5.9.2))': 20494 20594 dependencies: 20495 20595 '@vue/devtools-kit': 7.7.7 ··· 22533 22633 '@typescript-eslint/parser': 8.29.1(eslint@9.17.0(jiti@2.5.1))(typescript@5.8.3) 22534 22634 eslint: 9.17.0(jiti@2.5.1) 22535 22635 eslint-import-resolver-node: 0.3.9 22536 - 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.5.1))(typescript@5.8.3))(eslint@9.17.0(jiti@2.5.1)))(eslint@9.17.0(jiti@2.5.1)) 22537 - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.5.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.5.1))(typescript@5.8.3))(eslint@9.17.0(jiti@2.5.1)))(eslint@9.17.0(jiti@2.5.1)))(eslint@9.17.0(jiti@2.5.1)) 22636 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.17.0(jiti@2.5.1)) 22637 + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.17.0(jiti@2.5.1)) 22538 22638 eslint-plugin-jsx-a11y: 6.10.2(eslint@9.17.0(jiti@2.5.1)) 22539 22639 eslint-plugin-react: 7.37.5(eslint@9.17.0(jiti@2.5.1)) 22540 22640 eslint-plugin-react-hooks: 5.2.0(eslint@9.17.0(jiti@2.5.1)) ··· 22557 22657 transitivePeerDependencies: 22558 22658 - supports-color 22559 22659 22560 - 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.5.1))(typescript@5.8.3))(eslint@9.17.0(jiti@2.5.1)))(eslint@9.17.0(jiti@2.5.1)): 22660 + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.17.0(jiti@2.5.1)): 22561 22661 dependencies: 22562 22662 '@nolyfill/is-core-module': 1.0.39 22563 22663 debug: 4.4.1 ··· 22568 22668 tinyglobby: 0.2.14 22569 22669 unrs-resolver: 1.11.1 22570 22670 optionalDependencies: 22571 - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.5.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.5.1))(typescript@5.8.3))(eslint@9.17.0(jiti@2.5.1)))(eslint@9.17.0(jiti@2.5.1)))(eslint@9.17.0(jiti@2.5.1)) 22671 + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.17.0(jiti@2.5.1)) 22572 22672 transitivePeerDependencies: 22573 22673 - supports-color 22574 22674 22575 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.5.1))(typescript@5.8.3))(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.5.1))(typescript@5.8.3))(eslint@9.17.0(jiti@2.5.1)))(eslint@9.17.0(jiti@2.5.1)))(eslint@9.17.0(jiti@2.5.1)): 22675 + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.17.0(jiti@2.5.1)): 22576 22676 dependencies: 22577 22677 debug: 3.2.7 22578 22678 optionalDependencies: 22579 22679 '@typescript-eslint/parser': 8.29.1(eslint@9.17.0(jiti@2.5.1))(typescript@5.8.3) 22580 22680 eslint: 9.17.0(jiti@2.5.1) 22581 22681 eslint-import-resolver-node: 0.3.9 22582 - 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.5.1))(typescript@5.8.3))(eslint@9.17.0(jiti@2.5.1)))(eslint@9.17.0(jiti@2.5.1)) 22682 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.17.0(jiti@2.5.1)) 22583 22683 transitivePeerDependencies: 22584 22684 - supports-color 22585 22685 22586 - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.5.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.5.1))(typescript@5.8.3))(eslint@9.17.0(jiti@2.5.1)))(eslint@9.17.0(jiti@2.5.1)))(eslint@9.17.0(jiti@2.5.1)): 22686 + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.17.0(jiti@2.5.1)): 22587 22687 dependencies: 22588 22688 '@rtsao/scc': 1.1.0 22589 22689 array-includes: 3.1.9 ··· 22594 22694 doctrine: 2.1.0 22595 22695 eslint: 9.17.0(jiti@2.5.1) 22596 22696 eslint-import-resolver-node: 0.3.9 22597 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.5.1))(typescript@5.8.3))(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.5.1))(typescript@5.8.3))(eslint@9.17.0(jiti@2.5.1)))(eslint@9.17.0(jiti@2.5.1)))(eslint@9.17.0(jiti@2.5.1)) 22697 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.17.0(jiti@2.5.1)) 22598 22698 hasown: 2.0.2 22599 22699 is-core-module: 2.16.1 22600 22700 is-glob: 4.0.3 ··· 24954 25054 24955 25055 mkdirp@3.0.1: {} 24956 25056 24957 - mkdist@1.6.0(sass@1.85.0)(typescript@5.9.2): 25057 + mkdist@1.6.0(sass@1.85.0)(typescript@5.8.3): 24958 25058 dependencies: 24959 25059 autoprefixer: 10.4.20(postcss@8.5.6) 24960 25060 citty: 0.1.6 ··· 24971 25071 tinyglobby: 0.2.14 24972 25072 optionalDependencies: 24973 25073 sass: 1.85.0 24974 - typescript: 5.9.2 25074 + typescript: 5.8.3 24975 25075 24976 25076 mlly@1.7.4: 24977 25077 dependencies: ··· 25345 25445 25346 25446 nuxi@3.28.0: {} 25347 25447 25348 - 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.5.1))(ioredis@5.7.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.2)(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)): 25448 + 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.5.1))(ioredis@5.7.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.8.3)(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)): 25349 25449 dependencies: 25350 25450 '@nuxt/devalue': 2.0.2 25351 - '@nuxt/devtools': 1.7.0(rollup@3.29.5)(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.13(typescript@5.9.2)) 25451 + '@nuxt/devtools': 1.7.0(rollup@3.29.5)(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3)) 25352 25452 '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@3.29.5) 25353 25453 '@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@3.29.5) 25354 25454 '@nuxt/telemetry': 2.6.6(magicast@0.3.5) 25355 - '@nuxt/vite-builder': 3.14.1592(@types/node@22.10.5)(eslint@9.17.0(jiti@2.5.1))(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)) 25455 + '@nuxt/vite-builder': 3.14.1592(@types/node@22.10.5)(eslint@9.17.0(jiti@2.5.1))(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3)) 25356 25456 '@unhead/dom': 1.11.20 25357 25457 '@unhead/shared': 1.11.20 25358 25458 '@unhead/ssr': 1.11.20 25359 - '@unhead/vue': 1.11.20(vue@3.5.13(typescript@5.9.2)) 25459 + '@unhead/vue': 1.11.20(vue@3.5.13(typescript@5.8.3)) 25360 25460 '@vue/shared': 3.5.20 25361 25461 acorn: 8.14.0 25362 25462 c12: 2.0.1(magicast@0.3.5) ··· 25404 25504 unhead: 1.11.20 25405 25505 unimport: 3.14.6(rollup@3.29.5) 25406 25506 unplugin: 1.16.1 25407 - unplugin-vue-router: 0.10.9(rollup@3.29.5)(vue-router@4.5.0(vue@3.5.13(typescript@5.9.2)))(vue@3.5.13(typescript@5.9.2)) 25507 + unplugin-vue-router: 0.10.9(rollup@3.29.5)(vue-router@4.5.0(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)) 25408 25508 unstorage: 1.17.0(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0) 25409 25509 untyped: 1.5.2 25410 - vue: 3.5.13(typescript@5.9.2) 25510 + vue: 3.5.13(typescript@5.8.3) 25411 25511 vue-bundle-renderer: 2.1.2 25412 25512 vue-devtools-stub: 0.1.0 25413 - vue-router: 4.5.0(vue@3.5.13(typescript@5.9.2)) 25513 + vue-router: 4.5.0(vue@3.5.13(typescript@5.8.3)) 25514 + optionalDependencies: 25515 + '@parcel/watcher': 2.5.1 25516 + '@types/node': 22.10.5 25517 + transitivePeerDependencies: 25518 + - '@azure/app-configuration' 25519 + - '@azure/cosmos' 25520 + - '@azure/data-tables' 25521 + - '@azure/identity' 25522 + - '@azure/keyvault-secrets' 25523 + - '@azure/storage-blob' 25524 + - '@biomejs/biome' 25525 + - '@capacitor/preferences' 25526 + - '@deno/kv' 25527 + - '@electric-sql/pglite' 25528 + - '@libsql/client' 25529 + - '@netlify/blobs' 25530 + - '@planetscale/database' 25531 + - '@upstash/redis' 25532 + - '@vercel/blob' 25533 + - '@vercel/functions' 25534 + - '@vercel/kv' 25535 + - aws4fetch 25536 + - better-sqlite3 25537 + - bufferutil 25538 + - db0 25539 + - drizzle-orm 25540 + - encoding 25541 + - eslint 25542 + - idb-keyval 25543 + - ioredis 25544 + - less 25545 + - lightningcss 25546 + - magicast 25547 + - meow 25548 + - mysql2 25549 + - optionator 25550 + - rolldown 25551 + - rollup 25552 + - sass 25553 + - sass-embedded 25554 + - sqlite3 25555 + - stylelint 25556 + - stylus 25557 + - sugarss 25558 + - supports-color 25559 + - terser 25560 + - typescript 25561 + - uploadthing 25562 + - utf-8-validate 25563 + - vite 25564 + - vls 25565 + - vti 25566 + - vue-tsc 25567 + - xml2js 25568 + 25569 + 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.5.1))(ioredis@5.7.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.0)(sass@1.85.0)(terser@5.43.1)(typescript@5.8.3)(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)): 25570 + dependencies: 25571 + '@nuxt/devalue': 2.0.2 25572 + '@nuxt/devtools': 1.7.0(rollup@4.50.0)(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1))(vue@3.5.13(typescript@5.8.3)) 25573 + '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.50.0) 25574 + '@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@4.50.0) 25575 + '@nuxt/telemetry': 2.6.6(magicast@0.3.5) 25576 + '@nuxt/vite-builder': 3.14.1592(@types/node@22.10.5)(eslint@9.17.0(jiti@2.5.1))(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.50.0)(sass@1.85.0)(terser@5.43.1)(typescript@5.8.3)(vue@3.5.13(typescript@5.8.3)) 25577 + '@unhead/dom': 1.11.20 25578 + '@unhead/shared': 1.11.20 25579 + '@unhead/ssr': 1.11.20 25580 + '@unhead/vue': 1.11.20(vue@3.5.13(typescript@5.8.3)) 25581 + '@vue/shared': 3.5.20 25582 + acorn: 8.14.0 25583 + c12: 2.0.1(magicast@0.3.5) 25584 + chokidar: 4.0.3 25585 + compatx: 0.1.8 25586 + consola: 3.4.2 25587 + cookie-es: 1.2.2 25588 + defu: 6.1.4 25589 + destr: 2.0.5 25590 + devalue: 5.3.2 25591 + errx: 0.1.0 25592 + esbuild: 0.24.2 25593 + escape-string-regexp: 5.0.0 25594 + estree-walker: 3.0.3 25595 + globby: 14.1.0 25596 + h3: 1.15.4 25597 + hookable: 5.5.3 25598 + ignore: 6.0.2 25599 + impound: 0.2.2(rollup@4.50.0) 25600 + jiti: 2.5.1 25601 + klona: 2.0.6 25602 + knitwork: 1.2.0 25603 + magic-string: 0.30.18 25604 + mlly: 1.7.4 25605 + nanotar: 0.1.1 25606 + nitropack: 2.12.4(@netlify/blobs@9.1.2)(encoding@0.1.13) 25607 + nuxi: 3.28.0 25608 + nypm: 0.3.12 25609 + ofetch: 1.4.1 25610 + ohash: 1.1.6 25611 + pathe: 1.1.2 25612 + perfect-debounce: 1.0.0 25613 + pkg-types: 1.3.1 25614 + radix3: 1.1.2 25615 + scule: 1.3.0 25616 + semver: 7.7.2 25617 + std-env: 3.9.0 25618 + strip-literal: 2.1.1 25619 + tinyglobby: 0.2.10 25620 + ufo: 1.6.1 25621 + ultrahtml: 1.6.0 25622 + uncrypto: 0.1.3 25623 + unctx: 2.4.1 25624 + unenv: 1.10.0 25625 + unhead: 1.11.20 25626 + unimport: 3.14.6(rollup@4.50.0) 25627 + unplugin: 1.16.1 25628 + unplugin-vue-router: 0.10.9(rollup@4.50.0)(vue-router@4.5.0(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)) 25629 + unstorage: 1.17.0(@netlify/blobs@9.1.2)(db0@0.3.2)(ioredis@5.7.0) 25630 + untyped: 1.5.2 25631 + vue: 3.5.13(typescript@5.8.3) 25632 + vue-bundle-renderer: 2.1.2 25633 + vue-devtools-stub: 0.1.0 25634 + vue-router: 4.5.0(vue@3.5.13(typescript@5.8.3)) 25414 25635 optionalDependencies: 25415 25636 '@parcel/watcher': 2.5.1 25416 25637 '@types/node': 22.10.5 ··· 26837 27058 dependencies: 26838 27059 glob: 7.2.3 26839 27060 26840 - rollup-plugin-dts@6.1.1(rollup@3.29.5)(typescript@5.9.2): 27061 + rollup-plugin-dts@6.1.1(rollup@3.29.5)(typescript@5.8.3): 26841 27062 dependencies: 26842 27063 magic-string: 0.30.18 26843 27064 rollup: 3.29.5 26844 - typescript: 5.9.2 27065 + typescript: 5.8.3 26845 27066 optionalDependencies: 26846 27067 '@babel/code-frame': 7.27.1 26847 27068 ··· 27973 28194 v8-compile-cache-lib: 3.0.1 27974 28195 yn: 3.1.1 27975 28196 27976 - tsconfck@3.1.6(typescript@5.9.2): 28197 + tsconfck@3.1.6(typescript@5.8.3): 27977 28198 optionalDependencies: 27978 - typescript: 5.9.2 28199 + typescript: 5.8.3 27979 28200 27980 28201 tsconfig-paths@3.15.0: 27981 28202 dependencies: ··· 28141 28362 has-symbols: 1.1.0 28142 28363 which-boxed-primitive: 1.1.1 28143 28364 28144 - unbuild@2.0.0(sass@1.85.0)(typescript@5.9.2): 28365 + unbuild@2.0.0(sass@1.85.0)(typescript@5.8.3): 28145 28366 dependencies: 28146 28367 '@rollup/plugin-alias': 5.1.1(rollup@3.29.5) 28147 28368 '@rollup/plugin-commonjs': 25.0.8(rollup@3.29.5) ··· 28158 28379 hookable: 5.5.3 28159 28380 jiti: 1.21.7 28160 28381 magic-string: 0.30.18 28161 - mkdist: 1.6.0(sass@1.85.0)(typescript@5.9.2) 28382 + mkdist: 1.6.0(sass@1.85.0)(typescript@5.8.3) 28162 28383 mlly: 1.7.4 28163 28384 pathe: 1.1.2 28164 28385 pkg-types: 1.3.1 28165 28386 pretty-bytes: 6.1.1 28166 28387 rollup: 3.29.5 28167 - rollup-plugin-dts: 6.1.1(rollup@3.29.5)(typescript@5.9.2) 28388 + rollup-plugin-dts: 6.1.1(rollup@3.29.5)(typescript@5.8.3) 28168 28389 scule: 1.3.0 28169 28390 untyped: 1.5.2 28170 28391 optionalDependencies: 28171 - typescript: 5.9.2 28392 + typescript: 5.8.3 28172 28393 transitivePeerDependencies: 28173 28394 - sass 28174 28395 - supports-color ··· 28366 28587 pathe: 2.0.3 28367 28588 picomatch: 4.0.3 28368 28589 28369 - unplugin-vue-router@0.10.9(rollup@3.29.5)(vue-router@4.5.0(vue@3.5.13(typescript@5.9.2)))(vue@3.5.13(typescript@5.9.2)): 28590 + unplugin-vue-router@0.10.9(rollup@3.29.5)(vue-router@4.5.0(vue@3.5.13(typescript@5.8.3)))(vue@3.5.13(typescript@5.8.3)): 28370 28591 dependencies: 28371 28592 '@babel/types': 7.28.2 28372 28593 '@rollup/pluginutils': 5.2.0(rollup@3.29.5) 28373 - '@vue-macros/common': 1.16.1(vue@3.5.13(typescript@5.9.2)) 28594 + '@vue-macros/common': 1.16.1(vue@3.5.13(typescript@5.8.3)) 28374 28595 ast-walker-scope: 0.6.2 28375 28596 chokidar: 3.6.0 28376 28597 fast-glob: 3.3.3 ··· 28383 28604 unplugin: 2.0.0-beta.1 28384 28605 yaml: 2.8.0 28385 28606 optionalDependencies: 28386 - vue-router: 4.5.0(vue@3.5.13(typescript@5.9.2)) 28607 + vue-router: 4.5.0(vue@3.5.13(typescript@5.8.3)) 28387 28608 transitivePeerDependencies: 28388 28609 - rollup 28389 28610 - vue ··· 28605 28826 vite: 7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0) 28606 28827 vite-hot-client: 2.1.0(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)) 28607 28828 28829 + vite-hot-client@0.2.4(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)): 28830 + dependencies: 28831 + vite: 5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1) 28832 + 28608 28833 vite-hot-client@0.2.4(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)): 28609 28834 dependencies: 28610 28835 vite: 7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0) ··· 28739 28964 - rollup 28740 28965 - supports-color 28741 28966 28967 + vite-plugin-inspect@0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.50.0)(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)): 28968 + dependencies: 28969 + '@antfu/utils': 0.7.10 28970 + '@rollup/pluginutils': 5.2.0(rollup@4.50.0) 28971 + debug: 4.4.1 28972 + error-stack-parser-es: 0.1.5 28973 + fs-extra: 11.3.1 28974 + open: 10.1.2 28975 + perfect-debounce: 1.0.0 28976 + picocolors: 1.1.1 28977 + sirv: 3.0.1 28978 + vite: 5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1) 28979 + optionalDependencies: 28980 + '@nuxt/kit': 3.15.4(magicast@0.3.5) 28981 + transitivePeerDependencies: 28982 + - rollup 28983 + - supports-color 28984 + 28742 28985 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.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)): 28743 28986 dependencies: 28744 28987 '@antfu/utils': 0.7.10 ··· 28804 29047 - '@nuxt/kit' 28805 29048 - supports-color 28806 29049 - vue 29050 + 29051 + vite-plugin-vue-inspector@5.3.2(vite@5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)): 29052 + dependencies: 29053 + '@babel/core': 7.28.3 29054 + '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.3) 29055 + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.3) 29056 + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.3) 29057 + '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.3) 29058 + '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.3) 29059 + '@vue/compiler-dom': 3.5.21 29060 + kolorist: 1.8.0 29061 + magic-string: 0.30.18 29062 + vite: 5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.43.1) 29063 + transitivePeerDependencies: 29064 + - supports-color 28807 29065 28808 29066 vite-plugin-vue-inspector@5.3.2(vite@7.1.2(@types/node@22.10.5)(jiti@2.5.1)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0)): 28809 29067 dependencies: ··· 29013 29271 - universal-cookie 29014 29272 - yaml 29015 29273 29016 - vitest-environment-nuxt@1.0.1(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.5)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(yaml@2.8.0): 29274 + vitest-environment-nuxt@1.0.1(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.5)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(yaml@2.8.0): 29017 29275 dependencies: 29018 - '@nuxt/test-utils': 3.17.2(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.9.2)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.5)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(yaml@2.8.0) 29276 + '@nuxt/test-utils': 3.17.2(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.43.1)(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.10.5)(jiti@2.5.1)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.43.1)(yaml@2.8.0))(yaml@2.8.0) 29019 29277 transitivePeerDependencies: 29020 29278 - '@cucumber/cucumber' 29021 29279 - '@jest/globals'