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 pull request #2110 from hey-api/feat/input-validate

feat(parser): add experimental validator option

authored by

Lubos and committed by
GitHub
6d28eadf 7ae94efb

+1660 -739
+5
.changeset/fair-crabs-admire.md
··· 1 + --- 2 + '@hey-api/openapi-ts': patch 3 + --- 4 + 5 + feat(parser): add validate_EXPERIMENTAL option
+1 -1
package.json
··· 68 68 "rollup": "4.31.0", 69 69 "rollup-plugin-dts": "6.1.1", 70 70 "tsup": "8.4.0", 71 - "turbo": "2.5.3", 71 + "turbo": "2.5.4", 72 72 "typescript": "5.8.3", 73 73 "typescript-eslint": "8.29.1", 74 74 "vitest": "3.1.1"
+17 -7
packages/openapi-ts-tests/test/openapi-ts.config.ts
··· 29 29 // '/^[A-Z]+ /v1//', 30 30 ], 31 31 }, 32 - // orphans: false, 32 + orphans: false, 33 33 // preserveOrder: true, 34 34 // tags: { 35 35 // exclude: ['bar'], ··· 44 44 // openapi: '3.1.0', 45 45 // paths: {}, 46 46 // }, 47 - path: path.resolve(__dirname, 'spec', '3.1.x', 'validators.yaml'), 47 + path: path.resolve( 48 + __dirname, 49 + 'spec', 50 + '3.1.x', 51 + 'invalid', 52 + 'servers-entry.yaml', 53 + ), 54 + // path: path.resolve(__dirname, 'spec', '3.1.x', 'servers.yaml'), 48 55 // path: 'http://localhost:4000/', 49 56 // path: 'https://get.heyapi.dev/', 50 57 // path: 'https://get.heyapi.dev/hey-api/backend?branch=main&version=1.0.0', ··· 53 60 // path: 'https://raw.githubusercontent.com/swagger-api/swagger-petstore/master/src/main/resources/openapi.yaml', 54 61 // project: 'backend', 55 62 // project: 'upload-openapi-spec', 63 + validate_EXPERIMENTAL: true, 56 64 // version: '1.0.0', 65 + // watch: 5_000, 66 + // watch: { 67 + // enabled: true, 68 + // interval: 500, 69 + // timeout: 30_000, 70 + // }, 57 71 }, 58 72 logs: { 59 73 // level: 'silent', ··· 136 150 }, 137 151 ], 138 152 // useOptions: false, 139 - // watch: { 140 - // enabled: true, 141 - // interval: 1_000, 142 - // timeout: 60_000, 143 - // }, 153 + // watch: 3_000, 144 154 }; 145 155 });
+6
packages/openapi-ts-tests/test/spec/3.0.x/invalid/servers-array.yaml
··· 1 + openapi: 3.0.4 2 + info: 3 + title: Invalid OpenAPI 3.0.4 servers array example 4 + version: 1 5 + servers: 6 + foo: bar
+6
packages/openapi-ts-tests/test/spec/3.0.x/invalid/servers-entry.yaml
··· 1 + openapi: 3.0.4 2 + info: 3 + title: Invalid OpenAPI 3.0.4 servers entry example 4 + version: 1 5 + servers: 6 + - foo
+6
packages/openapi-ts-tests/test/spec/3.0.x/invalid/servers-required.yaml
··· 1 + openapi: 3.0.4 2 + info: 3 + title: Invalid OpenAPI 3.0.4 servers required example 4 + version: 1 5 + servers: 6 + - description: missing url
+6
packages/openapi-ts-tests/test/spec/3.1.x/invalid/servers-array.yaml
··· 1 + openapi: 3.1.1 2 + info: 3 + title: Invalid OpenAPI 3.1.1 servers array example 4 + version: 1 5 + servers: 6 + foo: bar
+6
packages/openapi-ts-tests/test/spec/3.1.x/invalid/servers-entry.yaml
··· 1 + openapi: 3.1.1 2 + info: 3 + title: Invalid OpenAPI 3.1.1 servers entry example 4 + version: 1 5 + servers: 6 + - foo
+6
packages/openapi-ts-tests/test/spec/3.1.x/invalid/servers-required.yaml
··· 1 + openapi: 3.1.1 2 + info: 3 + title: Invalid OpenAPI 3.1.1 servers required example 4 + version: 1 5 + servers: 6 + - description: missing url
+4 -1
packages/openapi-ts/package.json
··· 89 89 }, 90 90 "dependencies": { 91 91 "@hey-api/json-schema-ref-parser": "1.0.6", 92 + "ansi-colors": "4.1.3", 92 93 "c12": "2.0.1", 94 + "color-support": "1.1.3", 93 95 "commander": "13.0.0", 94 96 "handlebars": "4.7.8" 95 97 }, ··· 110 112 "prettier": "3.4.2", 111 113 "ts-node": "10.9.2", 112 114 "tslib": "2.8.1", 113 - "typescript": "5.8.3" 115 + "typescript": "5.8.3", 116 + "yaml": "2.8.0" 114 117 } 115 118 }
+26 -12
packages/openapi-ts/src/createClient.ts
··· 1 1 import path from 'node:path'; 2 2 3 + import colors from 'ansi-colors'; 4 + 3 5 import { generateLegacyOutput, generateOutput } from './generate/output'; 4 6 import { getSpec } from './getSpec'; 5 7 import type { IR } from './ir/types'; ··· 17 19 path.startsWith('https://get.heyapi.dev'); 18 20 // || path.startsWith('http://localhost:4000') 19 21 20 - export const compileInputPath = (input: Config['input']) => { 22 + export const compileInputPath = ( 23 + input: Omit<Config['input'], 'validate_EXPERIMENTAL' | 'watch'>, 24 + ) => { 21 25 const result: Pick< 22 26 Partial<Config['input']>, 23 27 | 'api_key' ··· 144 148 } 145 149 146 150 const baseString = watch 147 - ? 'Input changed, generating from' 148 - : 'Generating from'; 151 + ? colors.magenta('Input changed, generating from') 152 + : colors.cyan('Generating from'); 149 153 150 154 if (typeof inputPath.path === 'string') { 151 155 const baseInput = isPlatformPath(inputPath.path) 152 - ? `${inputPath.organization}/${inputPath.project}` 156 + ? `${inputPath.organization ?? ''}/${inputPath.project ?? ''}` 153 157 : inputPath.path; 154 158 console.log(`⏳ ${baseString} ${baseInput}`); 155 159 if (isPlatformPath(inputPath.path)) { 156 160 if (inputPath.branch) { 157 - console.log(`branch: ${inputPath.branch}`); 161 + console.log( 162 + `${colors.gray('branch:')} ${colors.green(inputPath.branch)}`, 163 + ); 158 164 } 159 165 if (inputPath.commit_sha) { 160 - console.log(`commit: ${inputPath.commit_sha}`); 166 + console.log( 167 + `${colors.gray('commit:')} ${colors.green(inputPath.commit_sha)}`, 168 + ); 161 169 } 162 170 if (inputPath.tags?.length) { 163 - console.log(`tags: ${inputPath.tags.join(', ')}`); 171 + console.log( 172 + `${colors.gray('tags:')} ${colors.green(inputPath.tags.join(', '))}`, 173 + ); 164 174 } 165 175 if (inputPath.version) { 166 - console.log(`version: ${inputPath.version}`); 176 + console.log( 177 + `${colors.gray('version:')} ${colors.green(inputPath.version)}`, 178 + ); 167 179 } 168 180 } 169 181 } else { ··· 181 193 watch?: WatchValues; 182 194 }) => { 183 195 const inputPath = compileInputPath(config.input); 184 - const timeout = config.watch.timeout; 196 + const { timeout } = config.input.watch; 185 197 186 198 const watch: WatchValues = _watch || { headers: new Headers() }; 187 199 ··· 245 257 const outputPath = process.env.INIT_CWD 246 258 ? `./${path.relative(process.env.INIT_CWD, config.output.path)}` 247 259 : config.output.path; 248 - console.log(`🚀 Done! Your output is in ${outputPath}`); 260 + console.log( 261 + `${colors.green('🚀 Done!')} Your output is in ${colors.cyanBright(outputPath)}`, 262 + ); 249 263 } 250 264 } 251 265 Performance.end('postprocess'); 252 266 } 253 267 254 - if (config.watch.enabled && typeof inputPath.path === 'string') { 268 + if (config.input.watch.enabled && typeof inputPath.path === 'string') { 255 269 setTimeout(() => { 256 270 createClient({ config, templates, watch }); 257 - }, config.watch.interval); 271 + }, config.input.watch.interval); 258 272 } 259 273 260 274 return context || client;
+6 -5
packages/openapi-ts/src/generate/__tests__/class.test.ts
··· 18 18 exportCore: true, 19 19 input: { 20 20 path: '', 21 + validate_EXPERIMENTAL: false, 22 + watch: { 23 + enabled: false, 24 + interval: 1_000, 25 + timeout: 60_000, 26 + }, 21 27 }, 22 28 logs: { 23 29 file: true, ··· 59 65 }, 60 66 }, 61 67 useOptions: true, 62 - watch: { 63 - enabled: false, 64 - interval: 1_000, 65 - timeout: 60_000, 66 - }, 67 68 }); 68 69 69 70 const client: Parameters<typeof generateLegacyClientClass>[2] = {
+18 -15
packages/openapi-ts/src/generate/__tests__/core.test.ts
··· 33 33 exportCore: true, 34 34 input: { 35 35 path: '', 36 + validate_EXPERIMENTAL: false, 37 + watch: { 38 + enabled: false, 39 + interval: 1_000, 40 + timeout: 60_000, 41 + }, 36 42 }, 37 43 logs: { 38 44 file: true, ··· 74 80 }, 75 81 }, 76 82 useOptions: true, 77 - watch: { 78 - enabled: false, 79 - interval: 1_000, 80 - timeout: 60_000, 81 - }, 82 83 }); 83 84 84 85 await generateLegacyCore('/', client, templates); ··· 126 127 exportCore: true, 127 128 input: { 128 129 path: '', 130 + validate_EXPERIMENTAL: false, 131 + watch: { 132 + enabled: false, 133 + interval: 1_000, 134 + timeout: 60_000, 135 + }, 129 136 }, 130 137 logs: { 131 138 file: true, ··· 167 174 }, 168 175 }, 169 176 useOptions: true, 170 - watch: { 171 - enabled: false, 172 - interval: 1_000, 173 - timeout: 60_000, 174 - }, 175 177 }); 176 178 177 179 await generateLegacyCore('/', client, templates); ··· 202 204 exportCore: true, 203 205 input: { 204 206 path: '', 207 + validate_EXPERIMENTAL: false, 208 + watch: { 209 + enabled: false, 210 + interval: 1_000, 211 + timeout: 60_000, 212 + }, 205 213 }, 206 214 logs: { 207 215 file: true, ··· 243 251 }, 244 252 }, 245 253 useOptions: true, 246 - watch: { 247 - enabled: false, 248 - interval: 1_000, 249 - timeout: 60_000, 250 - }, 251 254 }); 252 255 253 256 await generateLegacyCore('/', client, templates);
+6 -5
packages/openapi-ts/src/generate/__tests__/index.test.ts
··· 18 18 exportCore: true, 19 19 input: { 20 20 path: '', 21 + validate_EXPERIMENTAL: false, 22 + watch: { 23 + enabled: false, 24 + interval: 1_000, 25 + timeout: 60_000, 26 + }, 21 27 }, 22 28 logs: { 23 29 file: true, ··· 58 64 }, 59 65 }, 60 66 useOptions: true, 61 - watch: { 62 - enabled: false, 63 - interval: 1_000, 64 - timeout: 60_000, 65 - }, 66 67 }); 67 68 68 69 const files: Parameters<typeof generateIndexFile>[0]['files'] = {
+6 -5
packages/openapi-ts/src/generate/__tests__/output.test.ts
··· 31 31 exportCore: true, 32 32 input: { 33 33 path: '', 34 + validate_EXPERIMENTAL: false, 35 + watch: { 36 + enabled: false, 37 + interval: 1_000, 38 + timeout: 60_000, 39 + }, 34 40 }, 35 41 logs: { 36 42 file: true, ··· 72 78 }, 73 79 }, 74 80 useOptions: false, 75 - watch: { 76 - enabled: false, 77 - interval: 1_000, 78 - timeout: 60_000, 79 - }, 80 81 }); 81 82 82 83 const client: Client = {
+6
packages/openapi-ts/src/index.ts
··· 1 1 import fs from 'node:fs'; 2 2 import path from 'node:path'; 3 3 4 + import colors from 'ansi-colors'; 5 + // @ts-expect-error 6 + import colorSupport from 'color-support'; 7 + 4 8 import { createClient as pCreateClient } from './createClient'; 5 9 import { ensureDirSync } from './generate/utils'; 6 10 import { getLogs } from './getLogs'; ··· 12 16 import { Performance, PerformanceReport } from './utils/performance'; 13 17 14 18 type Configs = UserConfig | (() => UserConfig) | (() => Promise<UserConfig>); 19 + 20 + colors.enabled = colorSupport().hasBasic; 15 21 16 22 /** 17 23 * Generate a client from the provided configuration.
+37 -15
packages/openapi-ts/src/initConfigs.ts
··· 22 22 '@hey-api/sdk', 23 23 ] as const satisfies ReadonlyArray<UserPlugins['name']>; 24 24 25 + const defaultWatch: Config['input']['watch'] = { 26 + enabled: false, 27 + interval: 1_000, 28 + timeout: 60_000, 29 + }; 30 + 25 31 const getInput = (userConfig: UserConfig): Config['input'] => { 26 32 let input: Config['input'] = { 27 33 path: '', 34 + validate_EXPERIMENTAL: false, 35 + watch: defaultWatch, 28 36 }; 29 37 if (typeof userConfig.input === 'string') { 30 38 input.path = userConfig.input; ··· 32 40 userConfig.input && 33 41 (userConfig.input.path || userConfig.input.organization) 34 42 ) { 43 + // @ts-expect-error 35 44 input = { 36 45 ...input, 37 46 path: 'https://get.heyapi.dev', 38 47 ...userConfig.input, 39 48 }; 49 + 50 + if (input.watch !== undefined) { 51 + input.watch = getWatch(input); 52 + } 40 53 } else { 41 54 input = { 42 55 ...input, 43 56 path: userConfig.input as Record<string, unknown>, 44 57 }; 45 58 } 59 + 60 + if ( 61 + userConfig.watch !== undefined && 62 + input.watch.enabled === defaultWatch.enabled && 63 + input.watch.interval === defaultWatch.interval && 64 + input.watch.timeout === defaultWatch.timeout 65 + ) { 66 + input.watch = getWatch({ 67 + path: input.path, 68 + // @ts-expect-error 69 + watch: userConfig.watch, 70 + }); 71 + } 72 + 46 73 return input; 47 74 }; 48 75 ··· 229 256 }; 230 257 231 258 const getWatch = ( 232 - userConfig: Pick<UserConfig, 'watch'> & Pick<Config, 'input'>, 233 - ): Config['watch'] => { 234 - let watch: Config['watch'] = { 235 - enabled: false, 236 - interval: 1_000, 237 - timeout: 60_000, 238 - }; 259 + input: Pick<Config['input'], 'path' | 'watch'>, 260 + ): Config['input']['watch'] => { 261 + let watch = { ...defaultWatch }; 239 262 // we cannot watch spec passed as an object 240 - if (typeof userConfig.input.path !== 'string') { 263 + if (typeof input.path !== 'string') { 241 264 return watch; 242 265 } 243 - if (typeof userConfig.watch === 'boolean') { 244 - watch.enabled = userConfig.watch; 245 - } else if (typeof userConfig.watch === 'number') { 266 + if (typeof input.watch === 'boolean') { 267 + watch.enabled = input.watch; 268 + } else if (typeof input.watch === 'number') { 246 269 watch.enabled = true; 247 - watch.interval = userConfig.watch; 248 - } else if (userConfig.watch) { 270 + watch.interval = input.watch; 271 + } else if (input.watch) { 249 272 watch = { 250 273 ...watch, 251 - ...userConfig.watch, 274 + ...input.watch, 252 275 }; 253 276 } 254 277 return watch; ··· 334 357 output, 335 358 request, 336 359 useOptions, 337 - watch: getWatch({ ...userConfig, input }), 338 360 }); 339 361 config.exportCore = isLegacyClient(config) ? exportCore : false; 340 362
+5 -5
packages/openapi-ts/src/openApi/2.0.x/parser/__tests__/server.test.ts
··· 7 7 describe('parseServers', () => { 8 8 it('host + basePath + schemes', () => { 9 9 const context: Partial<IR.Context<Partial<OpenApi.V2_0_X>>> = { 10 - // @ts-expect-error 11 10 config: { 11 + // @ts-expect-error 12 12 input: { 13 13 path: '', 14 14 }, ··· 33 33 34 34 it('schemes + host', () => { 35 35 const context: Partial<IR.Context<Partial<OpenApi.V2_0_X>>> = { 36 - // @ts-expect-error 37 36 config: { 37 + // @ts-expect-error 38 38 input: { 39 39 path: '', 40 40 }, ··· 55 55 56 56 it('host + basePath', () => { 57 57 const context: Partial<IR.Context<Partial<OpenApi.V2_0_X>>> = { 58 - // @ts-expect-error 59 58 config: { 59 + // @ts-expect-error 60 60 input: { 61 61 path: '', 62 62 }, ··· 77 77 78 78 it('host', () => { 79 79 const context: Partial<IR.Context<Partial<OpenApi.V2_0_X>>> = { 80 - // @ts-expect-error 81 80 config: { 81 + // @ts-expect-error 82 82 input: { 83 83 path: '', 84 84 }, ··· 98 98 99 99 it('basePath', () => { 100 100 const context: Partial<IR.Context<Partial<OpenApi.V2_0_X>>> = { 101 - // @ts-expect-error 102 101 config: { 102 + // @ts-expect-error 103 103 input: { 104 104 path: '', 105 105 },
+148
packages/openapi-ts/src/openApi/2.0.x/parser/graph.ts
··· 1 + import { 2 + addNamespace, 3 + type Graph, 4 + stringToNamespace, 5 + } from '../../shared/utils/graph'; 6 + import { httpMethods } from '../../shared/utils/operation'; 7 + import type { 8 + ValidatorError, 9 + ValidatorResult, 10 + } from '../../shared/utils/validator'; 11 + import type { 12 + OpenApiV2_0_X, 13 + ParameterObject, 14 + PathItemObject, 15 + PathsObject, 16 + ReferenceObject, 17 + SchemaObject, 18 + } from '../types/spec'; 19 + 20 + const collectSchemaDependencies = ( 21 + schema: SchemaObject | ReferenceObject | ParameterObject, 22 + dependencies: Set<string>, 23 + ) => { 24 + if ('$ref' in schema) { 25 + if (schema.$ref) { 26 + const parts = schema.$ref.split('/'); 27 + const type = parts[parts.length - 2]; 28 + const name = parts[parts.length - 1]; 29 + if (type && name) { 30 + const namespace = stringToNamespace(type); 31 + if (namespace === 'unknown') { 32 + console.warn(`unsupported type: ${type}`); 33 + } 34 + dependencies.add(addNamespace(namespace, name)); 35 + } 36 + } 37 + 38 + return; 39 + } 40 + 41 + if ('in' in schema) { 42 + if (schema.in === 'body') { 43 + collectSchemaDependencies(schema.schema, dependencies); 44 + } 45 + return; 46 + } 47 + 48 + if (schema.items && typeof schema.items === 'object') { 49 + collectSchemaDependencies(schema.items, dependencies); 50 + } 51 + 52 + if (schema.properties) { 53 + for (const property of Object.values(schema.properties)) { 54 + if (typeof property === 'object') { 55 + collectSchemaDependencies(property, dependencies); 56 + } 57 + } 58 + } 59 + 60 + if (schema.allOf) { 61 + for (const item of schema.allOf) { 62 + collectSchemaDependencies(item, dependencies); 63 + } 64 + } 65 + }; 66 + 67 + export const createGraph = ({ 68 + spec, 69 + }: { 70 + spec: OpenApiV2_0_X; 71 + validate: boolean; 72 + }): ValidatorResult & { 73 + graph: Graph; 74 + } => { 75 + const graph: Graph = { 76 + operations: new Map(), 77 + parameters: new Map(), 78 + requestBodies: new Map(), 79 + responses: new Map(), 80 + schemas: new Map(), 81 + }; 82 + const errors: Array<ValidatorError> = []; 83 + 84 + if (spec.definitions) { 85 + for (const [key, schema] of Object.entries(spec.definitions)) { 86 + const dependencies = new Set<string>(); 87 + collectSchemaDependencies(schema, dependencies); 88 + graph.schemas.set(addNamespace('schema', key), { 89 + dependencies, 90 + deprecated: false, 91 + }); 92 + } 93 + } 94 + 95 + if (spec.parameters) { 96 + // TODO: add parameters 97 + } 98 + 99 + if (spec.paths) { 100 + for (const entry of Object.entries(spec.paths)) { 101 + const path = entry[0] as keyof PathsObject; 102 + const pathItem = entry[1] as PathItemObject; 103 + for (const method of httpMethods) { 104 + if (method === 'trace') { 105 + continue; 106 + } 107 + 108 + const operation = pathItem[method]; 109 + if (!operation) { 110 + continue; 111 + } 112 + 113 + const dependencies = new Set<string>(); 114 + 115 + if (operation.responses) { 116 + for (const response of Object.values(operation.responses)) { 117 + if (!response) { 118 + continue; 119 + } 120 + 121 + if ('$ref' in response) { 122 + collectSchemaDependencies(response, dependencies); 123 + } else if (response.schema) { 124 + collectSchemaDependencies(response.schema, dependencies); 125 + } 126 + } 127 + } 128 + 129 + if (operation.parameters) { 130 + for (const parameter of operation.parameters) { 131 + collectSchemaDependencies(parameter, dependencies); 132 + } 133 + } 134 + 135 + graph.operations.set( 136 + addNamespace('operation', `${method.toUpperCase()} ${path}`), 137 + { 138 + dependencies, 139 + deprecated: Boolean(operation.deprecated), 140 + tags: new Set(operation.tags), 141 + }, 142 + ); 143 + } 144 + } 145 + } 146 + 147 + return { errors, graph, valid: !errors.length }; 148 + };
+17 -3
packages/openapi-ts/src/openApi/2.0.x/parser/index.ts
··· 5 5 createFilters, 6 6 hasFilters, 7 7 } from '../../shared/utils/filter'; 8 - import { createGraph } from '../../shared/utils/graph'; 8 + import type { Graph } from '../../shared/utils/graph'; 9 9 import { mergeParametersObjects } from '../../shared/utils/parameter'; 10 + import { handleValidatorResult } from '../../shared/utils/validator'; 10 11 import type { 11 12 OpenApiV2_0_X, 12 13 OperationObject, ··· 15 16 SecuritySchemeObject, 16 17 } from '../types/spec'; 17 18 import { filterSpec } from './filter'; 19 + import { createGraph } from './graph'; 18 20 import { parseOperation } from './operation'; 19 21 import { parametersArrayToObject } from './parameter'; 20 22 import { parseSchema } from './schema'; ··· 24 26 keyof T extends infer K ? (K extends `/${string}` ? K : never) : never; 25 27 26 28 export const parseV2_0_X = (context: IR.Context<OpenApiV2_0_X>) => { 27 - if (hasFilters(context.config.input.filters)) { 28 - const graph = createGraph(context.spec); 29 + const shouldFilterSpec = hasFilters(context.config.input.filters); 30 + 31 + let graph: Graph | undefined; 32 + 33 + if (shouldFilterSpec || context.config.input.validate_EXPERIMENTAL) { 34 + const result = createGraph({ 35 + spec: context.spec, 36 + validate: context.config.input.validate_EXPERIMENTAL, 37 + }); 38 + graph = result.graph; 39 + handleValidatorResult({ context, result }); 40 + } 41 + 42 + if (shouldFilterSpec && graph) { 29 43 const filters = createFilters(context.config.input.filters, context.spec); 30 44 const sets = createFilteredDependencies({ filters, graph }); 31 45 filterSpec({
+85
packages/openapi-ts/src/openApi/3.0.x/parser/__tests__/graph.test.ts
··· 1 + import path from 'node:path'; 2 + 3 + import { describe, expect, it } from 'vitest'; 4 + 5 + import { specFileToJson } from '../../../__tests__/utils'; 6 + import type { ValidatorResult } from '../../../shared/utils/validator'; 7 + import { createGraph } from '../graph'; 8 + 9 + const specsFolder = path.join( 10 + __dirname, 11 + '..', 12 + '..', 13 + '..', 14 + '..', 15 + '..', 16 + '..', 17 + 'openapi-ts-tests', 18 + 'test', 19 + 'spec', 20 + '3.0.x', 21 + 'invalid', 22 + ); 23 + 24 + describe('validate', () => { 25 + const scenarios: Array< 26 + ValidatorResult & { 27 + description: string; 28 + file: string; 29 + } 30 + > = [ 31 + { 32 + description: 'servers must be array', 33 + errors: [ 34 + { 35 + code: 'invalid_type', 36 + message: '`servers` must be an array', 37 + path: [], 38 + severity: 'error', 39 + }, 40 + ], 41 + file: path.join(specsFolder, 'servers-array.yaml'), 42 + valid: false, 43 + }, 44 + { 45 + description: 'servers entry must be object', 46 + errors: [ 47 + { 48 + code: 'invalid_type', 49 + context: { 50 + actual: 'string', 51 + expected: 'object', 52 + }, 53 + message: 'Each entry in `servers` must be an object', 54 + path: ['servers', 0], 55 + severity: 'error', 56 + }, 57 + ], 58 + file: path.join(specsFolder, 'servers-entry.yaml'), 59 + valid: false, 60 + }, 61 + { 62 + description: 'servers entry required fields', 63 + errors: [ 64 + { 65 + code: 'missing_required_field', 66 + context: { 67 + field: 'url', 68 + }, 69 + message: 'Missing required field `url` in server object', 70 + path: ['servers', 0], 71 + severity: 'error', 72 + }, 73 + ], 74 + file: path.join(specsFolder, 'servers-required.yaml'), 75 + valid: false, 76 + }, 77 + ]; 78 + 79 + it.each(scenarios)('$description', ({ errors, file, valid }) => { 80 + const spec = specFileToJson(file); 81 + const result = createGraph({ spec, validate: true }); 82 + expect(result.valid).toBe(valid); 83 + expect(result.errors).toEqual(errors); 84 + }); 85 + });
+288
packages/openapi-ts/src/openApi/3.0.x/parser/graph.ts
··· 1 + import type { Graph } from '../../shared/utils/graph'; 2 + import { addNamespace, stringToNamespace } from '../../shared/utils/graph'; 3 + import { httpMethods } from '../../shared/utils/operation'; 4 + import type { 5 + ValidatorError, 6 + ValidatorResult, 7 + } from '../../shared/utils/validator'; 8 + import type { 9 + OpenApiV3_0_X, 10 + PathItemObject, 11 + PathsObject, 12 + ReferenceObject, 13 + SchemaObject, 14 + } from '../types/spec'; 15 + 16 + const collectSchemaDependencies = ( 17 + schema: SchemaObject | ReferenceObject, 18 + dependencies: Set<string>, 19 + ) => { 20 + if ('$ref' in schema) { 21 + if (schema.$ref) { 22 + const parts = schema.$ref.split('/'); 23 + const type = parts[parts.length - 2]; 24 + const name = parts[parts.length - 1]; 25 + if (type && name) { 26 + const namespace = stringToNamespace(type); 27 + if (namespace === 'unknown') { 28 + console.warn(`unsupported type: ${type}`); 29 + } 30 + dependencies.add(addNamespace(namespace, name)); 31 + } 32 + } 33 + 34 + return; 35 + } 36 + 37 + if (schema.items && typeof schema.items === 'object') { 38 + collectSchemaDependencies(schema.items, dependencies); 39 + } 40 + 41 + if (schema.properties) { 42 + for (const property of Object.values(schema.properties)) { 43 + if (typeof property === 'object') { 44 + collectSchemaDependencies(property, dependencies); 45 + } 46 + } 47 + } 48 + 49 + if ( 50 + schema.additionalProperties && 51 + typeof schema.additionalProperties === 'object' 52 + ) { 53 + collectSchemaDependencies(schema.additionalProperties, dependencies); 54 + } 55 + 56 + if (schema.allOf) { 57 + for (const item of schema.allOf) { 58 + collectSchemaDependencies(item, dependencies); 59 + } 60 + } 61 + 62 + if (schema.anyOf) { 63 + for (const item of schema.anyOf) { 64 + collectSchemaDependencies(item, dependencies); 65 + } 66 + } 67 + 68 + if (schema.not) { 69 + collectSchemaDependencies(schema.not, dependencies); 70 + } 71 + 72 + if (schema.oneOf) { 73 + for (const item of schema.oneOf) { 74 + collectSchemaDependencies(item, dependencies); 75 + } 76 + } 77 + }; 78 + 79 + export const createGraph = ({ 80 + spec, 81 + validate, 82 + }: { 83 + spec: OpenApiV3_0_X; 84 + validate: boolean; 85 + }): ValidatorResult & { 86 + graph: Graph; 87 + } => { 88 + const graph: Graph = { 89 + operations: new Map(), 90 + parameters: new Map(), 91 + requestBodies: new Map(), 92 + responses: new Map(), 93 + schemas: new Map(), 94 + }; 95 + const errors: Array<ValidatorError> = []; 96 + 97 + if (spec.components) { 98 + // TODO: add other components 99 + if (spec.components.schemas) { 100 + for (const [key, schema] of Object.entries(spec.components.schemas)) { 101 + const dependencies = new Set<string>(); 102 + collectSchemaDependencies(schema, dependencies); 103 + graph.schemas.set(addNamespace('schema', key), { 104 + dependencies, 105 + deprecated: 106 + 'deprecated' in schema ? Boolean(schema.deprecated) : false, 107 + }); 108 + } 109 + } 110 + 111 + if (spec.components.parameters) { 112 + for (const [key, parameter] of Object.entries( 113 + spec.components.parameters, 114 + )) { 115 + const dependencies = new Set<string>(); 116 + if ('$ref' in parameter) { 117 + collectSchemaDependencies(parameter, dependencies); 118 + } else { 119 + if (parameter.schema) { 120 + collectSchemaDependencies(parameter.schema, dependencies); 121 + } 122 + 123 + if (parameter.content) { 124 + for (const media of Object.values(parameter.content)) { 125 + if (media.schema) { 126 + collectSchemaDependencies(media.schema, dependencies); 127 + } 128 + } 129 + } 130 + } 131 + graph.parameters.set(addNamespace('parameter', key), { 132 + dependencies, 133 + deprecated: 134 + 'deprecated' in parameter ? Boolean(parameter.deprecated) : false, 135 + }); 136 + } 137 + } 138 + 139 + if (spec.components.requestBodies) { 140 + for (const [key, requestBody] of Object.entries( 141 + spec.components.requestBodies, 142 + )) { 143 + const dependencies = new Set<string>(); 144 + if ('$ref' in requestBody) { 145 + collectSchemaDependencies(requestBody, dependencies); 146 + } else { 147 + for (const media of Object.values(requestBody.content)) { 148 + if (media.schema) { 149 + collectSchemaDependencies(media.schema, dependencies); 150 + } 151 + } 152 + } 153 + graph.requestBodies.set(addNamespace('body', key), { 154 + dependencies, 155 + deprecated: false, 156 + }); 157 + } 158 + } 159 + 160 + if (spec.components.responses) { 161 + for (const [key, response] of Object.entries(spec.components.responses)) { 162 + const dependencies = new Set<string>(); 163 + if ('$ref' in response) { 164 + collectSchemaDependencies(response, dependencies); 165 + } else { 166 + if (response.content) { 167 + for (const media of Object.values(response.content)) { 168 + if (media.schema) { 169 + collectSchemaDependencies(media.schema, dependencies); 170 + } 171 + } 172 + } 173 + } 174 + graph.responses.set(addNamespace('response', key), { 175 + dependencies, 176 + deprecated: false, 177 + }); 178 + } 179 + } 180 + } 181 + 182 + if (spec.paths) { 183 + for (const entry of Object.entries(spec.paths)) { 184 + const path = entry[0] as keyof PathsObject; 185 + const pathItem = entry[1] as PathItemObject; 186 + for (const method of httpMethods) { 187 + const operation = pathItem[method]; 188 + if (!operation) { 189 + continue; 190 + } 191 + 192 + const dependencies = new Set<string>(); 193 + 194 + if (operation.requestBody) { 195 + if ('$ref' in operation.requestBody) { 196 + collectSchemaDependencies(operation.requestBody, dependencies); 197 + } else { 198 + for (const media of Object.values(operation.requestBody.content)) { 199 + if (media.schema) { 200 + collectSchemaDependencies(media.schema, dependencies); 201 + } 202 + } 203 + } 204 + } 205 + 206 + if (operation.responses) { 207 + for (const response of Object.values(operation.responses)) { 208 + if (!response) { 209 + continue; 210 + } 211 + 212 + if ('$ref' in response) { 213 + collectSchemaDependencies(response, dependencies); 214 + } else if (response.content) { 215 + for (const media of Object.values(response.content)) { 216 + if (media.schema) { 217 + collectSchemaDependencies(media.schema, dependencies); 218 + } 219 + } 220 + } 221 + } 222 + } 223 + 224 + if (operation.parameters) { 225 + for (const parameter of operation.parameters) { 226 + if ('$ref' in parameter) { 227 + collectSchemaDependencies(parameter, dependencies); 228 + } else if (parameter.schema) { 229 + collectSchemaDependencies(parameter.schema, dependencies); 230 + } 231 + } 232 + } 233 + 234 + graph.operations.set( 235 + addNamespace('operation', `${method.toUpperCase()} ${path}`), 236 + { 237 + dependencies, 238 + deprecated: Boolean(operation.deprecated), 239 + tags: new Set(operation.tags), 240 + }, 241 + ); 242 + } 243 + } 244 + } 245 + 246 + if (validate) { 247 + if (spec.servers) { 248 + if (typeof spec.servers !== 'object' || !Array.isArray(spec.servers)) { 249 + errors.push({ 250 + code: 'invalid_type', 251 + message: '`servers` must be an array', 252 + path: [], 253 + severity: 'error', 254 + }); 255 + } 256 + 257 + for (let index = 0; index < spec.servers.length; index++) { 258 + const server = spec.servers[index]; 259 + if (!server || typeof server !== 'object') { 260 + errors.push({ 261 + code: 'invalid_type', 262 + context: { 263 + actual: typeof server, 264 + expected: 'object', 265 + }, 266 + message: 'Each entry in `servers` must be an object', 267 + path: ['servers', index], 268 + severity: 'error', 269 + }); 270 + } else { 271 + if (!server.url) { 272 + errors.push({ 273 + code: 'missing_required_field', 274 + context: { 275 + field: 'url', 276 + }, 277 + message: 'Missing required field `url` in server object', 278 + path: ['servers', index], 279 + severity: 'error', 280 + }); 281 + } 282 + } 283 + } 284 + } 285 + } 286 + 287 + return { errors, graph, valid: !errors.length }; 288 + };
+17 -3
packages/openapi-ts/src/openApi/3.0.x/parser/index.ts
··· 5 5 createFilters, 6 6 hasFilters, 7 7 } from '../../shared/utils/filter'; 8 - import { createGraph } from '../../shared/utils/graph'; 8 + import type { Graph } from '../../shared/utils/graph'; 9 9 import { mergeParametersObjects } from '../../shared/utils/parameter'; 10 + import { handleValidatorResult } from '../../shared/utils/validator'; 10 11 import type { 11 12 OpenApiV3_0_X, 12 13 ParameterObject, ··· 16 17 SecuritySchemeObject, 17 18 } from '../types/spec'; 18 19 import { filterSpec } from './filter'; 20 + import { createGraph } from './graph'; 19 21 import { parseOperation } from './operation'; 20 22 import { parametersArrayToObject, parseParameter } from './parameter'; 21 23 import { parseRequestBody } from './requestBody'; ··· 23 25 import { parseServers } from './server'; 24 26 25 27 export const parseV3_0_X = (context: IR.Context<OpenApiV3_0_X>) => { 26 - if (hasFilters(context.config.input.filters)) { 27 - const graph = createGraph(context.spec); 28 + const shouldFilterSpec = hasFilters(context.config.input.filters); 29 + 30 + let graph: Graph | undefined; 31 + 32 + if (shouldFilterSpec || context.config.input.validate_EXPERIMENTAL) { 33 + const result = createGraph({ 34 + spec: context.spec, 35 + validate: context.config.input.validate_EXPERIMENTAL, 36 + }); 37 + graph = result.graph; 38 + handleValidatorResult({ context, result }); 39 + } 40 + 41 + if (shouldFilterSpec && graph) { 28 42 const filters = createFilters(context.config.input.filters, context.spec); 29 43 const sets = createFilteredDependencies({ filters, graph }); 30 44 filterSpec({
+85
packages/openapi-ts/src/openApi/3.1.x/parser/__tests__/graph.test.ts
··· 1 + import path from 'node:path'; 2 + 3 + import { describe, expect, it } from 'vitest'; 4 + 5 + import { specFileToJson } from '../../../__tests__/utils'; 6 + import type { ValidatorResult } from '../../../shared/utils/validator'; 7 + import { createGraph } from '../graph'; 8 + 9 + const specsFolder = path.join( 10 + __dirname, 11 + '..', 12 + '..', 13 + '..', 14 + '..', 15 + '..', 16 + '..', 17 + 'openapi-ts-tests', 18 + 'test', 19 + 'spec', 20 + '3.1.x', 21 + 'invalid', 22 + ); 23 + 24 + describe('validate', () => { 25 + const scenarios: Array< 26 + ValidatorResult & { 27 + description: string; 28 + file: string; 29 + } 30 + > = [ 31 + { 32 + description: 'servers must be array', 33 + errors: [ 34 + { 35 + code: 'invalid_type', 36 + message: '`servers` must be an array', 37 + path: [], 38 + severity: 'error', 39 + }, 40 + ], 41 + file: path.join(specsFolder, 'servers-array.yaml'), 42 + valid: false, 43 + }, 44 + { 45 + description: 'servers entry must be object', 46 + errors: [ 47 + { 48 + code: 'invalid_type', 49 + context: { 50 + actual: 'string', 51 + expected: 'object', 52 + }, 53 + message: 'Each entry in `servers` must be an object', 54 + path: ['servers', 0], 55 + severity: 'error', 56 + }, 57 + ], 58 + file: path.join(specsFolder, 'servers-entry.yaml'), 59 + valid: false, 60 + }, 61 + { 62 + description: 'servers entry required fields', 63 + errors: [ 64 + { 65 + code: 'missing_required_field', 66 + context: { 67 + field: 'url', 68 + }, 69 + message: 'Missing required field `url` in server object', 70 + path: ['servers', 0], 71 + severity: 'error', 72 + }, 73 + ], 74 + file: path.join(specsFolder, 'servers-required.yaml'), 75 + valid: false, 76 + }, 77 + ]; 78 + 79 + it.each(scenarios)('$description', ({ errors, file, valid }) => { 80 + const spec = specFileToJson(file); 81 + const result = createGraph({ spec, validate: true }); 82 + expect(result.valid).toBe(valid); 83 + expect(result.errors).toEqual(errors); 84 + }); 85 + });
+293
packages/openapi-ts/src/openApi/3.1.x/parser/graph.ts
··· 1 + import type { Graph } from '../../shared/utils/graph'; 2 + import { addNamespace, stringToNamespace } from '../../shared/utils/graph'; 3 + import { httpMethods } from '../../shared/utils/operation'; 4 + import type { 5 + ValidatorError, 6 + ValidatorResult, 7 + } from '../../shared/utils/validator'; 8 + import type { 9 + OpenApiV3_1_X, 10 + PathItemObject, 11 + PathsObject, 12 + SchemaObject, 13 + } from '../types/spec'; 14 + 15 + const collectSchemaDependencies = ( 16 + schema: SchemaObject, 17 + dependencies: Set<string>, 18 + ) => { 19 + if ('$ref' in schema && schema.$ref) { 20 + const parts = schema.$ref.split('/'); 21 + const type = parts[parts.length - 2]; 22 + const name = parts[parts.length - 1]; 23 + if (type && name) { 24 + const namespace = stringToNamespace(type); 25 + if (namespace === 'unknown') { 26 + console.warn(`unsupported type: ${type}`); 27 + } 28 + dependencies.add(addNamespace(namespace, name)); 29 + } 30 + } 31 + 32 + if (schema.items && typeof schema.items === 'object') { 33 + collectSchemaDependencies(schema.items, dependencies); 34 + } 35 + 36 + if (schema.properties) { 37 + for (const property of Object.values(schema.properties)) { 38 + if (typeof property === 'object') { 39 + collectSchemaDependencies(property, dependencies); 40 + } 41 + } 42 + } 43 + 44 + if ( 45 + schema.additionalProperties && 46 + typeof schema.additionalProperties === 'object' 47 + ) { 48 + collectSchemaDependencies(schema.additionalProperties, dependencies); 49 + } 50 + 51 + if (schema.allOf) { 52 + for (const item of schema.allOf) { 53 + collectSchemaDependencies(item, dependencies); 54 + } 55 + } 56 + 57 + if (schema.anyOf) { 58 + for (const item of schema.anyOf) { 59 + collectSchemaDependencies(item, dependencies); 60 + } 61 + } 62 + 63 + if (schema.contains) { 64 + collectSchemaDependencies(schema.contains, dependencies); 65 + } 66 + 67 + if (schema.not) { 68 + collectSchemaDependencies(schema.not, dependencies); 69 + } 70 + 71 + if (schema.oneOf) { 72 + for (const item of schema.oneOf) { 73 + collectSchemaDependencies(item, dependencies); 74 + } 75 + } 76 + 77 + if (schema.prefixItems) { 78 + for (const item of schema.prefixItems) { 79 + collectSchemaDependencies(item, dependencies); 80 + } 81 + } 82 + }; 83 + 84 + export const createGraph = ({ 85 + spec, 86 + validate, 87 + }: { 88 + spec: OpenApiV3_1_X; 89 + validate: boolean; 90 + }): ValidatorResult & { 91 + graph: Graph; 92 + } => { 93 + const graph: Graph = { 94 + operations: new Map(), 95 + parameters: new Map(), 96 + requestBodies: new Map(), 97 + responses: new Map(), 98 + schemas: new Map(), 99 + }; 100 + const errors: Array<ValidatorError> = []; 101 + 102 + if (spec.components) { 103 + // TODO: add other components 104 + if (spec.components.schemas) { 105 + for (const [key, schema] of Object.entries(spec.components.schemas)) { 106 + const dependencies = new Set<string>(); 107 + collectSchemaDependencies(schema, dependencies); 108 + graph.schemas.set(addNamespace('schema', key), { 109 + dependencies, 110 + deprecated: 111 + 'deprecated' in schema ? Boolean(schema.deprecated) : false, 112 + }); 113 + } 114 + } 115 + 116 + if (spec.components.parameters) { 117 + for (const [key, parameter] of Object.entries( 118 + spec.components.parameters, 119 + )) { 120 + const dependencies = new Set<string>(); 121 + if ('$ref' in parameter) { 122 + collectSchemaDependencies(parameter, dependencies); 123 + } else { 124 + if (parameter.schema) { 125 + collectSchemaDependencies(parameter.schema, dependencies); 126 + } 127 + 128 + if (parameter.content) { 129 + for (const media of Object.values(parameter.content)) { 130 + if (media.schema) { 131 + collectSchemaDependencies(media.schema, dependencies); 132 + } 133 + } 134 + } 135 + } 136 + graph.parameters.set(addNamespace('parameter', key), { 137 + dependencies, 138 + deprecated: 139 + 'deprecated' in parameter ? Boolean(parameter.deprecated) : false, 140 + }); 141 + } 142 + } 143 + 144 + if (spec.components.requestBodies) { 145 + for (const [key, requestBody] of Object.entries( 146 + spec.components.requestBodies, 147 + )) { 148 + const dependencies = new Set<string>(); 149 + if ('$ref' in requestBody) { 150 + collectSchemaDependencies(requestBody, dependencies); 151 + } else { 152 + for (const media of Object.values(requestBody.content)) { 153 + if (media.schema) { 154 + collectSchemaDependencies(media.schema, dependencies); 155 + } 156 + } 157 + } 158 + graph.requestBodies.set(addNamespace('body', key), { 159 + dependencies, 160 + deprecated: false, 161 + }); 162 + } 163 + } 164 + 165 + if (spec.components.responses) { 166 + for (const [key, response] of Object.entries(spec.components.responses)) { 167 + const dependencies = new Set<string>(); 168 + if ('$ref' in response) { 169 + collectSchemaDependencies(response, dependencies); 170 + } else { 171 + if (response.content) { 172 + for (const media of Object.values(response.content)) { 173 + if (media.schema) { 174 + collectSchemaDependencies(media.schema, dependencies); 175 + } 176 + } 177 + } 178 + } 179 + graph.responses.set(addNamespace('response', key), { 180 + dependencies, 181 + deprecated: false, 182 + }); 183 + } 184 + } 185 + } 186 + 187 + if (spec.paths) { 188 + for (const entry of Object.entries(spec.paths)) { 189 + const path = entry[0] as keyof PathsObject; 190 + const pathItem = entry[1] as PathItemObject; 191 + for (const method of httpMethods) { 192 + const operation = pathItem[method]; 193 + if (!operation) { 194 + continue; 195 + } 196 + 197 + const dependencies = new Set<string>(); 198 + 199 + if (operation.requestBody) { 200 + if ('$ref' in operation.requestBody) { 201 + collectSchemaDependencies(operation.requestBody, dependencies); 202 + } else { 203 + for (const media of Object.values(operation.requestBody.content)) { 204 + if (media.schema) { 205 + collectSchemaDependencies(media.schema, dependencies); 206 + } 207 + } 208 + } 209 + } 210 + 211 + if (operation.responses) { 212 + for (const response of Object.values(operation.responses)) { 213 + if (!response) { 214 + continue; 215 + } 216 + 217 + if ('$ref' in response) { 218 + collectSchemaDependencies(response, dependencies); 219 + } else if (response.content) { 220 + for (const media of Object.values(response.content)) { 221 + if (media.schema) { 222 + collectSchemaDependencies(media.schema, dependencies); 223 + } 224 + } 225 + } 226 + } 227 + } 228 + 229 + if (operation.parameters) { 230 + for (const parameter of operation.parameters) { 231 + if ('$ref' in parameter) { 232 + collectSchemaDependencies(parameter, dependencies); 233 + } else if (parameter.schema) { 234 + collectSchemaDependencies(parameter.schema, dependencies); 235 + } 236 + } 237 + } 238 + 239 + graph.operations.set( 240 + addNamespace('operation', `${method.toUpperCase()} ${path}`), 241 + { 242 + dependencies, 243 + deprecated: Boolean(operation.deprecated), 244 + tags: new Set(operation.tags), 245 + }, 246 + ); 247 + } 248 + } 249 + } 250 + 251 + if (validate) { 252 + if (spec.servers) { 253 + if (typeof spec.servers !== 'object' || !Array.isArray(spec.servers)) { 254 + errors.push({ 255 + code: 'invalid_type', 256 + message: '`servers` must be an array', 257 + path: [], 258 + severity: 'error', 259 + }); 260 + } 261 + 262 + for (let index = 0; index < spec.servers.length; index++) { 263 + const server = spec.servers[index]; 264 + if (!server || typeof server !== 'object') { 265 + errors.push({ 266 + code: 'invalid_type', 267 + context: { 268 + actual: typeof server, 269 + expected: 'object', 270 + }, 271 + message: 'Each entry in `servers` must be an object', 272 + path: ['servers', index], 273 + severity: 'error', 274 + }); 275 + } else { 276 + if (!server.url) { 277 + errors.push({ 278 + code: 'missing_required_field', 279 + context: { 280 + field: 'url', 281 + }, 282 + message: 'Missing required field `url` in server object', 283 + path: ['servers', index], 284 + severity: 'error', 285 + }); 286 + } 287 + } 288 + } 289 + } 290 + } 291 + 292 + return { errors, graph, valid: !errors.length }; 293 + };
+17 -3
packages/openapi-ts/src/openApi/3.1.x/parser/index.ts
··· 5 5 createFilters, 6 6 hasFilters, 7 7 } from '../../shared/utils/filter'; 8 - import { createGraph } from '../../shared/utils/graph'; 8 + import type { Graph } from '../../shared/utils/graph'; 9 9 import { mergeParametersObjects } from '../../shared/utils/parameter'; 10 + import { handleValidatorResult } from '../../shared/utils/validator'; 10 11 import type { 11 12 OpenApiV3_1_X, 12 13 ParameterObject, ··· 16 17 SecuritySchemeObject, 17 18 } from '../types/spec'; 18 19 import { filterSpec } from './filter'; 20 + import { createGraph } from './graph'; 19 21 import { parseOperation } from './operation'; 20 22 import { parametersArrayToObject, parseParameter } from './parameter'; 21 23 import { parseRequestBody } from './requestBody'; ··· 23 25 import { parseServers } from './server'; 24 26 25 27 export const parseV3_1_X = (context: IR.Context<OpenApiV3_1_X>) => { 26 - if (hasFilters(context.config.input.filters)) { 27 - const graph = createGraph(context.spec); 28 + const shouldFilterSpec = hasFilters(context.config.input.filters); 29 + 30 + let graph: Graph | undefined; 31 + 32 + if (shouldFilterSpec || context.config.input.validate_EXPERIMENTAL) { 33 + const result = createGraph({ 34 + spec: context.spec, 35 + validate: context.config.input.validate_EXPERIMENTAL, 36 + }); 37 + graph = result.graph; 38 + handleValidatorResult({ context, result }); 39 + } 40 + 41 + if (shouldFilterSpec && graph) { 28 42 const filters = createFilters(context.config.input.filters, context.spec); 29 43 const sets = createFilteredDependencies({ filters, graph }); 30 44 filterSpec({
+10
packages/openapi-ts/src/openApi/__tests__/utils.ts
··· 1 + import fs from 'node:fs'; 2 + import path from 'node:path'; 3 + 4 + import yaml from 'yaml'; 5 + 6 + export const specFileToJson = (file: string) => { 7 + const raw = fs.readFileSync(file, 'utf8'); 8 + const ext = path.extname(file).toLowerCase(); 9 + return ext === '.json' ? JSON.parse(raw) : yaml.parse(raw); 10 + };
+1 -343
packages/openapi-ts/src/openApi/shared/utils/graph.ts
··· 1 - import type { SchemaObject as OpenApiV2_0_XSchemaObject } from '../../2.0.x/types/spec'; 2 - import type { SchemaObject as OpenApiV3_0_XSchemaObject } from '../../3.0.x/types/spec'; 3 - import type { 4 - PathItemObject, 5 - PathsObject, 6 - SchemaObject as OpenApiV3_1_XSchemaObject, 7 - } from '../../3.1.x/types/spec'; 8 - import type { OpenApi } from '../../types'; 9 - import { httpMethods } from './operation'; 10 - 11 1 export type Graph = { 12 2 operations: Map< 13 3 string, ··· 57 47 58 48 /** 59 49 * Converts reference strings from OpenAPI $ref keywords into namespaces. 50 + * 60 51 * @example '#/components/schemas/Foo' -> 'schema' 61 52 */ 62 53 export const stringToNamespace = (value: string): GraphType => { ··· 95 86 namespace: key.slice(0, index)! as GraphType, 96 87 }; 97 88 }; 98 - 99 - const collectSchemaDependencies = ( 100 - schema: 101 - | OpenApiV2_0_XSchemaObject 102 - | OpenApiV3_0_XSchemaObject 103 - | OpenApiV3_1_XSchemaObject, 104 - dependencies: Set<string>, 105 - ) => { 106 - if ('$ref' in schema && schema.$ref) { 107 - const parts = schema.$ref.split('/'); 108 - const type = parts[parts.length - 2]; 109 - const name = parts[parts.length - 1]; 110 - if (type && name) { 111 - const namespace = stringToNamespace(type); 112 - if (namespace === 'unknown') { 113 - console.warn(`unsupported type: ${type}`); 114 - } 115 - dependencies.add(addNamespace(namespace, name)); 116 - } 117 - } 118 - 119 - if (schema.items && typeof schema.items === 'object') { 120 - collectSchemaDependencies(schema.items, dependencies); 121 - } 122 - 123 - if (schema.properties) { 124 - for (const property of Object.values(schema.properties)) { 125 - if (typeof property === 'object') { 126 - collectSchemaDependencies(property, dependencies); 127 - } 128 - } 129 - } 130 - 131 - if ( 132 - schema.additionalProperties && 133 - typeof schema.additionalProperties === 'object' 134 - ) { 135 - collectSchemaDependencies(schema.additionalProperties, dependencies); 136 - } 137 - 138 - if ('allOf' in schema && schema.allOf) { 139 - for (const item of schema.allOf) { 140 - collectSchemaDependencies(item, dependencies); 141 - } 142 - } 143 - 144 - if ('anyOf' in schema && schema.anyOf) { 145 - for (const item of schema.anyOf) { 146 - collectSchemaDependencies(item, dependencies); 147 - } 148 - } 149 - 150 - if ('contains' in schema && schema.contains) { 151 - collectSchemaDependencies(schema.contains, dependencies); 152 - } 153 - 154 - if ('not' in schema && schema.not) { 155 - collectSchemaDependencies(schema.not, dependencies); 156 - } 157 - 158 - if ('oneOf' in schema && schema.oneOf) { 159 - for (const item of schema.oneOf) { 160 - collectSchemaDependencies(item, dependencies); 161 - } 162 - } 163 - 164 - if ('prefixItems' in schema && schema.prefixItems) { 165 - for (const item of schema.prefixItems) { 166 - collectSchemaDependencies(item, dependencies); 167 - } 168 - } 169 - }; 170 - 171 - const collectOpenApiV2Dependencies = (spec: OpenApi.V2_0_X, graph: Graph) => { 172 - if (spec.definitions) { 173 - for (const [key, schema] of Object.entries(spec.definitions)) { 174 - const dependencies = new Set<string>(); 175 - collectSchemaDependencies(schema, dependencies); 176 - graph.schemas.set(addNamespace('schema', key), { 177 - dependencies, 178 - deprecated: false, 179 - }); 180 - } 181 - 182 - // TODO: add parameters 183 - } 184 - 185 - if (spec.paths) { 186 - for (const entry of Object.entries(spec.paths)) { 187 - const path = entry[0] as keyof PathsObject; 188 - const pathItem = entry[1] as PathItemObject; 189 - for (const method of httpMethods) { 190 - const operation = pathItem[method]; 191 - if (!operation) { 192 - continue; 193 - } 194 - 195 - const dependencies = new Set<string>(); 196 - 197 - if (operation.requestBody) { 198 - if ('$ref' in operation.requestBody) { 199 - collectSchemaDependencies(operation.requestBody, dependencies); 200 - } else { 201 - for (const media of Object.values(operation.requestBody.content)) { 202 - if (media.schema) { 203 - collectSchemaDependencies(media.schema, dependencies); 204 - } 205 - } 206 - } 207 - } 208 - 209 - if (operation.responses) { 210 - for (const response of Object.values(operation.responses)) { 211 - if (!response) { 212 - continue; 213 - } 214 - 215 - if ('$ref' in response) { 216 - collectSchemaDependencies(response, dependencies); 217 - } else if (response.content) { 218 - for (const media of Object.values(response.content)) { 219 - if (media.schema) { 220 - collectSchemaDependencies(media.schema, dependencies); 221 - } 222 - } 223 - } 224 - } 225 - } 226 - 227 - if (operation.parameters) { 228 - for (const parameter of operation.parameters) { 229 - if ('$ref' in parameter) { 230 - collectSchemaDependencies(parameter, dependencies); 231 - } else if (parameter.schema) { 232 - collectSchemaDependencies(parameter.schema, dependencies); 233 - } 234 - } 235 - } 236 - 237 - graph.operations.set( 238 - addNamespace('operation', `${method.toUpperCase()} ${path}`), 239 - { 240 - dependencies, 241 - deprecated: Boolean(operation.deprecated), 242 - tags: new Set(operation.tags), 243 - }, 244 - ); 245 - } 246 - } 247 - } 248 - }; 249 - 250 - const collectOpenApiV3Dependencies = ( 251 - spec: OpenApi.V3_0_X | OpenApi.V3_1_X, 252 - graph: Graph, 253 - ) => { 254 - type ExtractedType<T> = T extends Record<string, infer V> ? V : never; 255 - 256 - if (spec.components) { 257 - // TODO: add other components 258 - if (spec.components.schemas) { 259 - type Schema = ExtractedType<typeof spec.components.schemas>; 260 - for (const [key, value] of Object.entries(spec.components.schemas)) { 261 - const schema = value as Schema; 262 - const dependencies = new Set<string>(); 263 - collectSchemaDependencies(schema, dependencies); 264 - graph.schemas.set(addNamespace('schema', key), { 265 - dependencies, 266 - deprecated: 267 - 'deprecated' in schema ? Boolean(schema.deprecated) : false, 268 - }); 269 - } 270 - } 271 - 272 - if (spec.components.parameters) { 273 - type Parameter = ExtractedType<typeof spec.components.parameters>; 274 - for (const [key, value] of Object.entries(spec.components.parameters)) { 275 - const parameter = value as Parameter; 276 - const dependencies = new Set<string>(); 277 - if ('$ref' in parameter) { 278 - collectSchemaDependencies(parameter, dependencies); 279 - } else { 280 - if (parameter.schema) { 281 - collectSchemaDependencies(parameter.schema, dependencies); 282 - } 283 - 284 - if (parameter.content) { 285 - for (const media of Object.values(parameter.content)) { 286 - if (media.schema) { 287 - collectSchemaDependencies(media.schema, dependencies); 288 - } 289 - } 290 - } 291 - } 292 - graph.parameters.set(addNamespace('parameter', key), { 293 - dependencies, 294 - deprecated: 295 - 'deprecated' in parameter ? Boolean(parameter.deprecated) : false, 296 - }); 297 - } 298 - } 299 - 300 - if (spec.components.requestBodies) { 301 - type RequestBody = ExtractedType<typeof spec.components.requestBodies>; 302 - for (const [key, value] of Object.entries( 303 - spec.components.requestBodies, 304 - )) { 305 - const requestBody = value as RequestBody; 306 - const dependencies = new Set<string>(); 307 - if ('$ref' in requestBody) { 308 - collectSchemaDependencies(requestBody, dependencies); 309 - } else { 310 - for (const media of Object.values(requestBody.content)) { 311 - if (media.schema) { 312 - collectSchemaDependencies(media.schema, dependencies); 313 - } 314 - } 315 - } 316 - graph.requestBodies.set(addNamespace('body', key), { 317 - dependencies, 318 - deprecated: false, 319 - }); 320 - } 321 - } 322 - 323 - if (spec.components.responses) { 324 - type Response = ExtractedType<typeof spec.components.responses>; 325 - for (const [key, value] of Object.entries(spec.components.responses)) { 326 - const response = value as Response; 327 - const dependencies = new Set<string>(); 328 - if ('$ref' in response) { 329 - collectSchemaDependencies(response, dependencies); 330 - } else { 331 - if (response.content) { 332 - for (const media of Object.values(response.content)) { 333 - if (media.schema) { 334 - collectSchemaDependencies(media.schema, dependencies); 335 - } 336 - } 337 - } 338 - } 339 - graph.responses.set(addNamespace('response', key), { 340 - dependencies, 341 - deprecated: false, 342 - }); 343 - } 344 - } 345 - } 346 - 347 - if (spec.paths) { 348 - for (const entry of Object.entries(spec.paths)) { 349 - const path = entry[0] as keyof PathsObject; 350 - const pathItem = entry[1] as PathItemObject; 351 - for (const method of httpMethods) { 352 - const operation = pathItem[method]; 353 - if (!operation) { 354 - continue; 355 - } 356 - 357 - const dependencies = new Set<string>(); 358 - 359 - if (operation.requestBody) { 360 - if ('$ref' in operation.requestBody) { 361 - collectSchemaDependencies(operation.requestBody, dependencies); 362 - } else { 363 - for (const media of Object.values(operation.requestBody.content)) { 364 - if (media.schema) { 365 - collectSchemaDependencies(media.schema, dependencies); 366 - } 367 - } 368 - } 369 - } 370 - 371 - if (operation.responses) { 372 - for (const response of Object.values(operation.responses)) { 373 - if (!response) { 374 - continue; 375 - } 376 - 377 - if ('$ref' in response) { 378 - collectSchemaDependencies(response, dependencies); 379 - } else if (response.content) { 380 - for (const media of Object.values(response.content)) { 381 - if (media.schema) { 382 - collectSchemaDependencies(media.schema, dependencies); 383 - } 384 - } 385 - } 386 - } 387 - } 388 - 389 - if (operation.parameters) { 390 - for (const parameter of operation.parameters) { 391 - if ('$ref' in parameter) { 392 - collectSchemaDependencies(parameter, dependencies); 393 - } else if (parameter.schema) { 394 - collectSchemaDependencies(parameter.schema, dependencies); 395 - } 396 - } 397 - } 398 - 399 - graph.operations.set( 400 - addNamespace('operation', `${method.toUpperCase()} ${path}`), 401 - { 402 - dependencies, 403 - deprecated: Boolean(operation.deprecated), 404 - tags: new Set(operation.tags), 405 - }, 406 - ); 407 - } 408 - } 409 - } 410 - }; 411 - 412 - export const createGraph = ( 413 - spec: OpenApi.V2_0_X | OpenApi.V3_0_X | OpenApi.V3_1_X, 414 - ): Graph => { 415 - const graph: Graph = { 416 - operations: new Map(), 417 - parameters: new Map(), 418 - requestBodies: new Map(), 419 - responses: new Map(), 420 - schemas: new Map(), 421 - }; 422 - 423 - if ('swagger' in spec) { 424 - collectOpenApiV2Dependencies(spec, graph); 425 - } else { 426 - collectOpenApiV3Dependencies(spec, graph); 427 - } 428 - 429 - return graph; 430 - };
+70
packages/openapi-ts/src/openApi/shared/utils/validator.ts
··· 1 + import colors from 'ansi-colors'; 2 + 3 + import type { IR } from '../../../ir/types'; 4 + 5 + export interface ValidatorError { 6 + /** 7 + * Machine-readable error code 8 + * 9 + * @example 10 + * 'invalid_type' 11 + */ 12 + code: 'invalid_type' | 'missing_required_field'; 13 + /** 14 + * Optional additional data. 15 + * 16 + * @example 17 + * 'expectedType' 18 + */ 19 + context?: Record<string, any>; 20 + /** 21 + * Human-readable error summary. 22 + */ 23 + message: string; 24 + /** 25 + * JSONPath-like array to pinpoint error location. 26 + */ 27 + path: ReadonlyArray<string | number>; 28 + /** 29 + * Error severity. 30 + */ 31 + severity: 'error' | 'warning'; 32 + } 33 + 34 + export interface ValidatorResult { 35 + errors: ReadonlyArray<ValidatorError>; 36 + valid: boolean; 37 + } 38 + 39 + const formatValidatorError = (error: ValidatorError): string => { 40 + const pathStr = error.path 41 + .map((segment) => (typeof segment === 'number' ? `[${segment}]` : segment)) 42 + .join('') 43 + .replace(/\.\[/g, '['); 44 + const level = 45 + error.severity === 'error' ? colors.bold.red : colors.bold.yellow; 46 + 47 + const highlightedMessage = error.message.replace(/`([^`]+)`/g, (_, code) => 48 + colors.yellow(`\`${code}\``), 49 + ); 50 + 51 + return `${level(`[${error.severity.toUpperCase()}]`)} ${colors.cyan(pathStr)}: ${highlightedMessage}`; 52 + }; 53 + 54 + export const handleValidatorResult = ({ 55 + context, 56 + result, 57 + }: { 58 + context: IR.Context; 59 + result: ValidatorResult; 60 + }) => { 61 + if (!context.config.input.validate_EXPERIMENTAL || result.valid) { 62 + return; 63 + } 64 + 65 + for (const error of result.errors) { 66 + console.log(formatValidatorError(error)); 67 + } 68 + 69 + process.exit(1); 70 + };
+12 -10
packages/openapi-ts/src/plugins/@hey-api/schemas/__tests__/schemas.test.ts
··· 19 19 exportCore: true, 20 20 input: { 21 21 path: '', 22 + validate_EXPERIMENTAL: false, 23 + watch: { 24 + enabled: false, 25 + interval: 1_000, 26 + timeout: 60_000, 27 + }, 22 28 }, 23 29 logs: { 24 30 file: true, ··· 60 66 }, 61 67 }, 62 68 useOptions: true, 63 - watch: { 64 - enabled: false, 65 - interval: 1_000, 66 - timeout: 60_000, 67 - }, 68 69 }); 69 70 70 71 if ('openapi' in openApi) { ··· 108 109 exportCore: true, 109 110 input: { 110 111 path: '', 112 + validate_EXPERIMENTAL: false, 113 + watch: { 114 + enabled: false, 115 + interval: 1_000, 116 + timeout: 60_000, 117 + }, 111 118 }, 112 119 logs: { 113 120 file: true, ··· 150 157 }, 151 158 }, 152 159 useOptions: true, 153 - watch: { 154 - enabled: false, 155 - interval: 1_000, 156 - timeout: 60_000, 157 - }, 158 160 }); 159 161 160 162 const schema: OpenApiV3Schema = {
+1 -1
packages/openapi-ts/src/plugins/@hey-api/schemas/plugin.ts
··· 471 471 }); 472 472 break; 473 473 default: 474 - break; 474 + throw new Error('Unsupported OpenAPI specification'); 475 475 } 476 476 };
+24 -20
packages/openapi-ts/src/plugins/@hey-api/sdk/__tests__/plugin.test.ts
··· 22 22 exportCore: true, 23 23 input: { 24 24 path: '', 25 + validate_EXPERIMENTAL: false, 26 + watch: { 27 + enabled: false, 28 + interval: 1_000, 29 + timeout: 60_000, 30 + }, 25 31 }, 26 32 logs: { 27 33 file: true, ··· 62 68 }, 63 69 }, 64 70 useOptions: false, 65 - watch: { 66 - enabled: false, 67 - interval: 1_000, 68 - timeout: 60_000, 69 - }, 70 71 }); 71 72 72 73 const client: Parameters<typeof handlerLegacy>[0]['client'] = { ··· 184 185 exportCore: true, 185 186 input: { 186 187 path: '', 188 + validate_EXPERIMENTAL: false, 189 + watch: { 190 + enabled: false, 191 + interval: 1_000, 192 + timeout: 60_000, 193 + }, 187 194 }, 188 195 logs: { 189 196 file: true, ··· 224 231 }, 225 232 }, 226 233 useOptions: false, 227 - watch: { 228 - enabled: false, 229 - interval: 1_000, 230 - timeout: 60_000, 231 - }, 232 234 }); 233 235 234 236 const files: Files = {}; ··· 268 270 exportCore: true, 269 271 input: { 270 272 path: '', 273 + validate_EXPERIMENTAL: false, 274 + watch: { 275 + enabled: false, 276 + interval: 1_000, 277 + timeout: 60_000, 278 + }, 271 279 }, 272 280 logs: { 273 281 file: true, ··· 309 317 }, 310 318 }, 311 319 useOptions: false, 312 - watch: { 313 - enabled: false, 314 - interval: 1_000, 315 - timeout: 60_000, 316 - }, 317 320 }); 318 321 319 322 const files: Files = {}; ··· 355 358 exportCore: true, 356 359 input: { 357 360 path: '', 361 + validate_EXPERIMENTAL: false, 362 + watch: { 363 + enabled: false, 364 + interval: 1_000, 365 + timeout: 60_000, 366 + }, 358 367 }, 359 368 logs: { 360 369 file: true, ··· 396 405 }, 397 406 }, 398 407 useOptions: false, 399 - watch: { 400 - enabled: false, 401 - interval: 1_000, 402 - timeout: 60_000, 403 - }, 404 408 }); 405 409 406 410 const files: Files = {};
+3 -4
packages/openapi-ts/src/plugins/@hey-api/sdk/types.d.ts
··· 108 108 // DEPRECATED OPTIONS BELOW 109 109 110 110 /** 111 - * @deprecated 112 - * 113 111 * **This feature works only with the legacy parser** 114 112 * 115 113 * Filter endpoints to be included in the generated SDK. The provided ··· 117 115 * included in the output. The input pattern this string will be tested 118 116 * against is `{method} {path}`. For example, you can match 119 117 * `POST /api/v1/foo` with `^POST /api/v1/foo$`. 118 + * 119 + * @deprecated 120 120 */ 121 121 // eslint-disable-next-line typescript-sort-keys/interface 122 122 filter?: string; 123 123 /** 124 - * @deprecated 125 - * 126 124 * Define shape of returned value from service calls 127 125 * 126 + * @deprecated 128 127 * @default 'body' 129 128 */ 130 129 response?: 'body' | 'response';
+6 -5
packages/openapi-ts/src/plugins/@hey-api/typescript/__tests__/plugin.test.ts
··· 19 19 exportCore: true, 20 20 input: { 21 21 path: '', 22 + validate_EXPERIMENTAL: false, 23 + watch: { 24 + enabled: false, 25 + interval: 1_000, 26 + timeout: 60_000, 27 + }, 22 28 }, 23 29 logs: { 24 30 file: true, ··· 60 66 }, 61 67 }, 62 68 useOptions: true, 63 - watch: { 64 - enabled: false, 65 - interval: 1_000, 66 - timeout: 60_000, 67 - }, 68 69 }); 69 70 70 71 const client: Parameters<typeof handlerLegacy>[0]['client'] = {
+4 -6
packages/openapi-ts/src/plugins/@hey-api/typescript/types.d.ts
··· 80 80 // DEPRECATED OPTIONS BELOW 81 81 82 82 /** 83 - * @deprecated 84 - * 85 83 * **This feature works only with the legacy parser** 86 84 * 87 85 * Include only types matching regular expression. 86 + * 87 + * @deprecated 88 88 */ 89 89 // eslint-disable-next-line typescript-sort-keys/interface 90 90 include?: string; 91 91 /** 92 - * @deprecated 93 - * 94 92 * **This feature works only with the legacy parser** 95 93 * 96 94 * Use your preferred naming pattern 97 95 * 96 + * @deprecated 98 97 * @default 'preserve' 99 98 */ 100 99 style?: 'PascalCase' | 'preserve'; 101 100 /** 102 - * @deprecated 103 - * 104 101 * **This feature works only with the legacy parser** 105 102 * 106 103 * Generate a tree of types containing all operations? It will be named 107 104 * $OpenApiTs. 108 105 * 106 + * @deprecated 109 107 * @default false 110 108 */ 111 109 tree?: boolean;
+2 -2
packages/openapi-ts/src/plugins/types.d.ts
··· 122 122 Pick<Required<BaseConfig>, 'exportFromIndex' | 'output'>; 123 123 124 124 /** 125 - * @deprecated 126 - * 127 125 * Plugin implementation for legacy parser. 126 + * 127 + * @deprecated 128 128 */ 129 129 export type LegacyHandler<Config extends BaseConfig> = (args: { 130 130 client: LegacyClient;
+53 -46
packages/openapi-ts/src/types/config.d.ts
··· 12 12 | 'snake_case' 13 13 | 'SCREAMING_SNAKE_CASE'; 14 14 15 + interface Watch { 16 + /** 17 + * Regenerate the client when the input file changes? 18 + * 19 + * @default false 20 + */ 21 + enabled?: boolean; 22 + /** 23 + * How often should we attempt to detect the input file change? (in ms) 24 + * 25 + * @default 1000 26 + */ 27 + interval?: number; 28 + /** 29 + * How long will we wait before the request times out? 30 + * 31 + * @default 60_000 32 + */ 33 + timeout?: number; 34 + } 35 + 15 36 interface Input { 16 37 /** 17 38 * **Requires `path` to start with `https://get.heyapi.dev` or be undefined** ··· 218 239 * the first match will be returned. 219 240 */ 220 241 tags?: ReadonlyArray<string>; 221 - 242 + /** 243 + * **This is an experimental feature.** 244 + * 245 + * Validate the input before generating output? This is an experimental, 246 + * lightweight feature and support will be added on an ad hoc basis. 247 + * 248 + * @default false 249 + */ 250 + validate_EXPERIMENTAL?: boolean; 222 251 /** 223 252 * **Requires `path` to start with `https://get.heyapi.dev` or be undefined** 224 253 * ··· 227 256 * the value. 228 257 */ 229 258 version?: string; 259 + /** 260 + * Regenerate the client when the input file changes? You can alternatively 261 + * pass a numeric value for the interval in ms. 262 + * 263 + * @default false 264 + */ 265 + watch?: boolean | number | Watch; 230 266 } 231 267 232 268 export interface UserConfig { ··· 362 398 * @default ['@hey-api/typescript', '@hey-api/sdk'] 363 399 */ 364 400 plugins?: ReadonlyArray<UserPlugins['name'] | UserPlugins>; 365 - /** 366 - * Regenerate the client when the input file changes? You can alternatively 367 - * pass a numeric value for the interval in ms. 368 - * 369 - * @default false 370 - */ 371 - watch?: 372 - | boolean 373 - | number 374 - | { 375 - /** 376 - * Regenerate the client when the input file changes? 377 - * 378 - * @default false 379 - */ 380 - enabled?: boolean; 381 - /** 382 - * How often should we attempt to detect the input file change? (in ms) 383 - * 384 - * @default 1000 385 - */ 386 - interval?: number; 387 - /** 388 - * How long will we wait before the request times out? 389 - * 390 - * @default 60_000 391 - */ 392 - timeout?: number; 393 - }; 394 401 395 402 // DEPRECATED OPTIONS BELOW 396 403 397 404 /** 398 - * @deprecated 399 - * 400 405 * Manually set base in OpenAPI config instead of inferring from server value 406 + * 407 + * @deprecated 401 408 */ 402 409 // eslint-disable-next-line typescript-sort-keys/interface 403 410 base?: string; 404 411 /** 405 - * @deprecated 406 - * 407 412 * Opt in to the experimental parser? 408 413 * 414 + * @deprecated 409 415 * @default true 410 416 */ 411 417 experimentalParser?: boolean; 412 418 /** 413 - * @deprecated 414 - * 415 419 * Generate core client classes? 416 420 * 421 + * @deprecated 417 422 * @default true 418 423 */ 419 424 exportCore?: boolean; 420 425 /** 421 - * @deprecated 422 - * 423 426 * Custom client class name. Please note this option is deprecated and 424 427 * will be removed in favor of clients. 425 428 * 429 + * @deprecated 426 430 * @link https://heyapi.dev/openapi-ts/migrating.html#deprecated-name 427 431 */ 428 432 name?: string; 429 433 /** 430 - * @deprecated 431 - * 432 434 * Path to custom request file. Please note this option is deprecated and 433 435 * will be removed in favor of clients. 434 436 * 437 + * @deprecated 435 438 * @link https://heyapi.dev/openapi-ts/migrating.html#deprecated-request 436 439 */ 437 440 request?: string; 438 441 /** 439 - * @deprecated 440 - * 441 442 * Use options or arguments functions. Please note this option is deprecated and 442 443 * will be removed in favor of clients. 443 444 * 444 - * @link https://heyapi.dev/openapi-ts/migrating.html#deprecated-useoptions 445 - * 445 + * @deprecated 446 446 * @default true 447 + * @link https://heyapi.dev/openapi-ts/migrating.html#deprecated-useoptions 447 448 */ 448 449 useOptions?: boolean; 450 + /** 451 + * @deprecated use `input.watch` instead 452 + */ 453 + watch?: boolean | number | Watch; 449 454 } 450 455 451 456 export type Config = Omit< ··· 460 465 | 'watch' 461 466 > & 462 467 Pick<UserConfig, 'base' | 'name' | 'request'> & { 463 - input: Omit<Input, 'path'> & Pick<Required<Input>, 'path'>; 468 + input: Omit<Input, 'path' | 'validate_EXPERIMENTAL' | 'watch'> & 469 + Pick<Required<Input>, 'path' | 'validate_EXPERIMENTAL'> & { 470 + watch: Extract<Required<Required<Input>['watch']>, object>; 471 + }; 464 472 logs: Extract<Required<UserConfig['logs']>, object>; 465 473 output: Extract<UserConfig['output'], object>; 466 474 pluginOrder: ReadonlyArray<ClientPlugins['name']>; ··· 468 476 ExtractArrayOfObjects<ReadonlyArray<ClientPlugins>, { name: string }>, 469 477 'name' 470 478 >; 471 - watch: Extract<Required<UserConfig['watch']>, object>; 472 479 };
+12 -10
packages/openapi-ts/src/utils/__tests__/handlebars.test.ts
··· 16 16 exportCore: true, 17 17 input: { 18 18 path: '', 19 + validate_EXPERIMENTAL: false, 20 + watch: { 21 + enabled: false, 22 + interval: 1_000, 23 + timeout: 60_000, 24 + }, 19 25 }, 20 26 logs: { 21 27 file: true, ··· 57 63 }, 58 64 }, 59 65 useOptions: false, 60 - watch: { 61 - enabled: false, 62 - interval: 1_000, 63 - timeout: 60_000, 64 - }, 65 66 }); 66 67 registerHandlebarHelpers(); 67 68 const helpers = Object.keys(Handlebars.helpers); ··· 83 84 exportCore: true, 84 85 input: { 85 86 path: '', 87 + validate_EXPERIMENTAL: false, 88 + watch: { 89 + enabled: false, 90 + interval: 1_000, 91 + timeout: 60_000, 92 + }, 86 93 }, 87 94 logs: { 88 95 file: true, ··· 124 131 }, 125 132 }, 126 133 useOptions: false, 127 - watch: { 128 - enabled: false, 129 - interval: 1_000, 130 - timeout: 60_000, 131 - }, 132 134 }); 133 135 const templates = registerHandlebarTemplates(); 134 136 expect(templates.core.settings).toBeDefined();
+6 -5
packages/openapi-ts/src/utils/__tests__/parse.test.ts
··· 11 11 exportCore: false, 12 12 input: { 13 13 path: '', 14 + validate_EXPERIMENTAL: false, 15 + watch: { 16 + enabled: false, 17 + interval: 1_000, 18 + timeout: 60_000, 19 + }, 14 20 }, 15 21 logs: { 16 22 file: true, ··· 37 43 }, 38 44 }, 39 45 useOptions: false, 40 - watch: { 41 - enabled: false, 42 - interval: 1_000, 43 - timeout: 60_000, 44 - }, 45 46 }; 46 47 47 48 const options1: Parameters<typeof setConfig>[0] = {
+333 -207
pnpm-lock.yaml
··· 43 43 version: 8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.17.0(jiti@2.4.2))(typescript@5.8.3) 44 44 '@vitest/coverage-v8': 45 45 specifier: 3.1.1 46 - version: 3.1.1(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 46 + version: 3.1.1(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 47 47 eslint: 48 48 specifier: 9.17.0 49 49 version: 9.17.0(jiti@2.4.2) ··· 85 85 version: 6.1.1(rollup@4.31.0)(typescript@5.8.3) 86 86 tsup: 87 87 specifier: 8.4.0 88 - version: 8.4.0(jiti@2.4.2)(postcss@8.5.4)(typescript@5.8.3)(yaml@2.7.0) 88 + version: 8.4.0(jiti@2.4.2)(postcss@8.5.4)(typescript@5.8.3)(yaml@2.8.0) 89 89 turbo: 90 - specifier: 2.5.3 91 - version: 2.5.3 90 + specifier: 2.5.4 91 + version: 2.5.4 92 92 typescript: 93 93 specifier: 5.8.3 94 94 version: 5.8.3 ··· 97 97 version: 8.29.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.8.3) 98 98 vitest: 99 99 specifier: 3.1.1 100 - version: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 100 + version: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 101 101 102 102 docs: 103 103 dependencies: ··· 159 159 version: 8.29.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.8.3) 160 160 '@vitejs/plugin-react': 161 161 specifier: 4.4.0-beta.1 162 - version: 4.4.0-beta.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 162 + version: 4.4.0-beta.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 163 163 autoprefixer: 164 164 specifier: 10.4.19 165 165 version: 10.4.19(postcss@8.4.41) ··· 186 186 version: 5.8.3 187 187 vite: 188 188 specifier: 6.2.7 189 - version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 189 + version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 190 190 191 191 examples/openapi-ts-fastify: 192 192 dependencies: ··· 217 217 version: 5.8.3 218 218 vite: 219 219 specifier: 6.2.7 220 - version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 220 + version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 221 221 vitest: 222 222 specifier: 3.1.1 223 - version: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 223 + version: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 224 224 225 225 examples/openapi-ts-fetch: 226 226 dependencies: ··· 263 263 version: 8.29.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.8.3) 264 264 '@vitejs/plugin-react': 265 265 specifier: 4.4.0-beta.1 266 - version: 4.4.0-beta.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 266 + version: 4.4.0-beta.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 267 267 autoprefixer: 268 268 specifier: 10.4.19 269 269 version: 10.4.19(postcss@8.4.41) ··· 290 290 version: 5.8.3 291 291 vite: 292 292 specifier: 6.2.7 293 - version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 293 + version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 294 294 295 295 examples/openapi-ts-next: 296 296 dependencies: ··· 342 342 version: link:../../packages/nuxt 343 343 nuxt: 344 344 specifier: 3.14.1592 345 - version: 3.14.1592(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.1)(encoding@0.1.13)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.6.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.41.1)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 345 + version: 3.14.1592(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.1)(encoding@0.1.13)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.6.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.41.1)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 346 346 vue: 347 347 specifier: 3.5.13 348 348 version: 3.5.13(typescript@5.8.3) ··· 355 355 devDependencies: 356 356 vite: 357 357 specifier: 6.2.7 358 - version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 358 + version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 359 359 360 360 examples/openapi-ts-sample: 361 361 dependencies: ··· 398 398 version: 8.29.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.8.3) 399 399 '@vitejs/plugin-react': 400 400 specifier: 4.4.0-beta.1 401 - version: 4.4.0-beta.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 401 + version: 4.4.0-beta.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 402 402 autoprefixer: 403 403 specifier: 10.4.19 404 404 version: 10.4.19(postcss@8.4.41) ··· 425 425 version: 5.8.3 426 426 vite: 427 427 specifier: 6.2.7 428 - version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 428 + version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 429 429 430 430 examples/openapi-ts-tanstack-angular-query-experimental: 431 431 dependencies: ··· 477 477 devDependencies: 478 478 '@angular-devkit/build-angular': 479 479 specifier: ^19.2.0 480 - version: 19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(typescript@5.8.3)(vite@6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(yaml@2.7.0) 480 + version: 19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(typescript@5.8.3)(vite@6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(yaml@2.8.0) 481 481 '@angular/cli': 482 482 specifier: ^19.2.0 483 483 version: 19.2.0(@types/node@22.10.5)(chokidar@4.0.3) ··· 559 559 version: 8.29.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.8.3) 560 560 '@vitejs/plugin-react': 561 561 specifier: 4.4.0-beta.1 562 - version: 4.4.0-beta.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 562 + version: 4.4.0-beta.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 563 563 autoprefixer: 564 564 specifier: 10.4.19 565 565 version: 10.4.19(postcss@8.4.41) ··· 586 586 version: 5.8.3 587 587 vite: 588 588 specifier: 6.2.7 589 - version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 589 + version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 590 590 591 591 examples/openapi-ts-tanstack-svelte-query: 592 592 dependencies: ··· 611 611 version: 2.0.0 612 612 '@sveltejs/adapter-auto': 613 613 specifier: 4.0.0 614 - version: 4.0.0(@sveltejs/kit@2.17.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)))(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))) 614 + version: 4.0.0(@sveltejs/kit@2.17.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)))(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))) 615 615 '@sveltejs/kit': 616 616 specifier: 2.17.1 617 - version: 2.17.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)))(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 617 + version: 2.17.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)))(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 618 618 '@sveltejs/vite-plugin-svelte': 619 619 specifier: 5.0.3 620 - version: 5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 620 + version: 5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 621 621 '@types/eslint': 622 622 specifier: 9.6.0 623 623 version: 9.6.0 ··· 653 653 version: 8.29.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.8.3) 654 654 vite: 655 655 specifier: 6.2.7 656 - version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 656 + version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 657 657 vitest: 658 658 specifier: 3.1.1 659 - version: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 659 + version: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 660 660 661 661 examples/openapi-ts-tanstack-vue-query: 662 662 dependencies: ··· 699 699 version: 22.10.5 700 700 '@vitejs/plugin-vue': 701 701 specifier: 5.2.1 702 - version: 5.2.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) 702 + version: 5.2.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3)) 703 703 '@vitejs/plugin-vue-jsx': 704 704 specifier: 4.1.1 705 - version: 4.1.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) 705 + version: 4.1.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3)) 706 706 '@vue/eslint-config-prettier': 707 707 specifier: 10.1.0 708 708 version: 10.1.0(@types/eslint@9.6.0)(eslint@9.17.0(jiti@2.4.2))(prettier@3.4.2) ··· 744 744 version: 5.8.3 745 745 vite: 746 746 specifier: 6.2.7 747 - version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 747 + version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 748 748 vite-plugin-vue-devtools: 749 749 specifier: 7.7.0 750 - version: 7.7.0(rollup@4.41.1)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) 750 + version: 7.7.0(rollup@4.41.1)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3)) 751 751 vitest: 752 752 specifier: 3.1.1 753 - version: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 753 + version: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 754 754 vue-tsc: 755 755 specifier: 2.2.0 756 756 version: 2.2.0(typescript@5.8.3) ··· 816 816 dependencies: 817 817 nuxt: 818 818 specifier: '>= 3.0.0 < 4' 819 - version: 3.14.1592(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.1)(encoding@0.1.13)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.6.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.41.1)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 819 + version: 3.14.1592(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.1)(encoding@0.1.13)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.6.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.41.1)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 820 820 vue: 821 821 specifier: '>= 3.5.13 < 4' 822 822 version: 3.5.13(typescript@5.8.3) ··· 832 832 version: link:../openapi-ts 833 833 '@nuxt/test-utils': 834 834 specifier: 3.17.2 835 - version: 3.17.2(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(yaml@2.7.0) 835 + version: 3.17.2(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(yaml@2.8.0) 836 836 vite: 837 837 specifier: 6.2.7 838 - version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 838 + version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 839 839 vitest: 840 840 specifier: 3.1.1 841 - version: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 841 + version: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 842 842 843 843 packages/config-vite-base: 844 844 dependencies: 845 845 vite: 846 846 specifier: ^6.2.7 847 - version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 847 + version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 848 848 vitest: 849 849 specifier: ^3.1.1 850 - version: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 850 + version: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 851 851 devDependencies: 852 852 typescript: 853 853 specifier: ^5.8.3 ··· 869 869 version: 1.7.4 870 870 nuxt: 871 871 specifier: '>= 3.0.0 < 4' 872 - version: 3.14.1592(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.1)(encoding@0.1.13)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.6.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 872 + version: 3.14.1592(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.1)(encoding@0.1.13)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.6.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 873 873 vue: 874 874 specifier: '>= 3.5.13 < 4' 875 875 version: 3.5.13(typescript@5.8.3) ··· 888 888 version: 3.16.2 889 889 '@nuxt/test-utils': 890 890 specifier: 3.17.2 891 - version: 3.17.2(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(yaml@2.7.0) 891 + version: 3.17.2(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(yaml@2.8.0) 892 892 vite: 893 893 specifier: 6.2.7 894 - version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 894 + version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 895 895 896 896 packages/openapi-ts: 897 897 dependencies: 898 898 '@hey-api/json-schema-ref-parser': 899 899 specifier: 1.0.6 900 900 version: 1.0.6 901 + ansi-colors: 902 + specifier: 4.1.3 903 + version: 4.1.3 901 904 c12: 902 905 specifier: 2.0.1 903 906 version: 2.0.1(magicast@0.3.5) 907 + color-support: 908 + specifier: 1.1.3 909 + version: 1.1.3 904 910 commander: 905 911 specifier: 13.0.0 906 912 version: 13.0.0 ··· 950 956 typescript: 951 957 specifier: 5.8.3 952 958 version: 5.8.3 959 + yaml: 960 + specifier: 2.8.0 961 + version: 2.8.0 953 962 954 963 packages/openapi-ts-tests: 955 964 devDependencies: 956 965 '@angular-devkit/build-angular': 957 966 specifier: 19.2.0 958 - version: 19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(yaml@2.7.0) 967 + version: 19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(yaml@2.8.0) 959 968 '@angular/animations': 960 969 specifier: 19.2.0 961 970 version: 19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)) ··· 1042 1051 version: 9.17.0(jiti@2.4.2) 1043 1052 express: 1044 1053 specifier: 4.21.0 1045 - version: 4.21.0 1054 + version: 4.21.0(supports-color@10.0.0) 1046 1055 fastify: 1047 1056 specifier: 5.2.0 1048 1057 version: 5.2.0 ··· 1054 1063 version: 3.3.2 1055 1064 nuxt: 1056 1065 specifier: 3.14.1592 1057 - version: 3.14.1592(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.1)(encoding@0.1.13)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.6.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.41.1)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 1066 + version: 3.14.1592(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.1)(encoding@0.1.13)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.6.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.41.1)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 1058 1067 prettier: 1059 1068 specifier: 3.4.2 1060 1069 version: 3.4.2 ··· 1093 1102 version: 5.8.3 1094 1103 vite: 1095 1104 specifier: 6.2.7 1096 - version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 1105 + version: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 1097 1106 1098 1107 packages: 1099 1108 ··· 6356 6365 color-string@1.9.1: 6357 6366 resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 6358 6367 6368 + color-support@1.1.3: 6369 + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} 6370 + hasBin: true 6371 + 6359 6372 color@4.2.3: 6360 6373 resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} 6361 6374 engines: {node: '>=12.5.0'} ··· 11075 11088 resolution: {integrity: sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA==} 11076 11089 engines: {node: ^18.17.0 || >=20.5.0} 11077 11090 11078 - turbo-darwin-64@2.5.3: 11079 - resolution: {integrity: sha512-YSItEVBUIvAGPUDpAB9etEmSqZI3T6BHrkBkeSErvICXn3dfqXUfeLx35LfptLDEbrzFUdwYFNmt8QXOwe9yaw==} 11091 + turbo-darwin-64@2.5.4: 11092 + resolution: {integrity: sha512-ah6YnH2dErojhFooxEzmvsoZQTMImaruZhFPfMKPBq8sb+hALRdvBNLqfc8NWlZq576FkfRZ/MSi4SHvVFT9PQ==} 11080 11093 cpu: [x64] 11081 11094 os: [darwin] 11082 11095 11083 - turbo-darwin-arm64@2.5.3: 11084 - resolution: {integrity: sha512-5PefrwHd42UiZX7YA9m1LPW6x9YJBDErXmsegCkVp+GjmWrADfEOxpFrGQNonH3ZMj77WZB2PVE5Aw3gA+IOhg==} 11096 + turbo-darwin-arm64@2.5.4: 11097 + resolution: {integrity: sha512-2+Nx6LAyuXw2MdXb7pxqle3MYignLvS7OwtsP9SgtSBaMlnNlxl9BovzqdYAgkUW3AsYiQMJ/wBRb7d+xemM5A==} 11085 11098 cpu: [arm64] 11086 11099 os: [darwin] 11087 11100 11088 - turbo-linux-64@2.5.3: 11089 - resolution: {integrity: sha512-M9xigFgawn5ofTmRzvjjLj3Lqc05O8VHKuOlWNUlnHPUltFquyEeSkpQNkE/vpPdOR14AzxqHbhhxtfS4qvb1w==} 11101 + turbo-linux-64@2.5.4: 11102 + resolution: {integrity: sha512-5May2kjWbc8w4XxswGAl74GZ5eM4Gr6IiroqdLhXeXyfvWEdm2mFYCSWOzz0/z5cAgqyGidF1jt1qzUR8hTmOA==} 11090 11103 cpu: [x64] 11091 11104 os: [linux] 11092 11105 11093 - turbo-linux-arm64@2.5.3: 11094 - resolution: {integrity: sha512-auJRbYZ8SGJVqvzTikpg1bsRAsiI9Tk0/SDkA5Xgg0GdiHDH/BOzv1ZjDE2mjmlrO/obr19Dw+39OlMhwLffrw==} 11106 + turbo-linux-arm64@2.5.4: 11107 + resolution: {integrity: sha512-/2yqFaS3TbfxV3P5yG2JUI79P7OUQKOUvAnx4MV9Bdz6jqHsHwc9WZPpO4QseQm+NvmgY6ICORnoVPODxGUiJg==} 11095 11108 cpu: [arm64] 11096 11109 os: [linux] 11097 11110 11098 - turbo-windows-64@2.5.3: 11099 - resolution: {integrity: sha512-arLQYohuHtIEKkmQSCU9vtrKUg+/1TTstWB9VYRSsz+khvg81eX6LYHtXJfH/dK7Ho6ck+JaEh5G+QrE1jEmCQ==} 11111 + turbo-windows-64@2.5.4: 11112 + resolution: {integrity: sha512-EQUO4SmaCDhO6zYohxIjJpOKRN3wlfU7jMAj3CgcyTPvQR/UFLEKAYHqJOnJtymbQmiiM/ihX6c6W6Uq0yC7mA==} 11100 11113 cpu: [x64] 11101 11114 os: [win32] 11102 11115 11103 - turbo-windows-arm64@2.5.3: 11104 - resolution: {integrity: sha512-3JPn66HAynJ0gtr6H+hjY4VHpu1RPKcEwGATvGUTmLmYSYBQieVlnGDRMMoYN066YfyPqnNGCfhYbXfH92Cm0g==} 11116 + turbo-windows-arm64@2.5.4: 11117 + resolution: {integrity: sha512-oQ8RrK1VS8lrxkLriotFq+PiF7iiGgkZtfLKF4DDKsmdbPo0O9R2mQxm7jHLuXraRCuIQDWMIw6dpcr7Iykf4A==} 11105 11118 cpu: [arm64] 11106 11119 os: [win32] 11107 11120 11108 - turbo@2.5.3: 11109 - resolution: {integrity: sha512-iHuaNcq5GZZnr3XDZNuu2LSyCzAOPwDuo5Qt+q64DfsTP1i3T2bKfxJhni2ZQxsvAoxRbuUK5QetJki4qc5aYA==} 11121 + turbo@2.5.4: 11122 + resolution: {integrity: sha512-kc8ZibdRcuWUG1pbYSBFWqmIjynlD8Lp7IB6U3vIzvOv9VG+6Sp8bzyeBWE3Oi8XV5KsQrznyRTBPvrf99E4mA==} 11110 11123 hasBin: true 11111 11124 11112 11125 type-check@0.4.0: ··· 12064 12077 engines: {node: '>= 14'} 12065 12078 hasBin: true 12066 12079 12080 + yaml@2.8.0: 12081 + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} 12082 + engines: {node: '>= 14.6'} 12083 + hasBin: true 12084 + 12067 12085 yargs-parser@20.2.9: 12068 12086 resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 12069 12087 engines: {node: '>=10'} ··· 12253 12271 transitivePeerDependencies: 12254 12272 - chokidar 12255 12273 12256 - '@angular-devkit/build-angular@19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(typescript@5.8.3)(vite@6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(yaml@2.7.0)': 12274 + '@angular-devkit/build-angular@19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(typescript@5.8.3)(vite@6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(yaml@2.8.0)': 12257 12275 dependencies: 12258 12276 '@ampproject/remapping': 2.3.0 12259 12277 '@angular-devkit/architect': 0.1902.0(chokidar@4.0.3) 12260 - '@angular-devkit/build-webpack': 0.1902.0(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.0)))(webpack@5.98.0(esbuild@0.25.0)) 12278 + '@angular-devkit/build-webpack': 0.1902.0(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.2)))(webpack@5.98.0(esbuild@0.25.0)) 12261 12279 '@angular-devkit/core': 19.2.0(chokidar@4.0.3) 12262 - '@angular/build': 19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.0) 12280 + '@angular/build': 19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0) 12263 12281 '@angular/compiler-cli': 19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3) 12264 12282 '@babel/core': 7.26.9 12265 12283 '@babel/generator': 7.26.9 ··· 12272 12290 '@babel/runtime': 7.26.9 12273 12291 '@discoveryjs/json-ext': 0.6.3 12274 12292 '@ngtools/webpack': 19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(typescript@5.8.3)(webpack@5.98.0(esbuild@0.25.0)) 12275 - '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 12293 + '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 12276 12294 ansi-colors: 4.1.3 12277 12295 autoprefixer: 10.4.20(postcss@8.5.2) 12278 12296 babel-loader: 9.2.1(@babel/core@7.26.9)(webpack@5.98.0(esbuild@0.25.0)) ··· 12307 12325 tree-kill: 1.2.2 12308 12326 tslib: 2.8.1 12309 12327 typescript: 5.8.3 12310 - webpack: 5.98.0(esbuild@0.25.2) 12311 - webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.0)) 12312 - webpack-dev-server: 5.2.0(webpack@5.98.0(esbuild@0.25.0)) 12328 + webpack: 5.98.0(esbuild@0.25.0) 12329 + webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.2)) 12330 + webpack-dev-server: 5.2.0(webpack@5.98.0(esbuild@0.25.2)) 12313 12331 webpack-merge: 6.0.1 12314 12332 webpack-subresource-integrity: 5.1.0(webpack@5.98.0(esbuild@0.25.0)) 12315 12333 optionalDependencies: ··· 12339 12357 - webpack-cli 12340 12358 - yaml 12341 12359 12342 - '@angular-devkit/build-angular@19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(yaml@2.7.0)': 12360 + '@angular-devkit/build-angular@19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(yaml@2.8.0)': 12343 12361 dependencies: 12344 12362 '@ampproject/remapping': 2.3.0 12345 12363 '@angular-devkit/architect': 0.1902.0(chokidar@4.0.3) 12346 - '@angular-devkit/build-webpack': 0.1902.0(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.0)))(webpack@5.98.0(esbuild@0.25.0)) 12364 + '@angular-devkit/build-webpack': 0.1902.0(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.2)))(webpack@5.98.0(esbuild@0.25.0)) 12347 12365 '@angular-devkit/core': 19.2.0(chokidar@4.0.3) 12348 - '@angular/build': 19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.0) 12366 + '@angular/build': 19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0) 12349 12367 '@angular/compiler-cli': 19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3) 12350 12368 '@babel/core': 7.26.9 12351 12369 '@babel/generator': 7.26.9 ··· 12358 12376 '@babel/runtime': 7.26.9 12359 12377 '@discoveryjs/json-ext': 0.6.3 12360 12378 '@ngtools/webpack': 19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(typescript@5.8.3)(webpack@5.98.0(esbuild@0.25.0)) 12361 - '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 12379 + '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 12362 12380 ansi-colors: 4.1.3 12363 12381 autoprefixer: 10.4.20(postcss@8.5.2) 12364 12382 babel-loader: 9.2.1(@babel/core@7.26.9)(webpack@5.98.0(esbuild@0.25.0)) ··· 12393 12411 tree-kill: 1.2.2 12394 12412 tslib: 2.8.1 12395 12413 typescript: 5.8.3 12396 - webpack: 5.98.0(esbuild@0.25.2) 12397 - webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.0)) 12398 - webpack-dev-server: 5.2.0(webpack@5.98.0(esbuild@0.25.0)) 12414 + webpack: 5.98.0(esbuild@0.25.0) 12415 + webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.2)) 12416 + webpack-dev-server: 5.2.0(webpack@5.98.0(esbuild@0.25.2)) 12399 12417 webpack-merge: 6.0.1 12400 12418 webpack-subresource-integrity: 5.1.0(webpack@5.98.0(esbuild@0.25.0)) 12401 12419 optionalDependencies: ··· 12425 12443 - webpack-cli 12426 12444 - yaml 12427 12445 12428 - '@angular-devkit/build-webpack@0.1902.0(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.0)))(webpack@5.98.0(esbuild@0.25.0))': 12446 + '@angular-devkit/build-webpack@0.1902.0(chokidar@4.0.3)(webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.2)))(webpack@5.98.0(esbuild@0.25.0))': 12429 12447 dependencies: 12430 12448 '@angular-devkit/architect': 0.1902.0(chokidar@4.0.3) 12431 12449 rxjs: 7.8.1 12432 - webpack: 5.98.0(esbuild@0.25.2) 12433 - webpack-dev-server: 5.2.0(webpack@5.98.0(esbuild@0.25.0)) 12450 + webpack: 5.98.0(esbuild@0.25.0) 12451 + webpack-dev-server: 5.2.0(webpack@5.98.0(esbuild@0.25.2)) 12434 12452 transitivePeerDependencies: 12435 12453 - chokidar 12436 12454 ··· 12460 12478 '@angular/core': 19.2.0(rxjs@7.8.1)(zone.js@0.15.0) 12461 12479 tslib: 2.8.1 12462 12480 12463 - '@angular/build@19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.0)': 12481 + '@angular/build@19.2.0(@angular/compiler-cli@19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3))(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(@types/node@22.10.5)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(tailwindcss@3.4.9(ts-node@10.9.2(@types/node@22.10.5)(typescript@5.8.3)))(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0)': 12464 12482 dependencies: 12465 12483 '@ampproject/remapping': 2.3.0 12466 12484 '@angular-devkit/architect': 0.1902.0(chokidar@4.0.3) ··· 12471 12489 '@babel/helper-split-export-declaration': 7.24.7 12472 12490 '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.9) 12473 12491 '@inquirer/confirm': 5.1.6(@types/node@22.10.5) 12474 - '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 12492 + '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 12475 12493 beasties: 0.2.0 12476 12494 browserslist: 4.24.4 12477 12495 esbuild: 0.25.0 ··· 12489 12507 semver: 7.7.1 12490 12508 source-map-support: 0.5.21 12491 12509 typescript: 5.8.3 12492 - vite: 6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 12510 + vite: 6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 12493 12511 watchpack: 2.4.2 12494 12512 optionalDependencies: 12495 12513 karma: 6.4.4 ··· 14071 14089 '@eslint/config-array@0.19.2': 14072 14090 dependencies: 14073 14091 '@eslint/object-schema': 2.1.6 14074 - debug: 4.4.0(supports-color@9.4.0) 14092 + debug: 4.4.0 14075 14093 minimatch: 3.1.2 14076 14094 transitivePeerDependencies: 14077 14095 - supports-color ··· 14087 14105 '@eslint/eslintrc@3.3.0': 14088 14106 dependencies: 14089 14107 ajv: 6.12.6 14090 - debug: 4.4.0(supports-color@9.4.0) 14108 + debug: 4.4.0 14091 14109 espree: 10.3.0 14092 14110 globals: 14.0.0 14093 14111 ignore: 5.3.2 ··· 14625 14643 dependencies: 14626 14644 '@angular/compiler-cli': 19.2.0(@angular/compiler@19.2.0(@angular/core@19.2.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.3) 14627 14645 typescript: 5.8.3 14628 - webpack: 5.98.0(esbuild@0.25.2) 14646 + webpack: 5.98.0(esbuild@0.25.0) 14629 14647 14630 14648 '@nodelib/fs.scandir@2.1.5': 14631 14649 dependencies: ··· 14702 14720 14703 14721 '@nuxt/devalue@2.0.2': {} 14704 14722 14705 - '@nuxt/devtools-kit@1.7.0(magicast@0.3.5)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))': 14723 + '@nuxt/devtools-kit@1.7.0(magicast@0.3.5)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))': 14706 14724 dependencies: 14707 14725 '@nuxt/kit': 3.15.4(magicast@0.3.5) 14708 14726 '@nuxt/schema': 3.16.2 14709 14727 execa: 7.2.0 14710 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 14728 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 14711 14729 transitivePeerDependencies: 14712 14730 - magicast 14713 14731 - supports-color ··· 14725 14743 rc9: 2.1.2 14726 14744 semver: 7.7.1 14727 14745 14728 - '@nuxt/devtools@1.7.0(rollup@3.29.5)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3))': 14746 + '@nuxt/devtools@1.7.0(rollup@3.29.5)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3))': 14729 14747 dependencies: 14730 14748 '@antfu/utils': 0.7.10 14731 - '@nuxt/devtools-kit': 1.7.0(magicast@0.3.5)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 14749 + '@nuxt/devtools-kit': 1.7.0(magicast@0.3.5)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 14732 14750 '@nuxt/devtools-wizard': 1.7.0 14733 14751 '@nuxt/kit': 3.15.4(magicast@0.3.5) 14734 - '@vue/devtools-core': 7.6.8(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) 14752 + '@vue/devtools-core': 7.6.8(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3)) 14735 14753 '@vue/devtools-kit': 7.6.8 14736 14754 birpc: 0.2.19 14737 14755 consola: 3.4.0 ··· 14760 14778 sirv: 3.0.1 14761 14779 tinyglobby: 0.2.12 14762 14780 unimport: 3.14.6(rollup@3.29.5) 14763 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 14764 - vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@3.29.5)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 14765 - vite-plugin-vue-inspector: 5.3.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 14781 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 14782 + vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@3.29.5)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 14783 + vite-plugin-vue-inspector: 5.3.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 14766 14784 which: 3.0.1 14767 14785 ws: 8.18.1 14768 14786 transitivePeerDependencies: ··· 14772 14790 - utf-8-validate 14773 14791 - vue 14774 14792 14775 - '@nuxt/devtools@1.7.0(rollup@4.41.1)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3))': 14793 + '@nuxt/devtools@1.7.0(rollup@4.41.1)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3))': 14776 14794 dependencies: 14777 14795 '@antfu/utils': 0.7.10 14778 - '@nuxt/devtools-kit': 1.7.0(magicast@0.3.5)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 14796 + '@nuxt/devtools-kit': 1.7.0(magicast@0.3.5)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 14779 14797 '@nuxt/devtools-wizard': 1.7.0 14780 14798 '@nuxt/kit': 3.15.4(magicast@0.3.5) 14781 - '@vue/devtools-core': 7.6.8(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) 14799 + '@vue/devtools-core': 7.6.8(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3)) 14782 14800 '@vue/devtools-kit': 7.6.8 14783 14801 birpc: 0.2.19 14784 14802 consola: 3.4.0 ··· 14807 14825 sirv: 3.0.1 14808 14826 tinyglobby: 0.2.12 14809 14827 unimport: 3.14.6(rollup@4.41.1) 14810 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 14811 - vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.41.1)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 14812 - vite-plugin-vue-inspector: 5.3.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 14828 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 14829 + vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.41.1)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 14830 + vite-plugin-vue-inspector: 5.3.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 14813 14831 which: 3.0.1 14814 14832 ws: 8.18.1 14815 14833 transitivePeerDependencies: ··· 15011 15029 - magicast 15012 15030 - supports-color 15013 15031 15014 - '@nuxt/test-utils@3.17.2(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(yaml@2.7.0)': 15032 + '@nuxt/test-utils@3.17.2(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(yaml@2.8.0)': 15015 15033 dependencies: 15016 15034 '@nuxt/kit': 3.16.2(magicast@0.3.5) 15017 15035 '@nuxt/schema': 3.16.2 ··· 15036 15054 tinyexec: 0.3.2 15037 15055 ufo: 1.5.4 15038 15056 unplugin: 2.2.0 15039 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 15040 - vitest-environment-nuxt: 1.0.1(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(yaml@2.7.0) 15057 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 15058 + vitest-environment-nuxt: 1.0.1(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(yaml@2.8.0) 15041 15059 vue: 3.5.13(typescript@5.8.3) 15042 15060 optionalDependencies: 15043 15061 '@vue/test-utils': 2.4.6 15044 15062 jsdom: 23.0.0 15045 - vitest: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 15063 + vitest: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 15046 15064 transitivePeerDependencies: 15047 15065 - '@types/node' 15048 15066 - jiti ··· 16423 16441 16424 16442 '@stackblitz/sdk@1.11.0': {} 16425 16443 16426 - '@sveltejs/adapter-auto@4.0.0(@sveltejs/kit@2.17.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)))(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)))': 16444 + '@sveltejs/adapter-auto@4.0.0(@sveltejs/kit@2.17.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)))(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)))': 16427 16445 dependencies: 16428 - '@sveltejs/kit': 2.17.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)))(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 16446 + '@sveltejs/kit': 2.17.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)))(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 16429 16447 import-meta-resolve: 4.1.0 16430 16448 16431 - '@sveltejs/kit@2.17.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)))(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))': 16449 + '@sveltejs/kit@2.17.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)))(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))': 16432 16450 dependencies: 16433 - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 16451 + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 16434 16452 '@types/cookie': 0.6.0 16435 16453 cookie: 0.6.0 16436 16454 devalue: 5.1.1 ··· 16443 16461 set-cookie-parser: 2.7.1 16444 16462 sirv: 3.0.1 16445 16463 svelte: 5.19.9 16446 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 16464 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 16447 16465 16448 - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)))(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))': 16466 + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)))(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))': 16449 16467 dependencies: 16450 - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 16468 + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 16451 16469 debug: 4.4.0(supports-color@9.4.0) 16452 16470 svelte: 5.19.9 16453 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 16471 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 16454 16472 transitivePeerDependencies: 16455 16473 - supports-color 16456 16474 16457 - '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))': 16475 + '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))': 16458 16476 dependencies: 16459 - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)))(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 16477 + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)))(svelte@5.19.9)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 16460 16478 debug: 4.4.0(supports-color@9.4.0) 16461 16479 deepmerge: 4.3.1 16462 16480 kleur: 4.1.5 16463 16481 magic-string: 0.30.17 16464 16482 svelte: 5.19.9 16465 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 16466 - vitefu: 1.0.6(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 16483 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 16484 + vitefu: 1.0.6(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 16467 16485 transitivePeerDependencies: 16468 16486 - supports-color 16469 16487 ··· 16904 16922 - rollup 16905 16923 - supports-color 16906 16924 16907 - '@vitejs/plugin-basic-ssl@1.2.0(vite@6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))': 16925 + '@vitejs/plugin-basic-ssl@1.2.0(vite@6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))': 16908 16926 dependencies: 16909 - vite: 6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 16927 + vite: 6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 16910 16928 16911 - '@vitejs/plugin-basic-ssl@1.2.0(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))': 16929 + '@vitejs/plugin-basic-ssl@1.2.0(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))': 16912 16930 dependencies: 16913 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 16931 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 16914 16932 16915 - '@vitejs/plugin-react@4.4.0-beta.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))': 16933 + '@vitejs/plugin-react@4.4.0-beta.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))': 16916 16934 dependencies: 16917 16935 '@babel/core': 7.26.10 16918 16936 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) 16919 16937 '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) 16920 16938 '@types/babel__core': 7.20.5 16921 16939 react-refresh: 0.14.2 16922 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 16940 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 16923 16941 transitivePeerDependencies: 16924 16942 - supports-color 16925 16943 ··· 16933 16951 transitivePeerDependencies: 16934 16952 - supports-color 16935 16953 16936 - '@vitejs/plugin-vue-jsx@4.1.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3))': 16954 + '@vitejs/plugin-vue-jsx@4.1.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3))': 16937 16955 dependencies: 16938 16956 '@babel/core': 7.26.10 16939 16957 '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.10) 16940 16958 '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.26.10) 16941 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 16959 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 16942 16960 vue: 3.5.13(typescript@5.8.3) 16943 16961 transitivePeerDependencies: 16944 16962 - supports-color ··· 16953 16971 vite: 5.4.19(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.39.0) 16954 16972 vue: 3.5.13(typescript@5.8.3) 16955 16973 16956 - '@vitejs/plugin-vue@5.2.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3))': 16974 + '@vitejs/plugin-vue@5.2.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3))': 16957 16975 dependencies: 16958 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 16976 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 16959 16977 vue: 3.5.13(typescript@5.8.3) 16960 16978 16961 - '@vitest/coverage-v8@3.1.1(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))': 16979 + '@vitest/coverage-v8@3.1.1(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))': 16962 16980 dependencies: 16963 16981 '@ampproject/remapping': 2.3.0 16964 16982 '@bcoe/v8-coverage': 1.0.2 ··· 16972 16990 std-env: 3.8.1 16973 16991 test-exclude: 7.0.1 16974 16992 tinyrainbow: 2.0.0 16975 - vitest: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 16993 + vitest: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 16976 16994 transitivePeerDependencies: 16977 16995 - supports-color 16978 16996 ··· 16983 17001 chai: 5.2.0 16984 17002 tinyrainbow: 2.0.0 16985 17003 16986 - '@vitest/mocker@3.1.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))': 17004 + '@vitest/mocker@3.1.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))': 16987 17005 dependencies: 16988 17006 '@vitest/spy': 3.1.1 16989 17007 estree-walker: 3.0.3 16990 17008 magic-string: 0.30.17 16991 17009 optionalDependencies: 16992 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 17010 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 16993 17011 16994 17012 '@vitest/pretty-format@3.1.1': 16995 17013 dependencies: ··· 17109 17127 dependencies: 17110 17128 '@vue/devtools-kit': 7.7.2 17111 17129 17112 - '@vue/devtools-core@7.6.8(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3))': 17130 + '@vue/devtools-core@7.6.8(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3))': 17113 17131 dependencies: 17114 17132 '@vue/devtools-kit': 7.7.2 17115 17133 '@vue/devtools-shared': 7.7.2 17116 17134 mitt: 3.0.1 17117 17135 nanoid: 5.1.5 17118 17136 pathe: 1.1.2 17119 - vite-hot-client: 0.2.4(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 17137 + vite-hot-client: 0.2.4(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 17120 17138 vue: 3.5.13(typescript@5.8.3) 17121 17139 transitivePeerDependencies: 17122 17140 - vite 17123 17141 17124 - '@vue/devtools-core@7.7.2(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3))': 17142 + '@vue/devtools-core@7.7.2(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3))': 17125 17143 dependencies: 17126 17144 '@vue/devtools-kit': 7.7.2 17127 17145 '@vue/devtools-shared': 7.7.2 17128 17146 mitt: 3.0.1 17129 17147 nanoid: 5.1.3 17130 17148 pathe: 2.0.3 17131 - vite-hot-client: 0.2.4(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 17149 + vite-hot-client: 0.2.4(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 17132 17150 vue: 3.5.13(typescript@5.8.3) 17133 17151 transitivePeerDependencies: 17134 17152 - vite ··· 17649 17667 17650 17668 axios@1.8.2: 17651 17669 dependencies: 17652 - follow-redirects: 1.15.9(debug@4.4.0) 17670 + follow-redirects: 1.15.9 17653 17671 form-data: 4.0.2 17654 17672 proxy-from-env: 1.1.0 17655 17673 transitivePeerDependencies: ··· 17664 17682 '@babel/core': 7.26.9 17665 17683 find-cache-dir: 4.0.0 17666 17684 schema-utils: 4.3.0 17667 - webpack: 5.98.0(esbuild@0.25.2) 17685 + webpack: 5.98.0(esbuild@0.25.0) 17668 17686 17669 17687 babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.9): 17670 17688 dependencies: ··· 17783 17801 transitivePeerDependencies: 17784 17802 - supports-color 17785 17803 17804 + body-parser@1.20.3(supports-color@10.0.0): 17805 + dependencies: 17806 + bytes: 3.1.2 17807 + content-type: 1.0.5 17808 + debug: 2.6.9(supports-color@10.0.0) 17809 + depd: 2.0.0 17810 + destroy: 1.2.0 17811 + http-errors: 2.0.0 17812 + iconv-lite: 0.4.24 17813 + on-finished: 2.4.1 17814 + qs: 6.13.0 17815 + raw-body: 2.5.2 17816 + type-is: 1.6.18 17817 + unpipe: 1.0.0 17818 + transitivePeerDependencies: 17819 + - supports-color 17820 + 17786 17821 bonjour-service@1.3.0: 17787 17822 dependencies: 17788 17823 fast-deep-equal: 3.1.3 ··· 18069 18104 color-name: 1.1.4 18070 18105 simple-swizzle: 0.2.2 18071 18106 18107 + color-support@1.1.3: {} 18108 + 18072 18109 color@4.2.3: 18073 18110 dependencies: 18074 18111 color-convert: 2.0.1 ··· 18122 18159 dependencies: 18123 18160 bytes: 3.1.2 18124 18161 compressible: 2.0.18 18125 - debug: 2.6.9 18162 + debug: 2.6.9(supports-color@10.0.0) 18126 18163 negotiator: 0.6.4 18127 18164 on-headers: 1.0.2 18128 18165 safe-buffer: 5.2.1 ··· 18145 18182 18146 18183 connect@3.7.0: 18147 18184 dependencies: 18148 - debug: 2.6.9 18185 + debug: 2.6.9(supports-color@10.0.0) 18149 18186 finalhandler: 1.1.2 18150 18187 parseurl: 1.3.3 18151 18188 utils-merge: 1.0.1 ··· 18196 18233 normalize-path: 3.0.0 18197 18234 schema-utils: 4.3.0 18198 18235 serialize-javascript: 6.0.2 18199 - webpack: 5.98.0(esbuild@0.25.2) 18236 + webpack: 5.98.0(esbuild@0.25.0) 18200 18237 18201 18238 core-js-compat@3.41.0: 18202 18239 dependencies: ··· 18268 18305 postcss-value-parser: 4.2.0 18269 18306 semver: 7.7.1 18270 18307 optionalDependencies: 18271 - webpack: 5.98.0(esbuild@0.25.2) 18308 + webpack: 5.98.0(esbuild@0.25.0) 18272 18309 18273 18310 css-select@5.1.0: 18274 18311 dependencies: ··· 18389 18426 dependencies: 18390 18427 ms: 2.0.0 18391 18428 18429 + debug@2.6.9(supports-color@10.0.0): 18430 + dependencies: 18431 + ms: 2.0.0 18432 + optionalDependencies: 18433 + supports-color: 10.0.0 18434 + 18392 18435 debug@3.2.7: 18393 18436 dependencies: 18394 18437 ms: 2.1.3 ··· 18398 18441 ms: 2.1.2 18399 18442 18400 18443 debug@4.3.7: 18444 + dependencies: 18445 + ms: 2.1.3 18446 + 18447 + debug@4.4.0: 18401 18448 dependencies: 18402 18449 ms: 2.1.3 18403 18450 ··· 19174 19221 ajv: 6.12.6 19175 19222 chalk: 4.1.2 19176 19223 cross-spawn: 7.0.6 19177 - debug: 4.4.0(supports-color@9.4.0) 19224 + debug: 4.4.0 19178 19225 escape-string-regexp: 4.0.0 19179 19226 eslint-scope: 8.3.0 19180 19227 eslint-visitor-keys: 4.2.0 ··· 19333 19380 transitivePeerDependencies: 19334 19381 - supports-color 19335 19382 19383 + express@4.21.0(supports-color@10.0.0): 19384 + dependencies: 19385 + accepts: 1.3.8 19386 + array-flatten: 1.1.1 19387 + body-parser: 1.20.3(supports-color@10.0.0) 19388 + content-disposition: 0.5.4 19389 + content-type: 1.0.5 19390 + cookie: 0.6.0 19391 + cookie-signature: 1.0.6 19392 + debug: 2.6.9(supports-color@10.0.0) 19393 + depd: 2.0.0 19394 + encodeurl: 2.0.0 19395 + escape-html: 1.0.3 19396 + etag: 1.8.1 19397 + finalhandler: 1.3.1(supports-color@10.0.0) 19398 + fresh: 0.5.2 19399 + http-errors: 2.0.0 19400 + merge-descriptors: 1.0.3 19401 + methods: 1.1.2 19402 + on-finished: 2.4.1 19403 + parseurl: 1.3.3 19404 + path-to-regexp: 0.1.10 19405 + proxy-addr: 2.0.7 19406 + qs: 6.13.0 19407 + range-parser: 1.2.1 19408 + safe-buffer: 5.2.1 19409 + send: 0.19.0(supports-color@10.0.0) 19410 + serve-static: 1.16.2(supports-color@10.0.0) 19411 + setprototypeof: 1.2.0 19412 + statuses: 2.0.1 19413 + type-is: 1.6.18 19414 + utils-merge: 1.0.1 19415 + vary: 1.1.2 19416 + transitivePeerDependencies: 19417 + - supports-color 19418 + 19336 19419 express@4.21.2: 19337 19420 dependencies: 19338 19421 accepts: 1.3.8 19339 19422 array-flatten: 1.1.1 19340 - body-parser: 1.20.3 19423 + body-parser: 1.20.3(supports-color@10.0.0) 19341 19424 content-disposition: 0.5.4 19342 19425 content-type: 1.0.5 19343 19426 cookie: 0.7.1 19344 19427 cookie-signature: 1.0.6 19345 - debug: 2.6.9 19428 + debug: 2.6.9(supports-color@10.0.0) 19346 19429 depd: 2.0.0 19347 19430 encodeurl: 2.0.0 19348 19431 escape-html: 1.0.3 19349 19432 etag: 1.8.1 19350 - finalhandler: 1.3.1 19433 + finalhandler: 1.3.1(supports-color@10.0.0) 19351 19434 fresh: 0.5.2 19352 19435 http-errors: 2.0.0 19353 19436 merge-descriptors: 1.0.3 ··· 19359 19442 qs: 6.13.0 19360 19443 range-parser: 1.2.1 19361 19444 safe-buffer: 5.2.1 19362 - send: 0.19.0 19363 - serve-static: 1.16.2 19445 + send: 0.19.0(supports-color@10.0.0) 19446 + serve-static: 1.16.2(supports-color@10.0.0) 19364 19447 setprototypeof: 1.2.0 19365 19448 statuses: 2.0.1 19366 19449 type-is: 1.6.18 ··· 19513 19596 19514 19597 finalhandler@1.1.2: 19515 19598 dependencies: 19516 - debug: 2.6.9 19599 + debug: 2.6.9(supports-color@10.0.0) 19517 19600 encodeurl: 1.0.2 19518 19601 escape-html: 1.0.3 19519 19602 on-finished: 2.3.0 ··· 19535 19618 transitivePeerDependencies: 19536 19619 - supports-color 19537 19620 19621 + finalhandler@1.3.1(supports-color@10.0.0): 19622 + dependencies: 19623 + debug: 2.6.9(supports-color@10.0.0) 19624 + encodeurl: 2.0.0 19625 + escape-html: 1.0.3 19626 + on-finished: 2.4.1 19627 + parseurl: 1.3.3 19628 + statuses: 2.0.1 19629 + unpipe: 1.0.0 19630 + transitivePeerDependencies: 19631 + - supports-color 19632 + 19538 19633 find-cache-dir@4.0.0: 19539 19634 dependencies: 19540 19635 common-path-prefix: 3.0.0 ··· 19573 19668 focus-trap@7.6.4: 19574 19669 dependencies: 19575 19670 tabbable: 6.2.0 19671 + 19672 + follow-redirects@1.15.9: {} 19576 19673 19577 19674 follow-redirects@1.15.9(debug@4.4.0): 19578 19675 optionalDependencies: ··· 20557 20654 karma@6.4.4: 20558 20655 dependencies: 20559 20656 '@colors/colors': 1.5.0 20560 - body-parser: 1.20.3 20657 + body-parser: 1.20.3(supports-color@10.0.0) 20561 20658 braces: 3.0.3 20562 20659 chokidar: 3.6.0 20563 20660 connect: 3.7.0 ··· 20623 20720 dependencies: 20624 20721 less: 4.2.2 20625 20722 optionalDependencies: 20626 - webpack: 5.98.0(esbuild@0.25.2) 20723 + webpack: 5.98.0(esbuild@0.25.0) 20627 20724 20628 20725 less@4.2.2: 20629 20726 dependencies: ··· 20648 20745 dependencies: 20649 20746 webpack-sources: 3.2.3 20650 20747 optionalDependencies: 20651 - webpack: 5.98.0(esbuild@0.25.2) 20748 + webpack: 5.98.0(esbuild@0.25.0) 20652 20749 20653 20750 light-my-request@6.6.0: 20654 20751 dependencies: ··· 20976 21073 dependencies: 20977 21074 schema-utils: 4.3.0 20978 21075 tapable: 2.2.1 20979 - webpack: 5.98.0(esbuild@0.25.2) 21076 + webpack: 5.98.0(esbuild@0.25.0) 20980 21077 20981 21078 minimalistic-assert@1.0.1: {} 20982 21079 ··· 21241 21338 scule: 1.3.0 21242 21339 semver: 7.7.1 21243 21340 serve-placeholder: 2.0.2 21244 - serve-static: 1.16.2 21341 + serve-static: 1.16.2(supports-color@10.0.0) 21245 21342 source-map: 0.7.4 21246 21343 std-env: 3.8.1 21247 21344 ufo: 1.5.4 ··· 21424 21521 21425 21522 nuxi@3.22.5: {} 21426 21523 21427 - nuxt@3.14.1592(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.1)(encoding@0.1.13)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.6.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)): 21524 + nuxt@3.14.1592(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.1)(encoding@0.1.13)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.6.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)): 21428 21525 dependencies: 21429 21526 '@nuxt/devalue': 2.0.2 21430 - '@nuxt/devtools': 1.7.0(rollup@3.29.5)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) 21527 + '@nuxt/devtools': 1.7.0(rollup@3.29.5)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3)) 21431 21528 '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@3.29.5) 21432 21529 '@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@3.29.5) 21433 21530 '@nuxt/telemetry': 2.6.5(magicast@0.3.5) ··· 21544 21641 - vue-tsc 21545 21642 - xml2js 21546 21643 21547 - nuxt@3.14.1592(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.1)(encoding@0.1.13)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.6.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.41.1)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)): 21644 + nuxt@3.14.1592(@parcel/watcher@2.5.1)(@types/node@22.10.5)(db0@0.3.1)(encoding@0.1.13)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.6.0)(less@4.2.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.41.1)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)): 21548 21645 dependencies: 21549 21646 '@nuxt/devalue': 2.0.2 21550 - '@nuxt/devtools': 1.7.0(rollup@4.41.1)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) 21647 + '@nuxt/devtools': 1.7.0(rollup@4.41.1)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3)) 21551 21648 '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.41.1) 21552 21649 '@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@4.41.1) 21553 21650 '@nuxt/telemetry': 2.6.5(magicast@0.3.5) ··· 22164 22261 postcss: 8.4.41 22165 22262 ts-node: 10.9.2(@types/node@22.10.5)(typescript@5.8.3) 22166 22263 22167 - postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.4)(yaml@2.7.0): 22264 + postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.4)(yaml@2.8.0): 22168 22265 dependencies: 22169 22266 lilconfig: 3.1.3 22170 22267 optionalDependencies: 22171 22268 jiti: 2.4.2 22172 22269 postcss: 8.5.4 22173 - yaml: 2.7.0 22270 + yaml: 2.8.0 22174 22271 22175 22272 postcss-loader@8.1.1(postcss@8.5.2)(typescript@5.8.3)(webpack@5.98.0(esbuild@0.25.0)): 22176 22273 dependencies: ··· 22179 22276 postcss: 8.5.2 22180 22277 semver: 7.7.1 22181 22278 optionalDependencies: 22182 - webpack: 5.98.0(esbuild@0.25.2) 22279 + webpack: 5.98.0(esbuild@0.25.0) 22183 22280 transitivePeerDependencies: 22184 22281 - typescript 22185 22282 ··· 22947 23044 neo-async: 2.6.2 22948 23045 optionalDependencies: 22949 23046 sass: 1.85.0 22950 - webpack: 5.98.0(esbuild@0.25.2) 23047 + webpack: 5.98.0(esbuild@0.25.0) 22951 23048 22952 23049 sass@1.85.0: 22953 23050 dependencies: ··· 23015 23112 transitivePeerDependencies: 23016 23113 - supports-color 23017 23114 23115 + send@0.19.0(supports-color@10.0.0): 23116 + dependencies: 23117 + debug: 2.6.9(supports-color@10.0.0) 23118 + depd: 2.0.0 23119 + destroy: 1.2.0 23120 + encodeurl: 1.0.2 23121 + escape-html: 1.0.3 23122 + etag: 1.8.1 23123 + fresh: 0.5.2 23124 + http-errors: 2.0.0 23125 + mime: 1.6.0 23126 + ms: 2.1.3 23127 + on-finished: 2.4.1 23128 + range-parser: 1.2.1 23129 + statuses: 2.0.1 23130 + transitivePeerDependencies: 23131 + - supports-color 23132 + 23018 23133 serialize-javascript@6.0.2: 23019 23134 dependencies: 23020 23135 randombytes: 2.1.0 ··· 23029 23144 dependencies: 23030 23145 accepts: 1.3.8 23031 23146 batch: 0.6.1 23032 - debug: 2.6.9 23147 + debug: 2.6.9(supports-color@10.0.0) 23033 23148 escape-html: 1.0.3 23034 23149 http-errors: 1.6.3 23035 23150 mime-types: 2.1.35 ··· 23050 23165 transitivePeerDependencies: 23051 23166 - supports-color 23052 23167 23168 + serve-static@1.16.2(supports-color@10.0.0): 23169 + dependencies: 23170 + encodeurl: 2.0.0 23171 + escape-html: 1.0.3 23172 + parseurl: 1.3.3 23173 + send: 0.19.0(supports-color@10.0.0) 23174 + transitivePeerDependencies: 23175 + - supports-color 23176 + 23053 23177 set-cookie-parser@2.7.1: {} 23054 23178 23055 23179 set-function-length@1.2.2: ··· 23287 23411 dependencies: 23288 23412 iconv-lite: 0.6.3 23289 23413 source-map-js: 1.2.1 23290 - webpack: 5.98.0(esbuild@0.25.2) 23414 + webpack: 5.98.0(esbuild@0.25.0) 23291 23415 23292 23416 source-map-support@0.5.21: 23293 23417 dependencies: ··· 23668 23792 23669 23793 term-size@2.2.1: {} 23670 23794 23671 - terser-webpack-plugin@5.3.14(esbuild@0.25.2)(webpack@5.98.0(esbuild@0.25.0)): 23795 + terser-webpack-plugin@5.3.14(esbuild@0.25.0)(webpack@5.98.0(esbuild@0.25.2)): 23672 23796 dependencies: 23673 23797 '@jridgewell/trace-mapping': 0.3.25 23674 23798 jest-worker: 27.5.1 23675 23799 schema-utils: 4.3.0 23676 23800 serialize-javascript: 6.0.2 23677 23801 terser: 5.39.0 23678 - webpack: 5.98.0(esbuild@0.25.2) 23802 + webpack: 5.98.0(esbuild@0.25.0) 23679 23803 optionalDependencies: 23680 - esbuild: 0.25.2 23804 + esbuild: 0.25.0 23681 23805 23682 23806 terser@5.39.0: 23683 23807 dependencies: ··· 23818 23942 23819 23943 tslib@2.8.1: {} 23820 23944 23821 - tsup@8.4.0(jiti@2.4.2)(postcss@8.5.4)(typescript@5.8.3)(yaml@2.7.0): 23945 + tsup@8.4.0(jiti@2.4.2)(postcss@8.5.4)(typescript@5.8.3)(yaml@2.8.0): 23822 23946 dependencies: 23823 23947 bundle-require: 5.1.0(esbuild@0.25.2) 23824 23948 cac: 6.7.14 ··· 23828 23952 esbuild: 0.25.2 23829 23953 joycon: 3.1.1 23830 23954 picocolors: 1.1.1 23831 - postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.4)(yaml@2.7.0) 23955 + postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.4)(yaml@2.8.0) 23832 23956 resolve-from: 5.0.0 23833 23957 rollup: 4.39.0 23834 23958 source-map: 0.8.0-beta.0 ··· 23858 23982 transitivePeerDependencies: 23859 23983 - supports-color 23860 23984 23861 - turbo-darwin-64@2.5.3: 23985 + turbo-darwin-64@2.5.4: 23862 23986 optional: true 23863 23987 23864 - turbo-darwin-arm64@2.5.3: 23988 + turbo-darwin-arm64@2.5.4: 23865 23989 optional: true 23866 23990 23867 - turbo-linux-64@2.5.3: 23991 + turbo-linux-64@2.5.4: 23868 23992 optional: true 23869 23993 23870 - turbo-linux-arm64@2.5.3: 23994 + turbo-linux-arm64@2.5.4: 23871 23995 optional: true 23872 23996 23873 - turbo-windows-64@2.5.3: 23997 + turbo-windows-64@2.5.4: 23874 23998 optional: true 23875 23999 23876 - turbo-windows-arm64@2.5.3: 24000 + turbo-windows-arm64@2.5.4: 23877 24001 optional: true 23878 24002 23879 - turbo@2.5.3: 24003 + turbo@2.5.4: 23880 24004 optionalDependencies: 23881 - turbo-darwin-64: 2.5.3 23882 - turbo-darwin-arm64: 2.5.3 23883 - turbo-linux-64: 2.5.3 23884 - turbo-linux-arm64: 2.5.3 23885 - turbo-windows-64: 2.5.3 23886 - turbo-windows-arm64: 2.5.3 24005 + turbo-darwin-64: 2.5.4 24006 + turbo-darwin-arm64: 2.5.4 24007 + turbo-linux-64: 2.5.4 24008 + turbo-linux-arm64: 2.5.4 24009 + turbo-windows-64: 2.5.4 24010 + turbo-windows-arm64: 2.5.4 23887 24011 23888 24012 type-check@0.4.0: 23889 24013 dependencies: ··· 24356 24480 '@types/unist': 3.0.3 24357 24481 vfile-message: 4.0.2 24358 24482 24359 - vite-hot-client@0.2.4(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)): 24483 + vite-hot-client@0.2.4(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)): 24360 24484 dependencies: 24361 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 24485 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 24362 24486 24363 24487 vite-node@2.1.9(@types/node@22.10.5)(less@4.2.2)(sass@1.85.0)(terser@5.39.0): 24364 24488 dependencies: ··· 24378 24502 - supports-color 24379 24503 - terser 24380 24504 24381 - vite-node@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0): 24505 + vite-node@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0): 24382 24506 dependencies: 24383 24507 cac: 6.7.14 24384 24508 debug: 4.4.0(supports-color@9.4.0) 24385 24509 es-module-lexer: 1.6.0 24386 24510 pathe: 2.0.3 24387 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 24511 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 24388 24512 transitivePeerDependencies: 24389 24513 - '@types/node' 24390 24514 - jiti ··· 24421 24545 optionator: 0.9.4 24422 24546 typescript: 5.8.3 24423 24547 24424 - vite-plugin-inspect@0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@3.29.5)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)): 24548 + vite-plugin-inspect@0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@3.29.5)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)): 24425 24549 dependencies: 24426 24550 '@antfu/utils': 0.7.10 24427 24551 '@rollup/pluginutils': 5.1.4(rollup@3.29.5) ··· 24432 24556 perfect-debounce: 1.0.0 24433 24557 picocolors: 1.1.1 24434 24558 sirv: 3.0.1 24435 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 24559 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 24436 24560 optionalDependencies: 24437 24561 '@nuxt/kit': 3.15.4(magicast@0.3.5) 24438 24562 transitivePeerDependencies: 24439 24563 - rollup 24440 24564 - supports-color 24441 24565 24442 - vite-plugin-inspect@0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.41.1)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)): 24566 + vite-plugin-inspect@0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.41.1)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)): 24443 24567 dependencies: 24444 24568 '@antfu/utils': 0.7.10 24445 24569 '@rollup/pluginutils': 5.1.4(rollup@4.41.1) ··· 24450 24574 perfect-debounce: 1.0.0 24451 24575 picocolors: 1.1.1 24452 24576 sirv: 3.0.1 24453 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 24577 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 24454 24578 optionalDependencies: 24455 24579 '@nuxt/kit': 3.15.4(magicast@0.3.5) 24456 24580 transitivePeerDependencies: 24457 24581 - rollup 24458 24582 - supports-color 24459 24583 24460 - vite-plugin-vue-devtools@7.7.0(rollup@4.41.1)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)): 24584 + vite-plugin-vue-devtools@7.7.0(rollup@4.41.1)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3)): 24461 24585 dependencies: 24462 - '@vue/devtools-core': 7.7.2(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.3)) 24586 + '@vue/devtools-core': 7.7.2(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(vue@3.5.13(typescript@5.8.3)) 24463 24587 '@vue/devtools-kit': 7.7.2 24464 24588 '@vue/devtools-shared': 7.7.2 24465 24589 execa: 9.5.2 24466 24590 sirv: 3.0.1 24467 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 24468 - vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.41.1)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 24469 - vite-plugin-vue-inspector: 5.3.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 24591 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 24592 + vite-plugin-inspect: 0.8.9(@nuxt/kit@3.15.4(magicast@0.3.5))(rollup@4.41.1)(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 24593 + vite-plugin-vue-inspector: 5.3.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 24470 24594 transitivePeerDependencies: 24471 24595 - '@nuxt/kit' 24472 24596 - rollup 24473 24597 - supports-color 24474 24598 - vue 24475 24599 24476 - vite-plugin-vue-inspector@5.3.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)): 24600 + vite-plugin-vue-inspector@5.3.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)): 24477 24601 dependencies: 24478 24602 '@babel/core': 7.26.10 24479 24603 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.10) ··· 24484 24608 '@vue/compiler-dom': 3.5.13 24485 24609 kolorist: 1.8.0 24486 24610 magic-string: 0.30.17 24487 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 24611 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 24488 24612 transitivePeerDependencies: 24489 24613 - supports-color 24490 24614 ··· 24512 24636 sass: 1.85.0 24513 24637 terser: 5.39.0 24514 24638 24515 - vite@6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0): 24639 + vite@6.1.0(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0): 24516 24640 dependencies: 24517 24641 esbuild: 0.24.2 24518 24642 postcss: 8.5.4 ··· 24524 24648 less: 4.2.2 24525 24649 sass: 1.85.0 24526 24650 terser: 5.39.0 24527 - yaml: 2.7.0 24651 + yaml: 2.8.0 24528 24652 24529 - vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0): 24653 + vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0): 24530 24654 dependencies: 24531 24655 esbuild: 0.25.5 24532 24656 postcss: 8.5.4 ··· 24538 24662 less: 4.2.2 24539 24663 sass: 1.85.0 24540 24664 terser: 5.39.0 24541 - yaml: 2.7.0 24665 + yaml: 2.8.0 24542 24666 24543 - vitefu@1.0.6(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)): 24667 + vitefu@1.0.6(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)): 24544 24668 optionalDependencies: 24545 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 24669 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 24546 24670 24547 24671 vitepress@1.3.0(@algolia/client-search@5.21.0)(@types/node@22.10.5)(@types/react@19.0.1)(axios@1.8.2)(less@4.2.2)(postcss@8.5.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.85.0)(search-insights@2.17.3)(terser@5.39.0)(typescript@5.8.3): 24548 24672 dependencies: ··· 24592 24716 - typescript 24593 24717 - universal-cookie 24594 24718 24595 - vitest-environment-nuxt@1.0.1(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(yaml@2.7.0): 24719 + vitest-environment-nuxt@1.0.1(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(yaml@2.8.0): 24596 24720 dependencies: 24597 - '@nuxt/test-utils': 3.17.2(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))(yaml@2.7.0) 24721 + '@nuxt/test-utils': 3.17.2(@types/node@22.10.5)(@vue/test-utils@2.4.6)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(magicast@0.3.5)(sass@1.85.0)(terser@5.39.0)(typescript@5.8.3)(vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0))(yaml@2.8.0) 24598 24722 transitivePeerDependencies: 24599 24723 - '@cucumber/cucumber' 24600 24724 - '@jest/globals' ··· 24620 24744 - vitest 24621 24745 - yaml 24622 24746 24623 - vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0): 24747 + vitest@3.1.1(@types/node@22.10.5)(jiti@2.4.2)(jsdom@23.0.0)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0): 24624 24748 dependencies: 24625 24749 '@vitest/expect': 3.1.1 24626 - '@vitest/mocker': 3.1.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) 24750 + '@vitest/mocker': 3.1.1(vite@6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0)) 24627 24751 '@vitest/pretty-format': 3.1.1 24628 24752 '@vitest/runner': 3.1.1 24629 24753 '@vitest/snapshot': 3.1.1 ··· 24639 24763 tinyexec: 0.3.2 24640 24764 tinypool: 1.0.2 24641 24765 tinyrainbow: 2.0.0 24642 - vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 24643 - vite-node: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) 24766 + vite: 6.2.7(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 24767 + vite-node: 3.1.1(@types/node@22.10.5)(jiti@2.4.2)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.0) 24644 24768 why-is-node-running: 2.3.0 24645 24769 optionalDependencies: 24646 24770 '@types/node': 22.10.5 ··· 24758 24882 24759 24883 webidl-conversions@7.0.0: {} 24760 24884 24761 - webpack-dev-middleware@7.4.2(webpack@5.98.0(esbuild@0.25.0)): 24885 + webpack-dev-middleware@7.4.2(webpack@5.98.0(esbuild@0.25.2)): 24762 24886 dependencies: 24763 24887 colorette: 2.0.20 24764 24888 memfs: 4.17.0 ··· 24767 24891 range-parser: 1.2.1 24768 24892 schema-utils: 4.3.0 24769 24893 optionalDependencies: 24770 - webpack: 5.98.0(esbuild@0.25.2) 24894 + webpack: 5.98.0(esbuild@0.25.0) 24771 24895 24772 - webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.0)): 24896 + webpack-dev-server@5.2.0(webpack@5.98.0(esbuild@0.25.2)): 24773 24897 dependencies: 24774 24898 '@types/bonjour': 3.5.13 24775 24899 '@types/connect-history-api-fallback': 1.5.4 ··· 24796 24920 serve-index: 1.9.1 24797 24921 sockjs: 0.3.24 24798 24922 spdy: 4.0.2 24799 - webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.0)) 24923 + webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.2)) 24800 24924 ws: 8.18.1 24801 24925 optionalDependencies: 24802 - webpack: 5.98.0(esbuild@0.25.2) 24926 + webpack: 5.98.0(esbuild@0.25.0) 24803 24927 transitivePeerDependencies: 24804 24928 - bufferutil 24805 24929 - debug ··· 24817 24941 webpack-subresource-integrity@5.1.0(webpack@5.98.0(esbuild@0.25.0)): 24818 24942 dependencies: 24819 24943 typed-assert: 1.0.9 24820 - webpack: 5.98.0(esbuild@0.25.2) 24944 + webpack: 5.98.0(esbuild@0.25.0) 24821 24945 24822 24946 webpack-virtual-modules@0.6.2: {} 24823 24947 24824 - webpack@5.98.0(esbuild@0.25.2): 24948 + webpack@5.98.0(esbuild@0.25.0): 24825 24949 dependencies: 24826 24950 '@types/eslint-scope': 3.7.7 24827 24951 '@types/estree': 1.0.6 ··· 24843 24967 neo-async: 2.6.2 24844 24968 schema-utils: 4.3.0 24845 24969 tapable: 2.2.1 24846 - terser-webpack-plugin: 5.3.14(esbuild@0.25.2)(webpack@5.98.0(esbuild@0.25.0)) 24970 + terser-webpack-plugin: 5.3.14(esbuild@0.25.0)(webpack@5.98.0(esbuild@0.25.2)) 24847 24971 watchpack: 2.4.2 24848 24972 webpack-sources: 3.2.3 24849 24973 transitivePeerDependencies: ··· 25002 25126 yaml@2.6.1: {} 25003 25127 25004 25128 yaml@2.7.0: {} 25129 + 25130 + yaml@2.8.0: {} 25005 25131 25006 25132 yargs-parser@20.2.9: {} 25007 25133