diff --git a/package.json b/package.json index 59d5d4dc5..2ce6b1b3b 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@commitlint/cli": "^20.1.0", "@commitlint/config-conventional": "^20.0.0", "@eslint/js": "^9.38.0", - "@types/node": "^22.18.11", + "@types/node": "^22.18.12", "esbuild-plugin-alias": "^0.2.1", "eslint": "^9.38.0", "eslint-config-prettier": "^10.1.8", @@ -51,13 +51,12 @@ "eslint-plugin-unicorn": "^61.0.2", "globals": "^16.4.0", "husky": "^9.1.7", - "lint-staged": "^16.2.4", - "npm-run-all": "^4.1.5", + "lint-staged": "^16.2.5", "prettier": "3.6.2", "rimraf": "^6.0.1", "turbo": "^2.5.8", "typescript": "^5.9.3", - "typescript-eslint": "^8.46.1", + "typescript-eslint": "^8.46.2", "vitest": "^3.2.4" } } diff --git a/packages/angular/package.json b/packages/angular/package.json index 292a56c1d..8c60c13fc 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -2,10 +2,11 @@ "name": "@orval/angular", "version": "7.15.0", "license": "MIT", + "type": "module", "exports": { - ".": { + "import": { "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "import": "./dist/index.js" } }, "files": [ @@ -23,9 +24,9 @@ "@orval/core": "workspace:*" }, "devDependencies": { - "eslint": "^9.35.0", + "eslint": "^9.38.0", "rimraf": "^6.0.1", - "tsdown": "^0.15.2", - "typescript": "^5.9.2" + "tsdown": "^0.15.9", + "typescript": "^5.9.3" } } diff --git a/packages/angular/src/index.ts b/packages/angular/src/index.ts index f42f20145..9f151ff91 100644 --- a/packages/angular/src/index.ts +++ b/packages/angular/src/index.ts @@ -1,18 +1,18 @@ import { - ClientBuilder, - ClientDependenciesBuilder, - ClientFooterBuilder, - ClientGeneratorsBuilder, - ClientHeaderBuilder, - ClientTitleBuilder, + type ClientBuilder, + type ClientDependenciesBuilder, + type ClientFooterBuilder, + type ClientGeneratorsBuilder, + type ClientHeaderBuilder, + type ClientTitleBuilder, generateFormDataAndUrlEncodedFunction, generateMutatorConfig, generateMutatorRequestOptions, generateOptions, generateVerbImports, - GeneratorDependency, - GeneratorOptions, - GeneratorVerbOptions, + type GeneratorDependency, + type GeneratorOptions, + type GeneratorVerbOptions, isBoolean, pascal, sanitize, diff --git a/packages/angular/tsconfig.build.json b/packages/angular/tsconfig.build.json index b00c4731b..d51c1955e 100644 --- a/packages/angular/tsconfig.build.json +++ b/packages/angular/tsconfig.build.json @@ -1,5 +1,6 @@ { "extends": "./tsconfig.json", + "exclude": ["__tests__", "**/*.test.ts", "**/*.spec.ts"], "include": ["src/**/*.ts"], "compilerOptions": { "outDir": "dist" diff --git a/packages/axios/package.json b/packages/axios/package.json index 3daa931c2..daf76f7dc 100644 --- a/packages/axios/package.json +++ b/packages/axios/package.json @@ -2,10 +2,11 @@ "name": "@orval/axios", "version": "7.15.0", "license": "MIT", + "type": "module", "exports": { - ".": { + "import": { "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "import": "./dist/index.js" } }, "files": [ @@ -25,7 +26,7 @@ "devDependencies": { "eslint": "^9.38.0", "rimraf": "^6.0.1", - "tsdown": "^0.15.8", + "tsdown": "^0.15.9", "typescript": "^5.9.3" } } diff --git a/packages/axios/src/index.ts b/packages/axios/src/index.ts index 6cc7a08df..36f063cb8 100644 --- a/packages/axios/src/index.ts +++ b/packages/axios/src/index.ts @@ -1,18 +1,18 @@ import { - ClientBuilder, - ClientDependenciesBuilder, - ClientFooterBuilder, - ClientGeneratorsBuilder, - ClientHeaderBuilder, - ClientTitleBuilder, + type ClientBuilder, + type ClientDependenciesBuilder, + type ClientFooterBuilder, + type ClientGeneratorsBuilder, + type ClientHeaderBuilder, + type ClientTitleBuilder, generateFormDataAndUrlEncodedFunction, generateMutatorConfig, generateMutatorRequestOptions, generateOptions, generateVerbImports, - GeneratorDependency, - GeneratorOptions, - GeneratorVerbOptions, + type GeneratorDependency, + type GeneratorOptions, + type GeneratorVerbOptions, isSyntheticDefaultImportsAllow, pascal, sanitize, diff --git a/packages/axios/tsconfig.build.json b/packages/axios/tsconfig.build.json index b00c4731b..d51c1955e 100644 --- a/packages/axios/tsconfig.build.json +++ b/packages/axios/tsconfig.build.json @@ -1,5 +1,6 @@ { "extends": "./tsconfig.json", + "exclude": ["__tests__", "**/*.test.ts", "**/*.spec.ts"], "include": ["src/**/*.ts"], "compilerOptions": { "outDir": "dist" diff --git a/packages/core/package.json b/packages/core/package.json index c2fe30e30..3a90a3cbc 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -2,6 +2,7 @@ "name": "@orval/core", "version": "7.15.0", "license": "MIT", + "type": "module", "exports": { ".": { "types": "./dist/index.d.ts", @@ -21,7 +22,7 @@ "nuke": "rimraf .turbo dist node_modules" }, "devDependencies": { - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "@types/debug": "^4.1.12", "@types/esutils": "^2.0.2", "@types/fs-extra": "^11.0.4", @@ -29,13 +30,12 @@ "@types/lodash.uniq": "^4.5.9", "@types/lodash.uniqby": "^4.7.9", "@types/lodash.uniqwith": "^4.5.9", - "@types/micromatch": "^4.0.9", "@types/swagger2openapi": "^7.0.4", "eslint": "^9.38.0", "openapi-types": "^12.1.3", "rimraf": "^6.0.1", - "tsdown": "^0.15.8", - "typescript": "^5.9.2", + "tsdown": "^0.15.9", + "typescript": "^5.9.3", "vitest": "^3.2.4" }, "dependencies": { @@ -43,18 +43,17 @@ "@ibm-cloud/openapi-ruleset": "^1.33.1", "@stoplight/spectral-core": "^1.20.0", "acorn": "^8.15.0", - "chalk": "^4.1.2", + "chalk": "^5.6.2", "compare-versions": "^6.1.1", "debug": "^4.4.3", "esbuild": "^0.25.11", "esutils": "2.0.3", - "fs-extra": "^11.3.1", - "globby": "11.1.0", + "fs-extra": "^11.3.2", + "globby": "15.0.0", "lodash.isempty": "^4.4.0", "lodash.uniq": "^4.5.0", "lodash.uniqby": "^4.7.0", "lodash.uniqwith": "^4.5.0", - "micromatch": "^4.0.8", "openapi3-ts": "4.5.0", "swagger2openapi": "^7.0.8", "typedoc": "^0.28.14" diff --git a/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-function-0-args.ts b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-function-0-args.ts new file mode 100644 index 000000000..85f946874 --- /dev/null +++ b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-function-0-args.ts @@ -0,0 +1,2 @@ +/* eslint-disable unicorn/no-anonymous-default-export, @typescript-eslint/no-empty-function */ +export default function () {} diff --git a/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-function-1-args.ts b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-function-1-args.ts new file mode 100644 index 000000000..68244d34a --- /dev/null +++ b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-function-1-args.ts @@ -0,0 +1,2 @@ +/* eslint-disable unicorn/no-anonymous-default-export, @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars */ +export default function (param1?: number) {} diff --git a/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-function-2-args.ts b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-function-2-args.ts new file mode 100644 index 000000000..8632b42bf --- /dev/null +++ b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-function-2-args.ts @@ -0,0 +1,2 @@ +/* eslint-disable unicorn/no-anonymous-default-export, @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars */ +export default function (param1?: number, param2?: number) {} diff --git a/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-function-3-args.ts b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-function-3-args.ts new file mode 100644 index 000000000..796b47bc5 --- /dev/null +++ b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-function-3-args.ts @@ -0,0 +1,2 @@ +/* eslint-disable unicorn/no-anonymous-default-export, @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars */ +export default function (param1?: number, param2?: number, param3?: number) {} diff --git a/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-lambda-0-args.ts b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-lambda-0-args.ts new file mode 100644 index 000000000..1eefddea2 --- /dev/null +++ b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-lambda-0-args.ts @@ -0,0 +1,2 @@ +/* eslint-disable unicorn/no-anonymous-default-export, @typescript-eslint/no-empty-function */ +export default () => {}; diff --git a/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-lambda-1-args.ts b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-lambda-1-args.ts new file mode 100644 index 000000000..890295617 --- /dev/null +++ b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-lambda-1-args.ts @@ -0,0 +1,2 @@ +/* eslint-disable unicorn/no-anonymous-default-export, @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars */ +export default (param1?: number) => {}; diff --git a/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-lambda-2-args.ts b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-lambda-2-args.ts new file mode 100644 index 000000000..214757590 --- /dev/null +++ b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-lambda-2-args.ts @@ -0,0 +1,2 @@ +/* eslint-disable unicorn/no-anonymous-default-export, @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars */ +export default (param1?: number, param2?: number) => {}; diff --git a/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-lambda-3-args.ts b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-lambda-3-args.ts new file mode 100644 index 000000000..5e3a23140 --- /dev/null +++ b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-lambda-3-args.ts @@ -0,0 +1,2 @@ +/* eslint-disable unicorn/no-anonymous-default-export, @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars */ +export default (param1?: number, param2?: number, param3?: number) => {}; diff --git a/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-nested-lambda-0-args.ts b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-nested-lambda-0-args.ts new file mode 100644 index 000000000..89440e674 --- /dev/null +++ b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-nested-lambda-0-args.ts @@ -0,0 +1,2 @@ +/* eslint-disable unicorn/consistent-function-scoping, unicorn/no-anonymous-default-export, @typescript-eslint/no-empty-function */ +export default () => () => {}; diff --git a/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-nested-lambda-1-args.ts b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-nested-lambda-1-args.ts new file mode 100644 index 000000000..15ecbb722 --- /dev/null +++ b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-nested-lambda-1-args.ts @@ -0,0 +1,2 @@ +/* eslint-disable unicorn/consistent-function-scoping, unicorn/no-anonymous-default-export, @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars */ +export default () => (param1?: number) => {}; diff --git a/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-nested-lambda-2-args.ts b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-nested-lambda-2-args.ts new file mode 100644 index 000000000..64bcdef94 --- /dev/null +++ b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-nested-lambda-2-args.ts @@ -0,0 +1,2 @@ +/* eslint-disable unicorn/consistent-function-scoping, unicorn/no-anonymous-default-export, @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars */ +export default () => (param1?: number, param2?: number) => {}; diff --git a/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-nested-lambda-3-args.ts b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-nested-lambda-3-args.ts new file mode 100644 index 000000000..8d88f76d9 --- /dev/null +++ b/packages/core/src/generators/__tests__/mutator-test-files/default-anonymous-nested-lambda-3-args.ts @@ -0,0 +1,2 @@ +/* eslint-disable unicorn/consistent-function-scoping, unicorn/no-anonymous-default-export, @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars */ +export default () => (param1?: number, param2?: number, param3?: number) => {}; diff --git a/packages/core/src/generators/__tests__/mutator-test-files/named-export-tests.ts b/packages/core/src/generators/__tests__/mutator-test-files/named-export-tests.ts new file mode 100644 index 000000000..32945b29d --- /dev/null +++ b/packages/core/src/generators/__tests__/mutator-test-files/named-export-tests.ts @@ -0,0 +1,33 @@ +/* eslint-disable unicorn/consistent-function-scoping, @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars */ + +export function fn0Param() {} +export function fn1Param(param1?: number) {} +export function fn2Param(param1?: number, param2?: number) {} +export function fn3Param(param1?: number, param2?: number, param3?: number) {} + +export const lambda0Param = () => {}; +export const lambda1Param = (param1?: number) => {}; +export const lambda2Param = (param1?: number, param2?: number) => {}; +export const lambda3Param = ( + param1?: number, + param2?: number, + param3?: number, +) => {}; + +export const nestedLambda0Param = () => () => {}; +export const nestedLambda1Param = () => (param1?: number) => {}; +export const nestedLambda2Param = + () => (param1?: number, param2?: number) => {}; +export const nestedLambda3Param = + () => (param1?: number, param2?: number, param3?: number) => {}; + +export function fnCallback( + useCallback: (param1?: number) => 0, + param1?: number, +) { + return useCallback(param1); +} + +export function fnNestedLambda2Param() { + return (param1?: number, param2?: number) => {}; +} diff --git a/packages/core/src/generators/mutator-info.test.ts b/packages/core/src/generators/mutator-info.test.ts new file mode 100644 index 000000000..121aec92a --- /dev/null +++ b/packages/core/src/generators/mutator-info.test.ts @@ -0,0 +1,253 @@ +import path from 'node:path'; + +import { describe, expect, it } from 'vitest'; + +import { + fn0Param, + fn1Param, + fn2Param, + fn3Param, + fnCallback, + fnNestedLambda2Param, + lambda0Param, + lambda1Param, + lambda2Param, + lambda3Param, + nestedLambda0Param, + nestedLambda1Param, + nestedLambda2Param, + nestedLambda3Param, +} from './__tests__/mutator-test-files/named-export-tests'; +import { getMutatorInfo } from './mutator-info'; + +const basePath = path.join(import.meta.dirname, '__tests__/mutator-test-files'); + +describe('getMutatorInfo', () => { + describe('default anonymous export', () => { + it('should work for anonymous function with 0 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'default-anonymous-function-0-args.ts'), + ); + expect(result).toEqual({ numberOfParams: 0 }); + }); + + it('should work for anonymous function with 1 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'default-anonymous-function-1-args.ts'), + ); + expect(result).toEqual({ numberOfParams: 1 }); + }); + + it('should work for anonymous function with 2 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'default-anonymous-function-2-args.ts'), + ); + expect(result).toEqual({ numberOfParams: 2 }); + }); + + it('should work for anonymous function with 3 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'default-anonymous-function-3-args.ts'), + ); + expect(result).toEqual({ numberOfParams: 3 }); + }); + + it('should work for anonymous lambda with 0 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'default-anonymous-lambda-0-args.ts'), + ); + expect(result).toEqual({ numberOfParams: 0 }); + }); + + it('should work for anonymous lambda with 1 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'default-anonymous-lambda-1-args.ts'), + ); + expect(result).toEqual({ numberOfParams: 1 }); + }); + + it('should work for anonymous lambda with 2 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'default-anonymous-lambda-2-args.ts'), + ); + expect(result).toEqual({ numberOfParams: 2 }); + }); + + it('should work for anonymous lambda with 3 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'default-anonymous-lambda-3-args.ts'), + ); + expect(result).toEqual({ numberOfParams: 3 }); + }); + + it('should work for anonymous lambda returning lambda with 0 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'default-anonymous-nested-lambda-0-args.ts'), + ); + expect(result).toEqual({ numberOfParams: 0, returnNumberOfParams: 0 }); + }); + + it('should work for anonymous lambda returning lambda with 1 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'default-anonymous-nested-lambda-1-args.ts'), + ); + expect(result).toEqual({ numberOfParams: 0, returnNumberOfParams: 1 }); + }); + + it('should work for anonymous lambda returning lambda with 2 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'default-anonymous-nested-lambda-2-args.ts'), + ); + expect(result).toEqual({ numberOfParams: 0, returnNumberOfParams: 2 }); + }); + + it('should work for anonymous lambda returning lambda with 3 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'default-anonymous-nested-lambda-3-args.ts'), + ); + expect(result).toEqual({ numberOfParams: 0, returnNumberOfParams: 3 }); + }); + }); + + describe('named export', () => { + it('should work for function with 0 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'named-export-tests.ts'), + { + namedExport: fn0Param.name, + }, + ); + expect(result).toEqual({ numberOfParams: 0 }); + }); + + it('should work for function with 1 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'named-export-tests.ts'), + { + namedExport: fn1Param.name, + }, + ); + expect(result).toEqual({ numberOfParams: 1 }); + }); + + it('should work for function with 2 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'named-export-tests.ts'), + { + namedExport: fn2Param.name, + }, + ); + expect(result).toEqual({ numberOfParams: 2 }); + }); + + it('should work for function with 3 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'named-export-tests.ts'), + { + namedExport: fn3Param.name, + }, + ); + expect(result).toEqual({ numberOfParams: 3 }); + }); + + it('should work for lambda with 0 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'named-export-tests.ts'), + { + namedExport: lambda0Param.name, + }, + ); + expect(result).toEqual({ numberOfParams: 0 }); + }); + + it('should work for lambda with 1 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'named-export-tests.ts'), + { + namedExport: lambda1Param.name, + }, + ); + expect(result).toEqual({ numberOfParams: 1 }); + }); + + it('should work for lambda with 2 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'named-export-tests.ts'), + { + namedExport: lambda2Param.name, + }, + ); + expect(result).toEqual({ numberOfParams: 2 }); + }); + + it('should work for lambda with 3 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'named-export-tests.ts'), + { + namedExport: lambda3Param.name, + }, + ); + expect(result).toEqual({ numberOfParams: 3 }); + }); + + it('should work for lambda returning lambda with 0 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'named-export-tests.ts'), + { + namedExport: nestedLambda0Param.name, + }, + ); + expect(result).toEqual({ numberOfParams: 0, returnNumberOfParams: 0 }); + }); + + it('should work for lambda returning lambda with 1 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'named-export-tests.ts'), + { + namedExport: nestedLambda1Param.name, + }, + ); + expect(result).toEqual({ numberOfParams: 0, returnNumberOfParams: 1 }); + }); + + it('should work for lambda returning lambda with 2 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'named-export-tests.ts'), + { + namedExport: nestedLambda2Param.name, + }, + ); + expect(result).toEqual({ numberOfParams: 0, returnNumberOfParams: 2 }); + }); + + it('should work for lambda returning lambda with 3 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'named-export-tests.ts'), + { + namedExport: nestedLambda3Param.name, + }, + ); + expect(result).toEqual({ numberOfParams: 0, returnNumberOfParams: 3 }); + }); + + it('should work for callback function with 2 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'named-export-tests.ts'), + { + namedExport: fnCallback.name, + }, + ); + expect(result).toEqual({ numberOfParams: 2 }); + }); + + it('should work for function returning lambda with 2 args', async () => { + const result = await getMutatorInfo( + path.join(basePath, 'named-export-tests.ts'), + { + namedExport: fnNestedLambda2Param.name, + }, + ); + expect(result).toEqual({ numberOfParams: 0, returnNumberOfParams: 2 }); + }); + }); +}); diff --git a/packages/core/src/generators/mutator-info.ts b/packages/core/src/generators/mutator-info.ts new file mode 100644 index 000000000..643cc4025 --- /dev/null +++ b/packages/core/src/generators/mutator-info.ts @@ -0,0 +1,196 @@ +import path from 'node:path'; + +import { type ecmaVersion, Parser, type Program } from 'acorn'; +import { build, type BuildOptions } from 'esbuild'; + +import type { + GeneratorMutatorParsingInfo, + Tsconfig, + TsConfigTarget, +} from '../types'; + +export async function getMutatorInfo( + filePath: string, + options?: { + root?: string; + namedExport?: string; + alias?: Record; + tsconfig?: Tsconfig; + }, +): Promise { + const { + root = process.cwd(), + namedExport = 'default', + alias, + tsconfig, + } = options ?? {}; + + const code = await bundleFile( + root, + path.resolve(filePath), + alias, + tsconfig?.compilerOptions, + ); + + return parseFile( + code, + namedExport, + getEcmaVersion(tsconfig?.compilerOptions?.target), + ); +} + +async function bundleFile( + root: string, + fileName: string, + alias?: Record, + compilerOptions?: Tsconfig['compilerOptions'], +): Promise { + const result = await build({ + absWorkingDir: root, + entryPoints: [fileName], + write: false, + platform: 'node', + bundle: true, + format: 'esm', + metafile: false, + target: compilerOptions?.target ?? 'es6', + minify: false, + minifyIdentifiers: false, + minifySyntax: false, + minifyWhitespace: false, + treeShaking: false, + keepNames: false, + alias, + } satisfies BuildOptions); + const { text } = result.outputFiles[0]; + + return text; +} + +function parseFile( + file: string, + name: string, + ecmaVersion: ecmaVersion = 6, +): GeneratorMutatorParsingInfo | undefined { + try { + const ast = Parser.parse(file, { ecmaVersion, sourceType: 'module' }); + + const foundSpecifier = ast.body + .filter((x) => x.type === 'ExportNamedDeclaration') + .flatMap((x) => x.specifiers) + .find( + (x) => + x.exported.type === 'Identifier' && + x.exported.name === name && + x.local.type === 'Identifier', + ); + + if (foundSpecifier && 'name' in foundSpecifier.local) { + const exportedFuncName = foundSpecifier.local.name; + + return parseFunction(ast, exportedFuncName); + } + } catch { + return; + } +} + +function parseFunction( + ast: Program, + funcName: string, +): GeneratorMutatorParsingInfo | undefined { + const node = ast.body.find((childNode) => { + if (childNode.type === 'VariableDeclaration') { + return childNode.declarations.find((d) => d.id.name === funcName); + } + if ( + childNode.type === 'FunctionDeclaration' && + childNode.id.name === funcName + ) { + return childNode; + } + }); + + if (!node) { + return; + } + + if (node.type === 'FunctionDeclaration') { + const returnStatement = node.body.body.find( + (b) => b.type === 'ReturnStatement', + ); + + // If the function directly returns an arrow function + if (returnStatement?.argument?.params) { + return { + numberOfParams: node.params.length, + returnNumberOfParams: returnStatement.argument.params.length, + }; + // If the function returns a CallExpression (e.g., return useCallback(...)) + } else if (returnStatement?.argument?.type === 'CallExpression') { + const arrowFn = returnStatement.argument.arguments.at(0); + if (arrowFn?.type === 'ArrowFunctionExpression') { + return { + numberOfParams: node.params.length, + returnNumberOfParams: arrowFn.params.length, + }; + } + } + return { + numberOfParams: node.params.length, + }; + } + + const declaration = node.declarations.find((d) => d.id.name === funcName); + + if (declaration.init.name) { + return parseFunction(ast, declaration.init.name); + } + + if (declaration.init.body.type === 'ArrowFunctionExpression') { + return { + numberOfParams: declaration.init.params.length, + returnNumberOfParams: declaration.init.body.params.length, + }; + } + + const returnStatement = declaration.init.body?.body?.find( + (b: any) => b.type === 'ReturnStatement', + ); + + if (returnStatement?.argument?.params) { + return { + numberOfParams: declaration.init.params.length, + returnNumberOfParams: returnStatement.argument.params.length, + }; + } else if ( + returnStatement?.argument?.type === 'CallExpression' && + returnStatement.argument.arguments?.[0]?.type === 'ArrowFunctionExpression' + ) { + const arrowFn = returnStatement.argument.arguments[0]; + return { + numberOfParams: declaration.init.params.length, + returnNumberOfParams: arrowFn.params.length, + }; + } + + return { + numberOfParams: declaration.init.params.length, + }; +} + +function getEcmaVersion(target?: TsConfigTarget): ecmaVersion | undefined { + if (!target) { + return; + } + + if (target.toLowerCase() === 'esnext') { + return 'latest'; + } + + try { + return Number(target.toLowerCase().replace('es', '')) as ecmaVersion; + } catch { + return; + } +} diff --git a/packages/core/src/generators/mutator.ts b/packages/core/src/generators/mutator.ts index 73cb65839..2658c960b 100644 --- a/packages/core/src/generators/mutator.ts +++ b/packages/core/src/generators/mutator.ts @@ -1,15 +1,11 @@ -import { type ecmaVersion, Parser } from 'acorn'; +import path from 'node:path'; + import chalk from 'chalk'; import fs from 'fs-extra'; -import type { - GeneratorMutator, - GeneratorMutatorParsingInfo, - NormalizedMutator, - Tsconfig, - TsConfigTarget, -} from '../types'; -import { createLogger, getFileInfo, loadFile, pascal, upath } from '../utils'; +import type { GeneratorMutator, NormalizedMutator, Tsconfig } from '../types'; +import { getFileInfo, pascal, upath } from '../utils'; +import { getMutatorInfo } from './mutator-info'; export const BODY_TYPE_NAME = 'BodyType'; @@ -20,10 +16,10 @@ const getImport = (output: string, mutator: NormalizedMutator) => { upath.relativeSafe(outputFileInfo.dirname, mutatorFileInfo.path), ); - return `${pathWithoutExtension}${mutator.extension || ''}`; + return `${pathWithoutExtension}${mutator.extension ?? ''}`; }; -export const generateMutator = async ({ +export async function generateMutator({ output, mutator, name, @@ -35,16 +31,22 @@ export const generateMutator = async ({ name: string; workspace: string; tsconfig?: Tsconfig; -}): Promise => { +}): Promise { if (!mutator || !output) { return; } const isDefault = mutator.default; - const importName = mutator.name ? mutator.name : `${name}Mutator`; + const importName = mutator.name ?? `${name}Mutator`; const importPath = mutator.path; + const mutatorInfoName = isDefault ? 'default' : mutator.name; - let rawFile = await fs.readFile(importPath, 'utf8'); + if (mutatorInfoName === undefined) { + throw new Error( + chalk.red(`Mutator ${importPath} must have a named or default export.`), + ); + } + let rawFile = await fs.readFile(importPath, 'utf8'); rawFile = removeComments(rawFile); const hasErrorType = @@ -63,88 +65,43 @@ export const generateMutator = async ({ ? `${pascal(name)}${BODY_TYPE_NAME}` : BODY_TYPE_NAME; - const { file, cached } = await loadFile(importPath, { - root: workspace, + const mutatorInfo = await getMutatorInfo(importPath, { + root: path.resolve(workspace), + namedExport: mutatorInfoName, alias: mutator.alias, tsconfig, }); - if (file) { - const mutatorInfoName = isDefault ? 'default' : mutator.name!; - - const mutatorInfo = parseFile( - file, - mutatorInfoName, - getEcmaVersion(tsconfig?.compilerOptions?.target), + if (!mutatorInfo) { + throw new Error( + chalk.red( + `Your mutator file doesn't have the ${mutatorInfoName} exported function`, + ), ); - - if (!mutatorInfo) { - throw new Error( - chalk.red( - `Your mutator file doesn't have the ${mutatorInfoName} exported function`, - ), - ); - } - - const path = getImport(output, mutator); - - const isHook = mutator.name - ? !!mutator.name.startsWith('use') && !mutatorInfo.numberOfParams - : !mutatorInfo.numberOfParams; - - return { - name: mutator.name || !isHook ? importName : `use${pascal(importName)}`, - path, - default: isDefault, - hasErrorType, - errorTypeName, - hasSecondArg: isHook - ? mutatorInfo.returnNumberOfParams! > 1 - : mutatorInfo.numberOfParams > 1, - hasThirdArg: mutatorInfo.numberOfParams > 2, - isHook, - ...(hasBodyType ? { bodyTypeName } : {}), - }; - } else { - const path = getImport(output, mutator); - - if (!cached) { - createLogger().warn( - chalk.yellow(`Failed to parse provided mutator function`), - ); - } - - return { - name: importName, - path, - default: isDefault, - hasSecondArg: false, - hasThirdArg: false, - isHook: false, - hasErrorType, - errorTypeName, - ...(hasBodyType ? { bodyTypeName } : {}), - }; } -}; -const getEcmaVersion = (target?: TsConfigTarget): ecmaVersion | undefined => { - if (!target) { - return; - } + const importStatementPath = getImport(output, mutator); - if (target.toLowerCase() === 'esnext') { - return 'latest'; - } + const isHook = mutator.name + ? mutator.name.startsWith('use') && !mutatorInfo.numberOfParams + : !mutatorInfo.numberOfParams; - try { - return Number(target.toLowerCase().replace('es', '')) as ecmaVersion; - } catch { - return; - } -}; + return { + name: mutator.name || !isHook ? importName : `use${pascal(importName)}`, + path: importStatementPath, + default: isDefault, + hasErrorType, + errorTypeName, + hasSecondArg: isHook + ? (mutatorInfo.returnNumberOfParams ?? 0) > 1 + : mutatorInfo.numberOfParams > 1, + hasThirdArg: mutatorInfo.numberOfParams > 2, + isHook, + ...(hasBodyType ? { bodyTypeName } : {}), + }; +} -const removeComments = (file: string) => { +function removeComments(file: string) { // Regular expression to match single-line and multi-line comments const commentRegex = /\/\/.*|\/\*[\s\S]*?\*\//g; @@ -152,166 +109,4 @@ const removeComments = (file: string) => { const cleanedFile = file.replaceAll(commentRegex, ''); return cleanedFile; -}; - -const parseFile = ( - file: string, - name: string, - ecmaVersion: ecmaVersion = 6, -): GeneratorMutatorParsingInfo | undefined => { - try { - const ast = Parser.parse(file, { ecmaVersion }) as any; - - const node = ast?.body?.find((childNode: any) => { - if (childNode.type === 'ExpressionStatement') { - if ( - childNode.expression.arguments?.[1]?.properties?.some( - (p: any) => p.key?.name === name, - ) - ) { - return true; - } - - if (childNode.expression.left?.property?.name === name) { - return true; - } - - return childNode.expression.right?.properties?.some( - (p: any) => p.key.name === name, - ); - } - }); - - if (!node) { - return; - } - - if (node.expression.type === 'AssignmentExpression') { - if ( - node.expression.right.type === 'FunctionExpression' || - node.expression.right.type === 'ArrowFunctionExpression' - ) { - return { - numberOfParams: node.expression.right.params.length, - }; - } - - if (node.expression.right.name) { - return parseFunction(ast, node.expression.right.name); - } - - const property = node.expression.right?.properties.find( - (p: any) => p.key.name === name, - ); - - if (property.value.name) { - return parseFunction(ast, property.value.name); - } - - if ( - property.value.type === 'FunctionExpression' || - property.value.type === 'ArrowFunctionExpression' - ) { - return { - numberOfParams: property.value.params.length, - }; - } - - return; - } - - const property = node.expression.arguments[1].properties.find( - (p: any) => p.key?.name === name, - ); - - return parseFunction(ast, property.value.body.name); - } catch { - return; - } -}; - -const parseFunction = ( - ast: any, - name: string, -): GeneratorMutatorParsingInfo | undefined => { - const node = ast?.body?.find((childNode: any) => { - if (childNode.type === 'VariableDeclaration') { - return childNode.declarations.find((d: any) => d.id.name === name); - } - if ( - childNode.type === 'FunctionDeclaration' && - childNode.id.name === name - ) { - return childNode; - } - }); - - if (!node) { - return; - } - - if (node.type === 'FunctionDeclaration') { - const returnStatement = node.body?.body?.find( - (b: any) => b.type === 'ReturnStatement', - ); - - // If the function directly returns an arrow function - if (returnStatement?.argument?.params) { - return { - numberOfParams: node.params.length, - returnNumberOfParams: returnStatement.argument.params.length, - }; - // If the function returns a CallExpression (e.g., return useCallback(...)) - } else if ( - returnStatement?.argument?.type === 'CallExpression' && - returnStatement.argument.arguments?.[0]?.type === - 'ArrowFunctionExpression' - ) { - const arrowFn = returnStatement.argument.arguments[0]; - return { - numberOfParams: node.params.length, - returnNumberOfParams: arrowFn.params.length, - }; - } - return { - numberOfParams: node.params.length, - }; - } - - const declaration = node.declarations.find((d: any) => d.id.name === name); - - if (declaration.init.name) { - return parseFunction(ast, declaration.init.name); - } - - if (declaration.init.body.type === 'ArrowFunctionExpression') { - return { - numberOfParams: declaration.init.params.length, - returnNumberOfParams: declaration.init.body.params.length, - }; - } - - const returnStatement = declaration.init.body?.body?.find( - (b: any) => b.type === 'ReturnStatement', - ); - - if (returnStatement?.argument?.params) { - return { - numberOfParams: declaration.init.params.length, - returnNumberOfParams: returnStatement.argument.params.length, - }; - } else if ( - returnStatement?.argument?.type === 'CallExpression' && - returnStatement.argument.arguments?.[0]?.type === 'ArrowFunctionExpression' - ) { - const arrowFn = returnStatement.argument.arguments[0]; - return { - numberOfParams: declaration.init.params.length, - returnNumberOfParams: arrowFn.params.length, - }; - } - - return { - numberOfParams: declaration.init.params.length, - }; -}; +} diff --git a/packages/core/src/utils/file.ts b/packages/core/src/utils/file.ts index 24d2135ff..4f0b2324b 100644 --- a/packages/core/src/utils/file.ts +++ b/packages/core/src/utils/file.ts @@ -1,15 +1,9 @@ import fs from 'node:fs'; import path from 'node:path'; -import chalk from 'chalk'; -import { build, type PluginBuild } from 'esbuild'; -import glob from 'globby'; -import mm from 'micromatch'; +import { globby } from 'globby'; -import type { Tsconfig } from '../types'; import { isDirectory } from './assertion'; -import { createDebugger } from './debug'; -import { joinSafe, normalizeSafe } from './path'; export const getFileInfo = ( target = '', @@ -39,267 +33,11 @@ export const getFileInfo = ( }; }; -const debug = createDebugger('orval:file-load'); - -const cache = new Map(); - -export async function loadFile( - filePath?: string, - options?: { - root?: string; - defaultFileName?: string; - alias?: Record; - tsconfig?: Tsconfig; - }, -): Promise<{ - path: string; - file?: string; - error?: unknown; - cached?: boolean; -}> { - const { - root = process.cwd(), - defaultFileName, - alias, - tsconfig, - } = options ?? {}; - const start = Date.now(); - - let resolvedPath: string | undefined; - let isMjs = false; - - if (filePath) { - // explicit path is always resolved from cwd - resolvedPath = path.resolve(filePath); - } else if (defaultFileName) { - // implicit file loaded from inline root (if present) - // otherwise from cwd - const jsFile = path.resolve(root, `${defaultFileName}.js`); - if (fs.existsSync(jsFile)) { - resolvedPath = jsFile; - } - - if (!resolvedPath) { - const mjsFile = path.resolve(root, `${defaultFileName}.mjs`); - if (fs.existsSync(mjsFile)) { - resolvedPath = mjsFile; - isMjs = true; - } - } - - if (!resolvedPath) { - const cjsFile = path.resolve(root, `${defaultFileName}.cjs`); - if (fs.existsSync(cjsFile)) { - resolvedPath = cjsFile; - } - } - - if (!resolvedPath) { - const tsFile = path.resolve(root, `${defaultFileName}.ts`); - if (fs.existsSync(tsFile)) { - resolvedPath = tsFile; - } - } - } - - if (!resolvedPath) { - if (filePath) { - throw new Error(chalk.red(`File not found => ${filePath}`)); - } else if (defaultFileName) { - throw new Error( - chalk.red(`File not found => ${defaultFileName}.{js,mjs,cjs,ts}`), - ); - } else { - throw new Error(chalk.red(`File not found`)); - } - } - - const normalizeResolvedPath = normalizeSafe(resolvedPath); - const cachedData = cache.get(resolvedPath); - - if (cachedData) { - return { - path: normalizeResolvedPath, - ...cachedData, - cached: true, - }; - } - - try { - const { code: file } = await bundleFile( - resolvedPath, - isMjs, - root || path.dirname(normalizeResolvedPath), - alias, - tsconfig?.compilerOptions, - ); - - debug(`bundled file loaded in ${Date.now() - start}ms`); - - cache.set(resolvedPath, { file }); - - return { - path: normalizeResolvedPath, - file, - }; - } catch (error) { - cache.set(resolvedPath, { error }); - - return { - path: normalizeResolvedPath, - error, - }; - } -} - -async function bundleFile( - fileName: string, - mjs = false, - workspace: string, - alias?: Record, - compilerOptions?: Tsconfig['compilerOptions'], -): Promise<{ code: string; dependencies: string[] }> { - const result = await build({ - absWorkingDir: process.cwd(), - entryPoints: [fileName], - outfile: 'out.js', - write: false, - platform: 'node', - bundle: true, - format: mjs ? 'esm' : 'cjs', - sourcemap: 'inline', - metafile: true, - target: compilerOptions?.target || 'es6', - minify: false, - minifyIdentifiers: false, - minifySyntax: false, - minifyWhitespace: false, - treeShaking: false, - keepNames: false, - plugins: [ - ...(alias || compilerOptions?.paths - ? [ - { - name: 'aliasing', - setup(build: PluginBuild) { - build.onResolve( - { filter: /^[\w@][^:]/ }, - async ({ path: id }) => { - if (alias) { - const matchKeys = Object.keys(alias); - const match = matchKeys.find( - (key) => - id.startsWith(key) || mm.isMatch(id, matchKeys), - ); - - if (match) { - const find = mm.scan(match); - const replacement = mm.scan(alias[match]); - - const base = path.resolve(workspace, replacement.base); - const newPath = find.base - ? id.replace(find.base, base) - : joinSafe(base, id); - - const ext = path.extname(newPath); - - const aliased = ext ? newPath : `${newPath}.ts`; - - if (!fs.existsSync(aliased)) { - return; - } - - return { - path: aliased, - }; - } - } - - if (compilerOptions?.paths) { - const matchKeys = Object.keys(compilerOptions?.paths); - const match = matchKeys.find( - (key) => - id.startsWith(key) || mm.isMatch(id, matchKeys), - ); - - if (match) { - const find = mm.scan(match); - const replacement = mm.scan( - compilerOptions?.paths[match][0], - ); - - const base = path.resolve(workspace, replacement.base); - const newPath = find.base - ? id.replace(find.base, base) - : joinSafe(base, id); - - const ext = path.extname(newPath); - - const aliased = ext ? newPath : `${newPath}.ts`; - - if (!fs.existsSync(aliased)) { - return; - } - - return { - path: aliased, - }; - } - } - }, - ); - }, - }, - ] - : []), - { - name: 'externalize-deps', - setup(build) { - build.onResolve({ filter: /.*/ }, (args) => { - const id = args.path; - if (!id.startsWith('.') && !path.isAbsolute(id)) { - return { - external: true, - }; - } - }); - }, - }, - { - name: 'replace-import-meta', - setup(build) { - build.onLoad({ filter: /\.[jt]s$/ }, async (args) => { - const contents = await fs.promises.readFile(args.path, 'utf8'); - return { - loader: args.path.endsWith('.ts') ? 'ts' : 'js', - contents: contents - .replaceAll( - /\bimport\.meta\.url\b/g, - JSON.stringify(`file://${args.path}`), - ) - .replaceAll( - /\b__dirname\b/g, - JSON.stringify(path.dirname(args.path)), - ) - .replaceAll(/\b__filename\b/g, JSON.stringify(args.path)), - }; - }); - }, - }, - ], - }); - const { text } = result.outputFiles[0]; - return { - code: text, - dependencies: result.metafile ? Object.keys(result.metafile.inputs) : [], - }; -} - export async function removeFilesAndEmptyFolders( patterns: string[], dir: string, ) { - const files = await glob(patterns, { + const files = await globby(patterns, { cwd: dir, absolute: true, }); @@ -308,14 +46,14 @@ export async function removeFilesAndEmptyFolders( await Promise.all(files.map((file) => fs.promises.unlink(file))); // Find and remove empty directories - const directories = await glob(['**/*'], { + const directories = await globby(['**/*'], { cwd: dir, absolute: true, onlyDirectories: true, }); // Sort directories by depth (deepest first) to ensure we can remove nested empty folders - const sortedDirectories = directories.sort((a, b) => { + const sortedDirectories = directories.toSorted((a, b) => { const depthA = a.split('/').length; const depthB = b.split('/').length; return depthB - depthA; diff --git a/packages/core/src/utils/validator.ts b/packages/core/src/utils/validator.ts index a1456c925..14ac7447a 100644 --- a/packages/core/src/utils/validator.ts +++ b/packages/core/src/utils/validator.ts @@ -1,6 +1,6 @@ // @ts-expect-error no types exists for this package :( import ibmOpenapiRuleset from '@ibm-cloud/openapi-ruleset'; -import { Spectral } from '@stoplight/spectral-core'; +import stoplight from '@stoplight/spectral-core'; import type { OpenAPIObject } from 'openapi3-ts/oas30'; import { @@ -19,7 +19,7 @@ export const ibmOpenapiValidator = async ( ) => { const ruleset = typeof validation === 'boolean' ? ibmOpenapiRuleset : validation; - const spectral = new Spectral(); + const spectral = new stoplight.Spectral(); spectral.setRuleset(ruleset); const results = await spectral.run( specs as unknown as Record, diff --git a/packages/core/tsconfig.build.json b/packages/core/tsconfig.build.json index b00c4731b..d51c1955e 100644 --- a/packages/core/tsconfig.build.json +++ b/packages/core/tsconfig.build.json @@ -1,5 +1,6 @@ { "extends": "./tsconfig.json", + "exclude": ["__tests__", "**/*.test.ts", "**/*.spec.ts"], "include": ["src/**/*.ts"], "compilerOptions": { "outDir": "dist" diff --git a/packages/fetch/package.json b/packages/fetch/package.json index 45f48b032..4b007a9ad 100644 --- a/packages/fetch/package.json +++ b/packages/fetch/package.json @@ -2,10 +2,11 @@ "name": "@orval/fetch", "version": "7.15.0", "license": "MIT", + "type": "module", "exports": { - ".": { + "import": { "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "import": "./dist/index.js" } }, "files": [ @@ -26,7 +27,7 @@ "devDependencies": { "eslint": "^9.38.0", "rimraf": "^6.0.1", - "tsdown": "^0.15.8", + "tsdown": "^0.15.9", "typescript": "^5.9.3" } } diff --git a/packages/fetch/src/index.ts b/packages/fetch/src/index.ts index 4a389b447..678b3b947 100644 --- a/packages/fetch/src/index.ts +++ b/packages/fetch/src/index.ts @@ -1,25 +1,26 @@ -import { ClientHeaderBuilder, pascal } from '@orval/core'; import { camel, - ClientBuilder, - ClientGeneratorsBuilder, + type ClientBuilder, + type ClientGeneratorsBuilder, + type ClientHeaderBuilder, + generateBodyOptions, generateFormDataAndUrlEncodedFunction, generateVerbImports, - GeneratorOptions, - GeneratorVerbOptions, + type GeneratorOptions, + type GeneratorVerbOptions, GetterPropType, - stringify, - toObjectString, - generateBodyOptions, isObject, + pascal, resolveRef, + stringify, + toObjectString, } from '@orval/core'; -import { - PathItemObject, +import type { ParameterObject, + PathItemObject, ReferenceObject, } from 'openapi3-ts/oas30'; -import { SchemaObject } from 'openapi3-ts/oas31'; +import type { SchemaObject } from 'openapi3-ts/oas31'; export const generateRequestFunction = ( { @@ -39,7 +40,7 @@ export const generateRequestFunction = ( { route, context, pathRoute }: GeneratorOptions, ) => { const isRequestOptions = override?.requestOptions !== false; - const isFormData = override?.formData.disabled === false; + const isFormData = !override?.formData.disabled; const isFormUrlEncoded = override?.formUrlEncoded !== false; const getUrlFnName = camel(`get-${operationName}-url`); @@ -112,7 +113,7 @@ ${ Object.entries(params || {}).forEach(([key, value]) => { ${explodeArrayImplementation} - ${!isExplodeParametersOnly ? nomalParamsImplementation : ''} + ${isExplodeParametersOnly ? '' : nomalParamsImplementation} });` : '' } @@ -121,7 +122,7 @@ ${ ${ queryParams - ? `return stringifiedParams.length > 0 ? \`${route}${'?${stringifiedParams}'}\` : \`${route}\`` + ? `return stringifiedParams.length > 0 ? \`${route}?\${stringifiedParams}\` : \`${route}\`` : `return \`${route}\`` } }\n`; @@ -169,7 +170,7 @@ ${ ${isContentTypeNdJson(r.contentType) ? `stream: TypedResponse<${r.value}>` : `data: ${r.value || 'unknown'}`} status: ${ r.key === 'default' - ? nonDefaultStatuses.length + ? nonDefaultStatuses.length > 0 ? `Exclude` : 'number' : r.key @@ -219,11 +220,9 @@ ${override.fetch.forceSuccessResponse && hasSuccess ? '' : `export type ${respon prop.type === GetterPropType.NAMED_PATH_PARAMS, ) .map((param) => { - if (param.type === GetterPropType.NAMED_PATH_PARAMS) { - return param.destructured; - } else { - return param.name; - } + return param.type === GetterPropType.NAMED_PATH_PARAMS + ? param.destructured + : param.name; }) .join(','); @@ -253,9 +252,10 @@ ${override.fetch.forceSuccessResponse && hasSuccess ? '' : `export type ${respon : []), ...(headers ? ['...headers'] : []), ]; - const fetchHeadersOption = headersToAdd.length - ? `headers: { ${headersToAdd.join(',')}, ...options?.headers }` - : ''; + const fetchHeadersOption = + headersToAdd.length > 0 + ? `headers: { ${headersToAdd.join(',')}, ...options?.headers }` + : ''; const requestBodyParams = generateBodyOptions( body, isFormData, @@ -318,7 +318,7 @@ ${override.fetch.forceSuccessResponse && hasSuccess ? '' : `export type ${respon `; const implementation = - `${responseTypeImplementation}` + + responseTypeImplementation + `${getUrlFnImplementation}\n` + `${fetchImplementation}\n`; diff --git a/packages/fetch/tsconfig.build.json b/packages/fetch/tsconfig.build.json index b00c4731b..d51c1955e 100644 --- a/packages/fetch/tsconfig.build.json +++ b/packages/fetch/tsconfig.build.json @@ -1,5 +1,6 @@ { "extends": "./tsconfig.json", + "exclude": ["__tests__", "**/*.test.ts", "**/*.spec.ts"], "include": ["src/**/*.ts"], "compilerOptions": { "outDir": "dist" diff --git a/packages/hono/package.json b/packages/hono/package.json index efaa9a748..5abb049d8 100644 --- a/packages/hono/package.json +++ b/packages/hono/package.json @@ -2,10 +2,11 @@ "name": "@orval/hono", "version": "7.15.0", "license": "MIT", + "type": "module", "exports": { - ".": { + "import": { "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "import": "./dist/index.js" } }, "files": [ @@ -32,7 +33,7 @@ "@types/lodash.uniq": "^4.5.9", "eslint": "^9.38.0", "rimraf": "^6.0.1", - "tsdown": "^0.15.8", + "tsdown": "^0.15.9", "typescript": "^5.9.3" } } diff --git a/packages/hono/src/index.ts b/packages/hono/src/index.ts index a380d7be4..53c9f71e7 100644 --- a/packages/hono/src/index.ts +++ b/packages/hono/src/index.ts @@ -29,7 +29,7 @@ import { type InfoObject } from 'openapi3-ts/oas30'; import { getRoute } from './route'; const ZVALIDATOR_SOURCE = fs - .readFileSync(upath.join(__dirname, 'zValidator.ts')) + .readFileSync(upath.join(import.meta.dirname, 'zValidator.ts')) .toString('utf8'); const HONO_DEPENDENCIES: GeneratorDependency[] = [ @@ -165,12 +165,12 @@ export const generateHono: ClientBuilder = (verbOptions, options) => { * whether the code requires zValidator. */ const getHonoHandlers = ( - ...opts: Array<{ + ...opts: { handlerName: string; contextTypeName: string; verbOption: GeneratorVerbOptions; validator: boolean | 'hono' | NormalizedMutator; - }> + }[] ): [ /** The combined TypeScript handler code snippets. */ handlerCode: string, @@ -252,7 +252,8 @@ const getZvalidatorImports = ( if ( !isHonoValidator && - response.originalSchema?.['200']?.content?.['application/json'] != null + response.originalSchema?.['200']?.content?.['application/json'] != + undefined ) { specifiers.push(`${operationName}Response`); } @@ -294,7 +295,7 @@ const generateHandlerFile = async ({ const validator = validatorModule === '@hono/zod-validator' ? ('hono' as const) - : validatorModule != null; + : validatorModule != undefined; const isExist = fs.existsSync(path); @@ -332,7 +333,7 @@ const generateHandlerFile = async ({ const imports = ["import { createFactory } from 'hono/factory';"]; - if (hasZValidator && validatorModule != null) { + if (hasZValidator && validatorModule != undefined) { imports.push( `import { zValidator } from '${generateModuleSpecifier(path, validatorModule)}';`, ); @@ -639,14 +640,14 @@ const generateZodFiles = async ( }; } - const allMutators = zods.reduce( + const allMutators = zods.reduce>( (acc, z) => { for (const mutator of z.mutators ?? []) { acc[mutator.name] = mutator; } return acc; }, - {} as Record, + {}, ); const mutatorsImports = generateMutatorImports({ @@ -691,14 +692,14 @@ const generateZodFiles = async ( ), ); - const allMutators = zods.reduce( + const allMutators = zods.reduce>( (acc, z) => { for (const mutator of z.mutators ?? []) { acc[mutator.name] = mutator; } return acc; }, - {} as Record, + {}, ); const mutatorsImports = generateMutatorImports({ @@ -832,7 +833,7 @@ export const generateExtraFiles: ClientExtraFilesBuilder = async ( const validator = generateZvalidator(output, context); let schemaModule: string; - if (output.schemas != null) { + if (output.schemas != undefined) { schemaModule = getFileInfo(output.schemas).dirname; } else if (output.mode === 'single') { schemaModule = path; diff --git a/packages/hono/tsconfig.build.json b/packages/hono/tsconfig.build.json index b00c4731b..d51c1955e 100644 --- a/packages/hono/tsconfig.build.json +++ b/packages/hono/tsconfig.build.json @@ -1,5 +1,6 @@ { "extends": "./tsconfig.json", + "exclude": ["__tests__", "**/*.test.ts", "**/*.spec.ts"], "include": ["src/**/*.ts"], "compilerOptions": { "outDir": "dist" diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 5f5cd45a9..8b0c509e1 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -2,10 +2,11 @@ "name": "@orval/mcp", "version": "7.15.0", "license": "MIT", + "type": "module", "exports": { - ".": { + "import": { "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "import": "./dist/index.js" } }, "files": [ @@ -28,7 +29,7 @@ "devDependencies": { "eslint": "^9.38.0", "rimraf": "^6.0.1", - "tsdown": "^0.15.8", + "tsdown": "^0.15.9", "typescript": "^5.9.3" } } diff --git a/packages/mcp/src/index.ts b/packages/mcp/src/index.ts index 51a350ad0..25191e024 100644 --- a/packages/mcp/src/index.ts +++ b/packages/mcp/src/index.ts @@ -1,18 +1,17 @@ import { camel, - ClientBuilder, - ClientExtraFilesBuilder, - ClientGeneratorsBuilder, - ClientHeaderBuilder, - ContextSpecs, + type ClientBuilder, + type ClientExtraFilesBuilder, + type ClientGeneratorsBuilder, + type ClientHeaderBuilder, + type ContextSpecs, generateMutatorImports, - generateVerbImports, - GeneratorMutator, - GeneratorVerbOptions, + type GeneratorMutator, + type GeneratorVerbOptions, getFileInfo, getFullRoute, jsDoc, - NormalizedOutputOptions, + type NormalizedOutputOptions, pascal, upath, } from '@orval/core'; @@ -22,7 +21,7 @@ import { generateRequestFunction as generateFetchRequestFunction, } from '@orval/fetch'; import { generateZod } from '@orval/zod'; -import { InfoObject } from 'openapi3-ts/oas30'; +import type { InfoObject } from 'openapi3-ts/oas30'; const getHeader = ( option: false | ((info: InfoObject) => string | string[]), @@ -309,14 +308,14 @@ const generateZodFiles = async ( ), ); - const allMutators = zods.reduce( + const allMutators = zods.reduce>( (acc, z) => { for (const mutator of z.mutators ?? []) { acc[mutator.name] = mutator; } return acc; }, - {} as Record, + {}, ); const mutatorsImports = generateMutatorImports({ @@ -379,13 +378,13 @@ const generateHttpClinetFiles = async ( : './' + filename + '.schemas'; const importNames = clients .flatMap((client) => client.imports) - .reduce((acc, imp) => { + .reduce((acc, imp) => { if (!acc.find((i) => i === imp.name)) { acc.push(imp.name); } return acc; - }, [] as string[]); + }, []); const importImplementation = `import { ${importNames.join( ',\n', )} } from '${relativeSchemasPath}';`; diff --git a/packages/mcp/tsconfig.build.json b/packages/mcp/tsconfig.build.json index b00c4731b..d51c1955e 100644 --- a/packages/mcp/tsconfig.build.json +++ b/packages/mcp/tsconfig.build.json @@ -1,5 +1,6 @@ { "extends": "./tsconfig.json", + "exclude": ["__tests__", "**/*.test.ts", "**/*.spec.ts"], "include": ["src/**/*.ts"], "compilerOptions": { "outDir": "dist" diff --git a/packages/mock/package.json b/packages/mock/package.json index e90e316e9..579c96750 100644 --- a/packages/mock/package.json +++ b/packages/mock/package.json @@ -2,10 +2,11 @@ "name": "@orval/mock", "version": "7.15.0", "license": "MIT", + "type": "module", "exports": { - ".": { + "import": { "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "import": "./dist/index.js" } }, "files": [ @@ -27,7 +28,7 @@ "devDependencies": { "eslint": "^9.38.0", "rimraf": "^6.0.1", - "tsdown": "^0.15.8", + "tsdown": "^0.15.9", "typescript": "^5.9.3", "vitest": "^3.2.4" } diff --git a/packages/mock/src/delay.ts b/packages/mock/src/delay.ts index c4b8ee0d1..21f33c44f 100644 --- a/packages/mock/src/delay.ts +++ b/packages/mock/src/delay.ts @@ -1,4 +1,4 @@ -import { GlobalMockOptions, NormalizedOverrideOutput } from '@orval/core'; +import type { GlobalMockOptions, NormalizedOverrideOutput } from '@orval/core'; export const getDelay = ( override?: NormalizedOverrideOutput, diff --git a/packages/mock/src/index.ts b/packages/mock/src/index.ts index 751c973e5..cb883b814 100644 --- a/packages/mock/src/index.ts +++ b/packages/mock/src/index.ts @@ -1,4 +1,4 @@ -import { +import type { GenerateMockImports, GeneratorOptions, GeneratorVerbOptions, diff --git a/packages/mock/src/msw/index.ts b/packages/mock/src/msw/index.ts index 41147673f..9e71a8d48 100644 --- a/packages/mock/src/msw/index.ts +++ b/packages/mock/src/msw/index.ts @@ -1,16 +1,16 @@ import { - ClientMockGeneratorBuilder, + type ClientMockGeneratorBuilder, generateDependencyImports, - GenerateMockImports, - GeneratorDependency, - GeneratorImport, - GeneratorOptions, - GeneratorVerbOptions, - GlobalMockOptions, + type GenerateMockImports, + type GeneratorDependency, + type GeneratorImport, + type GeneratorOptions, + type GeneratorVerbOptions, + type GlobalMockOptions, isFunction, isObject, pascal, - ResReqTypesValue, + type ResReqTypesValue, } from '@orval/core'; import { getDelay } from '../delay'; diff --git a/packages/mock/src/msw/mocks.ts b/packages/mock/src/msw/mocks.ts index d45435d06..919f2dda7 100644 --- a/packages/mock/src/msw/mocks.ts +++ b/packages/mock/src/msw/mocks.ts @@ -1,16 +1,16 @@ import { - ContextSpecs, + type ContextSpecs, generalJSTypesWithArray, - GeneratorImport, - GlobalMockOptions, + type GeneratorImport, + type GlobalMockOptions, isFunction, - MockOptions, - NormalizedOverrideOutput, + type MockOptions, + type NormalizedOverrideOutput, resolveRef, - ResReqTypesValue, + type ResReqTypesValue, stringify, } from '@orval/core'; -import { OpenAPIObject, SchemaObject } from 'openapi3-ts/oas30'; +import type { OpenAPIObject, SchemaObject } from 'openapi3-ts/oas30'; import { getMockScalar } from '../faker/getters'; diff --git a/packages/mock/tsconfig.build.json b/packages/mock/tsconfig.build.json index b00c4731b..d51c1955e 100644 --- a/packages/mock/tsconfig.build.json +++ b/packages/mock/tsconfig.build.json @@ -1,5 +1,6 @@ { "extends": "./tsconfig.json", + "exclude": ["__tests__", "**/*.test.ts", "**/*.spec.ts"], "include": ["src/**/*.ts"], "compilerOptions": { "outDir": "dist" diff --git a/packages/orval/package.json b/packages/orval/package.json index 0580daf71..d3a1de0a8 100644 --- a/packages/orval/package.json +++ b/packages/orval/package.json @@ -3,12 +3,12 @@ "description": "A swagger client generator for typescript", "version": "7.15.0", "license": "MIT", + "type": "module", "files": [ "dist", "!dist/**/*.d.ts.map" ], "bin": "./dist/bin/orval.js", - "type": "commonjs", "exports": { ".": { "types": "./dist/index.d.ts", @@ -66,7 +66,7 @@ "eslint": "^9.38.0", "openapi-types": "^12.1.3", "rimraf": "^6.0.1", - "tsdown": "^0.15.8", + "tsdown": "^0.15.9", "typescript": "^5.9.3", "vitest": "^3.2.4" }, @@ -83,18 +83,18 @@ "@orval/query": "workspace:*", "@orval/swr": "workspace:*", "@orval/zod": "workspace:*", - "chalk": "^4.1.2", + "chalk": "^5.6.2", "chokidar": "^4.0.3", "commander": "^14.0.1", "enquirer": "^2.4.1", - "execa": "^5.1.1", - "find-up": "5.0.0", + "execa": "^9.6.0", + "find-up": "8.0.0", "fs-extra": "^11.3.2", "js-yaml": "4.1.0", "lodash.uniq": "^4.5.0", "openapi3-ts": "4.5.0", "string-argv": "^0.3.2", - "tsconfck": "^2.1.2", + "tsconfck": "^3.1.6", "typedoc": "^0.28.14", "typedoc-plugin-coverage": "^4.0.2", "typedoc-plugin-markdown": "^4.9.0" diff --git a/packages/orval/src/generate.ts b/packages/orval/src/generate.ts index 998787a6d..ed1a6e886 100644 --- a/packages/orval/src/generate.ts +++ b/packages/orval/src/generate.ts @@ -102,7 +102,7 @@ function findConfigFile(configFilePath?: string) { } const root = process.cwd(); - const exts = ['.ts', '.js', '.mjs', '.cjs']; + const exts = ['.ts', '.js', '.mjs']; for (const ext of exts) { const fullPath = path.resolve(root, `orval.config${ext}`); if (fs.existsSync(fullPath)) { diff --git a/packages/orval/src/utils/execute-hook.ts b/packages/orval/src/utils/execute-hook.ts index 80b603b02..011a4eb12 100644 --- a/packages/orval/src/utils/execute-hook.ts +++ b/packages/orval/src/utils/execute-hook.ts @@ -9,7 +9,7 @@ import { type NormalizedHookCommand, } from '@orval/core'; import chalk from 'chalk'; -import execa from 'execa'; +import { execa } from 'execa'; import { parseArgsStringToArgv } from 'string-argv'; export const executeHook = async ( diff --git a/packages/orval/src/utils/github.ts b/packages/orval/src/utils/github.ts index 911b03d6f..6348399ba 100644 --- a/packages/orval/src/utils/github.ts +++ b/packages/orval/src/utils/github.ts @@ -2,7 +2,7 @@ import https from 'node:https'; import SwaggerParser from '@apidevtools/swagger-parser'; import { upath } from '@orval/core'; -import { prompt } from 'enquirer'; +import enquirer from 'enquirer'; import fs from 'fs-extra'; import { request } from './request'; @@ -58,7 +58,7 @@ export const getGithubAcessToken = async (githubTokenPath: string) => { if (await fs.pathExists(githubTokenPath)) { return fs.readFile(githubTokenPath, 'utf8'); } else { - const answers = await prompt<{ + const answers = await enquirer.prompt<{ githubToken: string; saveToken: boolean; }>([ @@ -86,7 +86,7 @@ export const getGithubAcessToken = async (githubTokenPath: string) => { }; export const getGithubOpenApi = async (url: string): Promise => { - const githubTokenPath = upath.join(__dirname, '.githubToken'); + const githubTokenPath = upath.join(import.meta.dirname, '.githubToken'); const accessToken = await getGithubAcessToken(githubTokenPath); const [info] = url.split('github.com/').slice(-1); @@ -104,7 +104,7 @@ export const getGithubOpenApi = async (url: string): Promise => { ); if (isErrorRemoveLink) { - const answers = await prompt<{ removeToken: boolean }>([ + const answers = await enquirer.prompt<{ removeToken: boolean }>([ { type: 'confirm', name: 'removeToken', @@ -125,7 +125,7 @@ export const getGithubOpenApi = async (url: string): Promise => { } if (error.body.message === 'Bad credentials') { - const answers = await prompt<{ removeToken: boolean }>([ + const answers = await enquirer.prompt<{ removeToken: boolean }>([ { type: 'confirm', name: 'removeToken', diff --git a/packages/orval/src/utils/options.ts b/packages/orval/src/utils/options.ts index b24b69ea7..cd47aa036 100644 --- a/packages/orval/src/utils/options.ts +++ b/packages/orval/src/utils/options.ts @@ -45,9 +45,9 @@ import chalk from 'chalk'; import pkg from '../../package.json'; import { githubResolver } from './github'; +import { httpResolver } from './http-resolver'; import { loadPackageJson } from './package-json'; import { loadTsconfig } from './tsconfig'; -import { httpResolver } from './http-resolver'; /** * Type helper to make it easier to use orval.config.ts diff --git a/packages/orval/src/utils/package-json.ts b/packages/orval/src/utils/package-json.ts index 072183736..d60dd3000 100644 --- a/packages/orval/src/utils/package-json.ts +++ b/packages/orval/src/utils/package-json.ts @@ -1,6 +1,6 @@ import { dynamicImport, isString, log, type PackageJson } from '@orval/core'; import chalk from 'chalk'; -import findUp from 'find-up'; +import { findUp } from 'find-up'; import fs from 'fs-extra'; import yaml from 'js-yaml'; diff --git a/packages/orval/src/utils/tsconfig.ts b/packages/orval/src/utils/tsconfig.ts index 72764b6cd..d8bbb088d 100644 --- a/packages/orval/src/utils/tsconfig.ts +++ b/packages/orval/src/utils/tsconfig.ts @@ -1,5 +1,5 @@ import { isObject, isString, isUndefined, type Tsconfig } from '@orval/core'; -import findUp from 'find-up'; +import { findUp } from 'find-up'; import fs from 'fs-extra'; import { parse } from 'tsconfck'; diff --git a/packages/orval/src/write-specs.ts b/packages/orval/src/write-specs.ts index 6d5ec39b0..d6e1b6ef2 100644 --- a/packages/orval/src/write-specs.ts +++ b/packages/orval/src/write-specs.ts @@ -16,7 +16,7 @@ import { writeTagsMode, } from '@orval/core'; import chalk from 'chalk'; -import execa, { type ExecaError } from 'execa'; +import { execa, ExecaError } from 'execa'; import fs from 'fs-extra'; import uniq from 'lodash.uniq'; import type { InfoObject } from 'openapi3-ts/oas30'; @@ -45,7 +45,7 @@ export const writeSpecs = async ( ) => { const { info = { title: '', version: 0 }, schemas, target } = builder; const { output } = options; - const projectTitle = projectName || info.title; + const projectTitle = projectName ?? info.title; const specsName = Object.keys(schemas).reduce< Record @@ -191,11 +191,9 @@ export const writeSpecs = async ( try { await execa('biome', ['check', '--write', ...paths]); } catch (error) { - const errorExeca = error as ExecaError; - const message = - errorExeca.exitCode === 1 - ? errorExeca.stdout + errorExeca.stderr - : `⚠️ ${projectTitle ? `${projectTitle} - ` : ''}biome not found`; + let message = `⚠️ ${projectTitle ? `${projectTitle} - ` : ''}biome not found`; + if (error instanceof ExecaError && error.exitCode === 1) + message = error.message; log(chalk.yellow(message)); } diff --git a/packages/orval/tsconfig.build.json b/packages/orval/tsconfig.build.json index b00c4731b..d51c1955e 100644 --- a/packages/orval/tsconfig.build.json +++ b/packages/orval/tsconfig.build.json @@ -1,5 +1,6 @@ { "extends": "./tsconfig.json", + "exclude": ["__tests__", "**/*.test.ts", "**/*.spec.ts"], "include": ["src/**/*.ts"], "compilerOptions": { "outDir": "dist" diff --git a/packages/query/package.json b/packages/query/package.json index bb62ee540..1f4e68297 100644 --- a/packages/query/package.json +++ b/packages/query/package.json @@ -2,10 +2,11 @@ "name": "@orval/query", "version": "7.15.0", "license": "MIT", + "type": "module", "exports": { - ".": { + "import": { "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "import": "./dist/index.js" } }, "files": [ @@ -23,14 +24,14 @@ "dependencies": { "@orval/core": "workspace:*", "@orval/fetch": "workspace:*", - "chalk": "^4.1.2", + "chalk": "^5.6.2", "lodash.omitby": "^4.6.0" }, "devDependencies": { "@types/lodash.omitby": "^4.6.9", "eslint": "^9.38.0", "rimraf": "^6.0.1", - "tsdown": "^0.15.8", + "tsdown": "^0.15.9", "vitest": "^3.2.4" } } diff --git a/packages/query/src/client.ts b/packages/query/src/client.ts index 518fc4de8..01c3332fb 100644 --- a/packages/query/src/client.ts +++ b/packages/query/src/client.ts @@ -1,14 +1,14 @@ import { - ClientHeaderBuilder, + type ClientHeaderBuilder, generateFormDataAndUrlEncodedFunction, generateMutatorConfig, generateMutatorRequestOptions, generateOptions, - GeneratorDependency, - GeneratorMutator, - GeneratorOptions, - GeneratorVerbOptions, - GetterResponse, + type GeneratorDependency, + type GeneratorMutator, + type GeneratorOptions, + type GeneratorVerbOptions, + type GetterResponse, isSyntheticDefaultImportsAllow, OutputHttpClient, pascal, diff --git a/packages/query/src/index.ts b/packages/query/src/index.ts index 08f96e56b..4f005d6bb 100644 --- a/packages/query/src/index.ts +++ b/packages/query/src/index.ts @@ -1,32 +1,32 @@ import { camel, - ClientBuilder, - ClientDependenciesBuilder, - ClientHeaderBuilder, + type ClientBuilder, + type ClientDependenciesBuilder, + type ClientHeaderBuilder, compareVersions, generateMutator, generateVerbImports, - GeneratorDependency, - GeneratorMutator, - GeneratorOptions, - GeneratorVerbOptions, + type GeneratorDependency, + type GeneratorMutator, + type GeneratorOptions, + type GeneratorVerbOptions, getRouteAsArray, - GetterParams, - GetterProp, - GetterProps, + type GetterParams, + type GetterProp, + type GetterProps, GetterPropType, - GetterQueryParam, - GetterResponse, + type GetterQueryParam, + type GetterResponse, isObject, jsDoc, mergeDeep, - NormalizedOutputOptions, + type NormalizedOutputOptions, OutputClient, - OutputClientFunc, + type OutputClientFunc, OutputHttpClient, - PackageJson, + type PackageJson, pascal, - QueryOptions, + type QueryOptions, stringify, toObjectString, Verbs, @@ -1458,8 +1458,9 @@ const generateQueryHook = async ( implementation += ` ${ - !queryKeyMutator - ? uniqueQueryOptionsByKeys.reduce((acc, queryOption) => { + queryKeyMutator + ? '' + : uniqueQueryOptionsByKeys.reduce((acc, queryOption) => { const queryKeyProps = makeParamsOptional( toObjectString( props.filter((prop) => prop.type !== GetterPropType.HEADER), @@ -1497,7 +1498,6 @@ ${override.query.shouldExportQueryKey ? 'export ' : ''}const ${queryOption.query `; return acc + queryKeyFn; }, '') - : '' }`; implementation += ` diff --git a/packages/query/src/utils.ts b/packages/query/src/utils.ts index b5d5c6d15..97ae9270e 100644 --- a/packages/query/src/utils.ts +++ b/packages/query/src/utils.ts @@ -1,15 +1,15 @@ import { getIsBodyVerb, - GetterProps, + type GetterProps, GetterPropType, isObject, isString, - Mutator, - NormalizedMutator, - NormalizedQueryOptions, + type Mutator, + type NormalizedMutator, + type NormalizedQueryOptions, OutputClient, - OutputClientFunc, - QueryOptions, + type OutputClientFunc, + type QueryOptions, TEMPLATE_TAG_REGEX, upath, Verbs, diff --git a/packages/query/tsconfig.build.json b/packages/query/tsconfig.build.json index b00c4731b..d51c1955e 100644 --- a/packages/query/tsconfig.build.json +++ b/packages/query/tsconfig.build.json @@ -1,5 +1,6 @@ { "extends": "./tsconfig.json", + "exclude": ["__tests__", "**/*.test.ts", "**/*.spec.ts"], "include": ["src/**/*.ts"], "compilerOptions": { "outDir": "dist" diff --git a/packages/swr/package.json b/packages/swr/package.json index 76443401f..a49ce7574 100644 --- a/packages/swr/package.json +++ b/packages/swr/package.json @@ -2,10 +2,11 @@ "name": "@orval/swr", "version": "7.15.0", "license": "MIT", + "type": "module", "exports": { - ".": { + "import": { "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "import": "./dist/index.js" } }, "files": [ @@ -26,6 +27,6 @@ "devDependencies": { "eslint": "^9.38.0", "rimraf": "^6.0.1", - "tsdown": "^0.15.8" + "tsdown": "^0.15.9" } } diff --git a/packages/swr/src/client.ts b/packages/swr/src/client.ts index 477b7ba01..4773b6d72 100644 --- a/packages/swr/src/client.ts +++ b/packages/swr/src/client.ts @@ -1,14 +1,14 @@ import { - ClientHeaderBuilder, + type ClientHeaderBuilder, generateFormDataAndUrlEncodedFunction, generateMutatorConfig, generateMutatorRequestOptions, generateOptions, - GeneratorDependency, - GeneratorMutator, - GeneratorOptions, - GeneratorVerbOptions, - GetterResponse, + type GeneratorDependency, + type GeneratorMutator, + type GeneratorOptions, + type GeneratorVerbOptions, + type GetterResponse, isSyntheticDefaultImportsAllow, OutputHttpClient, toObjectString, diff --git a/packages/swr/src/index.ts b/packages/swr/src/index.ts index dceacdee8..b46c8e70e 100644 --- a/packages/swr/src/index.ts +++ b/packages/swr/src/index.ts @@ -1,37 +1,38 @@ import { camel, - ClientBuilder, - ClientDependenciesBuilder, - ClientGeneratorsBuilder, - ClientHeaderBuilder, + type ClientBuilder, + type ClientDependenciesBuilder, + type ClientGeneratorsBuilder, + type ClientHeaderBuilder, generateVerbImports, - GeneratorDependency, - GeneratorMutator, - GeneratorOptions, - GeneratorVerbOptions, - GetterParams, - GetterProp, - GetterProps, + type GeneratorDependency, + type GeneratorMutator, + type GeneratorOptions, + type GeneratorVerbOptions, + type GetterParams, + type GetterProp, + type GetterProps, GetterPropType, - GetterResponse, + type GetterResponse, + jsDoc, + OutputHttpClient, pascal, stringify, + type SwrOptions, toObjectString, Verbs, - jsDoc, - SwrOptions, - OutputHttpClient, } from '@orval/core'; + import { AXIOS_DEPENDENCIES, generateSwrRequestFunction, - getSwrRequestOptions, - getSwrErrorType, - getSwrRequestSecondArg, getHttpRequestSecondArg, - getSwrMutationFetcherOptionType, + getSwrErrorType, getSwrHeader, + getSwrMutationFetcherOptionType, getSwrMutationFetcherType, + getSwrRequestOptions, + getSwrRequestSecondArg, } from './client'; const PARAMS_SERIALIZER_DEPENDENCIES: GeneratorDependency[] = [ @@ -186,7 +187,7 @@ const generateSwrImplementation = ({ const httpFunctionProps = swrProperties; const enabledImplementation = `const isEnabled = swrOptions?.enabled !== false${ - params.length + params.length > 0 ? ` && !!(${params.map(({ name }) => name).join(' && ')})` : '' }`; @@ -418,11 +419,9 @@ const generateSwrHook = ( prop.type === GetterPropType.NAMED_PATH_PARAMS, ) .map((param) => { - if (param.type === GetterPropType.NAMED_PATH_PARAMS) { - return param.destructured; - } else { - return param.name; - } + return param.type === GetterPropType.NAMED_PATH_PARAMS + ? param.destructured + : param.name; }) .join(','); @@ -434,11 +433,9 @@ const generateSwrHook = ( prop.type === GetterPropType.QUERY_PARAM, ) .map((prop) => { - if (prop.type === GetterPropType.NAMED_PATH_PARAMS) { - return prop.destructured; - } else { - return prop.name; - } + return prop.type === GetterPropType.NAMED_PATH_PARAMS + ? prop.destructured + : prop.name; }) .join(','); @@ -517,11 +514,9 @@ export const ${swrKeyFnName} = (${queryKeyProps}) => [\`${route}\`${ const httpFnPropertiesForGet = props .filter((prop) => prop.type !== GetterPropType.HEADER) .map((prop) => { - if (prop.type === GetterPropType.NAMED_PATH_PARAMS) { - return prop.destructured; - } else { - return prop.name; - } + return prop.type === GetterPropType.NAMED_PATH_PARAMS + ? prop.destructured + : prop.name; }) .join(', '); @@ -546,8 +541,8 @@ export const ${swrKeyFnName} = (${queryKeyProps}) => [\`${route}\`${ export const ${swrMutationFetcherName} = (${queryKeyProps} ${swrMutationFetcherOptions}) => { return (_: Key, __: { arg?: never }): ${swrMutationFetcherType} => { return ${operationName}(${httpFnPropertiesForGet}${ - swrMutationFetcherOptions.length - ? (httpFnPropertiesForGet.length ? ', ' : '') + 'options' + swrMutationFetcherOptions.length > 0 + ? (httpFnPropertiesForGet.length > 0 ? ', ' : '') + 'options' : '' }); } @@ -631,8 +626,8 @@ export const ${swrMutationFetcherName} = (${queryKeyProps} ${swrMutationFetcherO export const ${swrMutationFetcherName} = (${swrProps} ${swrMutationFetcherOptions}) => { return (_: Key, ${swrMutationFetcherArg}: { arg: ${swrBodyType} }) => { return ${operationName}(${httpFnProperties}${ - swrMutationFetcherOptions.length - ? (httpFnProperties.length ? ', ' : '') + 'options' + swrMutationFetcherOptions.length > 0 + ? (httpFnProperties.length > 0 ? ', ' : '') + 'options' : '' }); } @@ -662,10 +657,10 @@ export const ${swrMutationFetcherName} = (${swrProps} ${swrMutationFetcherOption export const generateSwrHeader: ClientHeaderBuilder = (params) => ` ${ - !params.hasAwaitedType - ? `type AwaitedInput = PromiseLike | T;\n + params.hasAwaitedType + ? '' + : `type AwaitedInput = PromiseLike | T;\n type Awaited = O extends AwaitedInput ? T : never;\n\n` - : '' } ${ params.isRequestOptions && params.isMutator diff --git a/packages/swr/tsconfig.build.json b/packages/swr/tsconfig.build.json index b00c4731b..d51c1955e 100644 --- a/packages/swr/tsconfig.build.json +++ b/packages/swr/tsconfig.build.json @@ -1,5 +1,6 @@ { "extends": "./tsconfig.json", + "exclude": ["__tests__", "**/*.test.ts", "**/*.spec.ts"], "include": ["src/**/*.ts"], "compilerOptions": { "outDir": "dist" diff --git a/packages/tsdown.base.ts b/packages/tsdown.base.ts index 00985aa34..5d6b37965 100644 --- a/packages/tsdown.base.ts +++ b/packages/tsdown.base.ts @@ -3,7 +3,9 @@ import type { UserConfig } from 'tsdown'; export const baseOptions: UserConfig = { entry: ['src/index.ts'], target: 'node22.18', - format: 'cjs', + format: 'esm', tsconfig: 'tsconfig.build.json', - sourcemap: true, + dts: { + sourcemap: true, + }, }; diff --git a/packages/zod/package.json b/packages/zod/package.json index 74a034018..971e300fd 100644 --- a/packages/zod/package.json +++ b/packages/zod/package.json @@ -2,10 +2,11 @@ "name": "@orval/zod", "version": "7.15.0", "license": "MIT", + "type": "module", "exports": { - ".": { + "import": { "types": "./dist/index.d.ts", - "default": "./dist/index.js" + "import": "./dist/index.js" } }, "files": [ @@ -29,7 +30,7 @@ "@types/lodash.uniq": "^4.5.9", "eslint": "^9.38.0", "rimraf": "^6.0.1", - "tsdown": "^0.15.8", + "tsdown": "^0.15.9", "vitest": "^3.2.4" } } diff --git a/packages/zod/src/index.ts b/packages/zod/src/index.ts index 5876a0915..80333e51c 100644 --- a/packages/zod/src/index.ts +++ b/packages/zod/src/index.ts @@ -1,14 +1,14 @@ import { camel, - ClientBuilder, - ClientGeneratorsBuilder, - ContextSpecs, + type ClientBuilder, + type ClientGeneratorsBuilder, + type ContextSpecs, escape, generateMutator, - GeneratorDependency, - GeneratorMutator, - GeneratorOptions, - GeneratorVerbOptions, + type GeneratorDependency, + type GeneratorMutator, + type GeneratorOptions, + type GeneratorVerbOptions, getNumberWord, getRefInfo, isBoolean, @@ -18,10 +18,10 @@ import { pascal, resolveRef, stringify, - ZodCoerceType, + type ZodCoerceType, } from '@orval/core'; import uniq from 'lodash.uniq'; -import { +import type { ParameterObject, PathItemObject, ReferenceObject, @@ -29,7 +29,7 @@ import { ResponseObject, SchemaObject, } from 'openapi3-ts/oas30'; -import { SchemaObject as SchemaObject31 } from 'openapi3-ts/oas31'; +import type { SchemaObject as SchemaObject31 } from 'openapi3-ts/oas31'; import { getObjectFunctionName, diff --git a/packages/zod/tsconfig.build.json b/packages/zod/tsconfig.build.json index b00c4731b..d51c1955e 100644 --- a/packages/zod/tsconfig.build.json +++ b/packages/zod/tsconfig.build.json @@ -1,5 +1,6 @@ { "extends": "./tsconfig.json", + "exclude": ["__tests__", "**/*.test.ts", "**/*.spec.ts"], "include": ["src/**/*.ts"], "compilerOptions": { "outDir": "dist" diff --git a/samples/angular-app/orval.config.ts b/samples/angular-app/orval.config.ts index 02c4d012e..aad009c9c 100644 --- a/samples/angular-app/orval.config.ts +++ b/samples/angular-app/orval.config.ts @@ -12,9 +12,7 @@ export default defineConfig({ tsconfig: './tsconfig.app.json', clean: true, override: { - paramsSerializer: { - path: 'src/orval/mutator/custom-params-serializer.ts', - }, + paramsSerializer: 'src/orval/mutator/custom-params-serializer.ts', operations: { listPets: { mutator: 'src/orval/mutator/response-type.ts', @@ -49,7 +47,7 @@ export default defineConfig({ input: { target: './petstore.yaml', override: { - transformer: 'src/orval/transformer/add-version.js', + transformer: 'src/orval/transformer/add-version.ts', }, }, }, diff --git a/samples/angular-app/package.json b/samples/angular-app/package.json index 248dd1e47..98269f936 100644 --- a/samples/angular-app/package.json +++ b/samples/angular-app/package.json @@ -1,6 +1,7 @@ { "name": "angular-app", "version": "7.15.0", + "type": "module", "scripts": { "ng": "ng", "start": "ng serve", @@ -27,8 +28,8 @@ "@angular/build": "^20.3.1", "@angular/cli": "^20.3.1", "@angular/compiler-cli": "^20.3.2", - "@faker-js/faker": "^9.9.0", - "msw": "^2.11.2", + "@faker-js/faker": "^10.1.0", + "msw": "^2.11.6", "orval": "workspace:*", "rimraf": "^6.0.1", "typescript": "~5.8.3", diff --git a/samples/angular-app/public/mockServiceWorker.js b/samples/angular-app/public/mockServiceWorker.js index be4527c7e..2f658e919 100644 --- a/samples/angular-app/public/mockServiceWorker.js +++ b/samples/angular-app/public/mockServiceWorker.js @@ -7,8 +7,8 @@ * - Please do NOT modify this file. */ -const PACKAGE_VERSION = '2.10.4' -const INTEGRITY_CHECKSUM = 'f5825c521429caf22a4dd13b66e243af' +const PACKAGE_VERSION = '2.11.6' +const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82' const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') const activeClientIds = new Set() @@ -71,11 +71,6 @@ addEventListener('message', async function (event) { break } - case 'MOCK_DEACTIVATE': { - activeClientIds.delete(clientId) - break - } - case 'CLIENT_CLOSED': { activeClientIds.delete(clientId) @@ -94,6 +89,8 @@ addEventListener('message', async function (event) { }) addEventListener('fetch', function (event) { + const requestInterceptedAt = Date.now() + // Bypass navigation requests. if (event.request.mode === 'navigate') { return @@ -110,23 +107,29 @@ addEventListener('fetch', function (event) { // Bypass all requests when there are no active clients. // Prevents the self-unregistered worked from handling requests - // after it's been deleted (still remains active until the next reload). + // after it's been terminated (still remains active until the next reload). if (activeClientIds.size === 0) { return } const requestId = crypto.randomUUID() - event.respondWith(handleRequest(event, requestId)) + event.respondWith(handleRequest(event, requestId, requestInterceptedAt)) }) /** * @param {FetchEvent} event * @param {string} requestId + * @param {number} requestInterceptedAt */ -async function handleRequest(event, requestId) { +async function handleRequest(event, requestId, requestInterceptedAt) { const client = await resolveMainClient(event) const requestCloneForEvents = event.request.clone() - const response = await getResponse(event, client, requestId) + const response = await getResponse( + event, + client, + requestId, + requestInterceptedAt, + ) // Send back the response clone for the "response:*" life-cycle events. // Ensure MSW is active and ready to handle the message, otherwise @@ -202,9 +205,10 @@ async function resolveMainClient(event) { * @param {FetchEvent} event * @param {Client | undefined} client * @param {string} requestId + * @param {number} requestInterceptedAt * @returns {Promise} */ -async function getResponse(event, client, requestId) { +async function getResponse(event, client, requestId, requestInterceptedAt) { // Clone the request because it might've been already used // (i.e. its body has been read and sent to the client). const requestClone = event.request.clone() @@ -255,6 +259,7 @@ async function getResponse(event, client, requestId) { type: 'REQUEST', payload: { id: requestId, + interceptedAt: requestInterceptedAt, ...serializedRequest, }, }, diff --git a/samples/svelte-query/basic/src/api/transformer/add-version.cjs b/samples/angular-app/src/orval/transformer/add-version.ts similarity index 82% rename from samples/svelte-query/basic/src/api/transformer/add-version.cjs rename to samples/angular-app/src/orval/transformer/add-version.ts index d7c6c1692..f0cd9500f 100644 --- a/samples/svelte-query/basic/src/api/transformer/add-version.cjs +++ b/samples/angular-app/src/orval/transformer/add-version.ts @@ -1,10 +1,6 @@ -/** - * Transformer function for orval. - * - * @param {OpenAPIObject} schema - * @return {OpenAPIObject} - */ -module.exports = (inputSchema) => ({ +import type { InputTransformerFn } from 'orval'; + +const transformer: InputTransformerFn = (inputSchema) => ({ ...inputSchema, paths: Object.entries(inputSchema.paths).reduce( (acc, [path, pathItem]) => ({ @@ -34,3 +30,5 @@ module.exports = (inputSchema) => ({ {}, ), }); + +export default transformer; diff --git a/samples/basic/api/transformer/add-version.js b/samples/basic/api/transformer/add-version.js index 558a5bc65..6f2a23185 100644 --- a/samples/basic/api/transformer/add-version.js +++ b/samples/basic/api/transformer/add-version.js @@ -4,7 +4,7 @@ * @param {OpenAPIObject} inputSchema * @return {OpenAPIObject} */ -module.exports = (inputSchema) => ({ +export default (inputSchema) => ({ ...inputSchema, paths: Object.entries(inputSchema.paths).reduce( (acc, [path, pathItem]) => ({ diff --git a/samples/basic/package.json b/samples/basic/package.json index 19f726b01..e509d8fd4 100644 --- a/samples/basic/package.json +++ b/samples/basic/package.json @@ -3,6 +3,7 @@ "version": "7.15.0", "description": "", "private": true, + "type": "module", "main": "index.html", "scripts": { "generate-api": "orval", @@ -17,9 +18,9 @@ "orval": "workspace:*" }, "dependencies": { - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "axios": "^1.12.2", - "msw": "^2.11.2" + "msw": "^2.11.6" }, "dependenciesMeta": { "msw": { diff --git a/samples/hono/hono-with-fetch-client/next-app/package.json b/samples/hono/hono-with-fetch-client/next-app/package.json index 20e34c82f..9dd136731 100644 --- a/samples/hono/hono-with-fetch-client/next-app/package.json +++ b/samples/hono/hono-with-fetch-client/next-app/package.json @@ -14,8 +14,8 @@ "react-dom": "^18.3.1" }, "devDependencies": { - "@faker-js/faker": "^9.9.0", - "@types/node": "^22.18.10", + "@faker-js/faker": "^10.1.0", + "@types/node": "^22.18.12", "@types/react": "^18.3.24", "@types/react-dom": "^18.3.7", "postcss": "8.5.6", diff --git a/samples/mcp/petstore/package.json b/samples/mcp/petstore/package.json index 9ca37bee3..a56bd9f14 100644 --- a/samples/mcp/petstore/package.json +++ b/samples/mcp/petstore/package.json @@ -8,11 +8,11 @@ "generate-api": "orval" }, "dependencies": { - "@modelcontextprotocol/sdk": "1.18.0", + "@modelcontextprotocol/sdk": "1.20.1", "zod": "^3.25.76" }, "devDependencies": { - "@types/node": "^22.18.10", + "@types/node": "^22.18.12", "orval": "workspace:*", "ts-node": "^10.9.2", "typescript": "~5.8.3" diff --git a/samples/next-app-with-fetch/package.json b/samples/next-app-with-fetch/package.json index 9848c286e..a4f995d52 100644 --- a/samples/next-app-with-fetch/package.json +++ b/samples/next-app-with-fetch/package.json @@ -16,13 +16,13 @@ "react-dom": "^18.3.1" }, "devDependencies": { - "@faker-js/faker": "^9.9.0", - "@types/node": "^22.18.10", + "@faker-js/faker": "^10.1.0", + "@types/node": "^22.18.12", "@types/react": "^18.3.24", "@types/react-dom": "^18.3.7", - "eslint": "^9.35.0", + "eslint": "^9.38.0", "eslint-config-next": "14.2.32", - "msw": "^2.11.2", + "msw": "^2.11.6", "orval": "workspace:*", "postcss": "8.5.6", "tailwindcss": "^3.4.17", diff --git a/samples/react-app-with-swr/basic/package.json b/samples/react-app-with-swr/basic/package.json index a3134f843..c80a32a23 100644 --- a/samples/react-app-with-swr/basic/package.json +++ b/samples/react-app-with-swr/basic/package.json @@ -3,12 +3,12 @@ "version": "7.15.0", "private": true, "dependencies": { - "@faker-js/faker": "^9.9.0", - "@types/node": "^22.18.10", + "@faker-js/faker": "^10.1.0", + "@types/node": "^22.18.12", "@types/react": "^18.3.24", "@types/react-dom": "^18.3.7", "axios": "^1.12.2", - "msw": "^2.11.2", + "msw": "^2.11.6", "react": "^18.3.1", "react-dom": "^18.3.1", "react-scripts": "^5.0.1", @@ -23,6 +23,9 @@ "built": true } }, + "msw": { + "workerDirectory": "public" + }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", diff --git a/samples/react-app-with-swr/basic/public/mockServiceWorker.js b/samples/react-app-with-swr/basic/public/mockServiceWorker.js index 63489fd54..2f658e919 100644 --- a/samples/react-app-with-swr/basic/public/mockServiceWorker.js +++ b/samples/react-app-with-swr/basic/public/mockServiceWorker.js @@ -1,241 +1,349 @@ +/* eslint-disable */ +/* tslint:disable */ + /** * Mock Service Worker. * @see https://github.com/mswjs/msw * - Please do NOT modify this file. - * - Please do NOT serve this file on production. */ -/* eslint-disable */ -/* tslint:disable */ -const INTEGRITY_CHECKSUM = '65d33ca82955e1c5928aed19d1bdf3f9'; -const bypassHeaderName = 'x-msw-bypass'; +const PACKAGE_VERSION = '2.11.6' +const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82' +const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') +const activeClientIds = new Set() -let clients = {}; +addEventListener('install', function () { + self.skipWaiting() +}) -self.addEventListener('install', function () { - return self.skipWaiting(); -}); +addEventListener('activate', function (event) { + event.waitUntil(self.clients.claim()) +}) -self.addEventListener('activate', async function (event) { - return self.clients.claim(); -}); +addEventListener('message', async function (event) { + const clientId = Reflect.get(event.source || {}, 'id') -self.addEventListener('message', async function (event) { - const clientId = event.source.id; - const client = await event.currentTarget.clients.get(clientId); - const allClients = await self.clients.matchAll(); - const allClientIds = allClients.map((client) => client.id); + if (!clientId || !self.clients) { + return + } + + const client = await self.clients.get(clientId) + + if (!client) { + return + } + + const allClients = await self.clients.matchAll({ + type: 'window', + }) switch (event.data) { case 'KEEPALIVE_REQUEST': { sendToClient(client, { type: 'KEEPALIVE_RESPONSE', - }); - break; + }) + break } case 'INTEGRITY_CHECK_REQUEST': { sendToClient(client, { type: 'INTEGRITY_CHECK_RESPONSE', - payload: INTEGRITY_CHECKSUM, - }); - break; + payload: { + packageVersion: PACKAGE_VERSION, + checksum: INTEGRITY_CHECKSUM, + }, + }) + break } case 'MOCK_ACTIVATE': { - clients = ensureKeys(allClientIds, clients); - clients[clientId] = true; + activeClientIds.add(clientId) sendToClient(client, { type: 'MOCKING_ENABLED', - payload: true, - }); - break; - } - - case 'MOCK_DEACTIVATE': { - clients = ensureKeys(allClientIds, clients); - clients[clientId] = false; - break; + payload: { + client: { + id: client.id, + frameType: client.frameType, + }, + }, + }) + break } case 'CLIENT_CLOSED': { + activeClientIds.delete(clientId) + const remainingClients = allClients.filter((client) => { - return client.id !== clientId; - }); + return client.id !== clientId + }) // Unregister itself when there are no more clients if (remainingClients.length === 0) { - self.registration.unregister(); + self.registration.unregister() } - break; + break } } -}); +}) -self.addEventListener('fetch', function (event) { - const { clientId, request } = event; - const requestClone = request.clone(); - const getOriginalResponse = () => fetch(requestClone); +addEventListener('fetch', function (event) { + const requestInterceptedAt = Date.now() // Bypass navigation requests. - if (request.mode === 'navigate') { - return; - } - - // Bypass mocking if the current client isn't present in the internal clients map - // (i.e. has the mocking disabled). - if (!clients[clientId]) { - return; + if (event.request.mode === 'navigate') { + return } // Opening the DevTools triggers the "only-if-cached" request // that cannot be handled by the worker. Bypass such requests. - if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { - return; + if ( + event.request.cache === 'only-if-cached' && + event.request.mode !== 'same-origin' + ) { + return } - event.respondWith( - new Promise(async (resolve, reject) => { - const client = await event.target.clients.get(clientId); + // Bypass all requests when there are no active clients. + // Prevents the self-unregistered worked from handling requests + // after it's been terminated (still remains active until the next reload). + if (activeClientIds.size === 0) { + return + } - // Bypass mocking when the request client is not active. - if (!client) { - return resolve(getOriginalResponse()); - } + const requestId = crypto.randomUUID() + event.respondWith(handleRequest(event, requestId, requestInterceptedAt)) +}) - // Bypass requests with the explicit bypass header - if (requestClone.headers.get(bypassHeaderName) === 'true') { - const modifiedHeaders = serializeHeaders(requestClone.headers); +/** + * @param {FetchEvent} event + * @param {string} requestId + * @param {number} requestInterceptedAt + */ +async function handleRequest(event, requestId, requestInterceptedAt) { + const client = await resolveMainClient(event) + const requestCloneForEvents = event.request.clone() + const response = await getResponse( + event, + client, + requestId, + requestInterceptedAt, + ) + + // Send back the response clone for the "response:*" life-cycle events. + // Ensure MSW is active and ready to handle the message, otherwise + // this message will pend indefinitely. + if (client && activeClientIds.has(client.id)) { + const serializedRequest = await serializeRequest(requestCloneForEvents) + + // Clone the response so both the client and the library could consume it. + const responseClone = response.clone() + + sendToClient( + client, + { + type: 'RESPONSE', + payload: { + isMockedResponse: IS_MOCKED_RESPONSE in response, + request: { + id: requestId, + ...serializedRequest, + }, + response: { + type: responseClone.type, + status: responseClone.status, + statusText: responseClone.statusText, + headers: Object.fromEntries(responseClone.headers.entries()), + body: responseClone.body, + }, + }, + }, + responseClone.body ? [serializedRequest.body, responseClone.body] : [], + ) + } - // Remove the bypass header to comply with the CORS preflight check - delete modifiedHeaders[bypassHeaderName]; + return response +} - const originalRequest = new Request(requestClone, { - headers: new Headers(modifiedHeaders), - }); +/** + * Resolve the main client for the given event. + * Client that issues a request doesn't necessarily equal the client + * that registered the worker. It's with the latter the worker should + * communicate with during the response resolving phase. + * @param {FetchEvent} event + * @returns {Promise} + */ +async function resolveMainClient(event) { + const client = await self.clients.get(event.clientId) - return resolve(fetch(originalRequest)); - } + if (activeClientIds.has(event.clientId)) { + return client + } - const reqHeaders = serializeHeaders(request.headers); - const body = await request.text(); + if (client?.frameType === 'top-level') { + return client + } - const rawClientMessage = await sendToClient(client, { - type: 'REQUEST', - payload: { - url: request.url, - method: request.method, - headers: reqHeaders, - cache: request.cache, - mode: request.mode, - credentials: request.credentials, - destination: request.destination, - integrity: request.integrity, - redirect: request.redirect, - referrer: request.referrer, - referrerPolicy: request.referrerPolicy, - body, - bodyUsed: request.bodyUsed, - keepalive: request.keepalive, - }, - }); - - const clientMessage = rawClientMessage; - - switch (clientMessage.type) { - case 'MOCK_SUCCESS': { - setTimeout( - resolve.bind(this, createResponse(clientMessage)), - clientMessage.payload.delay, - ); - break; - } - - case 'MOCK_NOT_FOUND': { - return resolve(getOriginalResponse()); - } - - case 'NETWORK_ERROR': { - const { name, message } = clientMessage.payload; - const networkError = new Error(message); - networkError.name = name; - - // Rejecting a request Promise emulates a network error. - return reject(networkError); - } - - case 'INTERNAL_ERROR': { - const parsedBody = JSON.parse(clientMessage.payload.body); - - console.error( - `\ -[MSW] Request handler function for "%s %s" has thrown the following exception: - -${parsedBody.errorType}: ${parsedBody.message} -(see more detailed error stack trace in the mocked response body) - -This exception has been gracefully handled as a 500 response, however, it's strongly recommended to resolve this error. -If you wish to mock an error response, please refer to this guide: https://mswjs.io/docs/recipes/mocking-error-responses\ - `, - request.method, - request.url, - ); - - return resolve(createResponse(clientMessage)); - } + const allClients = await self.clients.matchAll({ + type: 'window', + }) + + return allClients + .filter((client) => { + // Get only those clients that are currently visible. + return client.visibilityState === 'visible' + }) + .find((client) => { + // Find the client ID that's recorded in the + // set of clients that have registered the worker. + return activeClientIds.has(client.id) + }) +} + +/** + * @param {FetchEvent} event + * @param {Client | undefined} client + * @param {string} requestId + * @param {number} requestInterceptedAt + * @returns {Promise} + */ +async function getResponse(event, client, requestId, requestInterceptedAt) { + // Clone the request because it might've been already used + // (i.e. its body has been read and sent to the client). + const requestClone = event.request.clone() + + function passthrough() { + // Cast the request headers to a new Headers instance + // so the headers can be manipulated with. + const headers = new Headers(requestClone.headers) + + // Remove the "accept" header value that marked this request as passthrough. + // This prevents request alteration and also keeps it compliant with the + // user-defined CORS policies. + const acceptHeader = headers.get('accept') + if (acceptHeader) { + const values = acceptHeader.split(',').map((value) => value.trim()) + const filteredValues = values.filter( + (value) => value !== 'msw/passthrough', + ) + + if (filteredValues.length > 0) { + headers.set('accept', filteredValues.join(', ')) + } else { + headers.delete('accept') } - }).catch((error) => { - console.error( - '[MSW] Failed to mock a "%s" request to "%s": %s', - request.method, - request.url, - error, - ); - }), - ); -}); - -function serializeHeaders(headers) { - const reqHeaders = {}; - headers.forEach((value, name) => { - reqHeaders[name] = reqHeaders[name] - ? [].concat(reqHeaders[name]).concat(value) - : value; - }); - return reqHeaders; + } + + return fetch(requestClone, { headers }) + } + + // Bypass mocking when the client is not active. + if (!client) { + return passthrough() + } + + // Bypass initial page load requests (i.e. static assets). + // The absence of the immediate/parent client in the map of the active clients + // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet + // and is not ready to handle requests. + if (!activeClientIds.has(client.id)) { + return passthrough() + } + + // Notify the client that a request has been intercepted. + const serializedRequest = await serializeRequest(event.request) + const clientMessage = await sendToClient( + client, + { + type: 'REQUEST', + payload: { + id: requestId, + interceptedAt: requestInterceptedAt, + ...serializedRequest, + }, + }, + [serializedRequest.body], + ) + + switch (clientMessage.type) { + case 'MOCK_RESPONSE': { + return respondWithMock(clientMessage.data) + } + + case 'PASSTHROUGH': { + return passthrough() + } + } + + return passthrough() } -function sendToClient(client, message) { +/** + * @param {Client} client + * @param {any} message + * @param {Array} transferrables + * @returns {Promise} + */ +function sendToClient(client, message, transferrables = []) { return new Promise((resolve, reject) => { - const channel = new MessageChannel(); + const channel = new MessageChannel() channel.port1.onmessage = (event) => { if (event.data && event.data.error) { - reject(event.data.error); - } else { - resolve(event.data); + return reject(event.data.error) } - }; - client.postMessage(JSON.stringify(message), [channel.port2]); - }); -} + resolve(event.data) + } -function createResponse(clientMessage) { - return new Response(clientMessage.payload.body, { - ...clientMessage.payload, - headers: clientMessage.payload.headers, - }); + client.postMessage(message, [ + channel.port2, + ...transferrables.filter(Boolean), + ]) + }) } -function ensureKeys(keys, obj) { - return Object.keys(obj).reduce((acc, key) => { - if (keys.includes(key)) { - acc[key] = obj[key]; - } +/** + * @param {Response} response + * @returns {Response} + */ +function respondWithMock(response) { + // Setting response status code to 0 is a no-op. + // However, when responding with a "Response.error()", the produced Response + // instance will have status code set to 0. Since it's not possible to create + // a Response instance with status code 0, handle that use-case separately. + if (response.status === 0) { + return Response.error() + } + + const mockedResponse = new Response(response.body, response) + + Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, { + value: true, + enumerable: true, + }) + + return mockedResponse +} - return acc; - }, {}); +/** + * @param {Request} request + */ +async function serializeRequest(request) { + return { + url: request.url, + mode: request.mode, + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + cache: request.cache, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body: await request.arrayBuffer(), + keepalive: request.keepalive, + } } diff --git a/samples/react-app-with-swr/basic/src/api/transformer/add-version.js b/samples/react-app-with-swr/basic/src/api/transformer/add-version.js index d7c6c1692..60b02e0ca 100644 --- a/samples/react-app-with-swr/basic/src/api/transformer/add-version.js +++ b/samples/react-app-with-swr/basic/src/api/transformer/add-version.js @@ -4,7 +4,7 @@ * @param {OpenAPIObject} schema * @return {OpenAPIObject} */ -module.exports = (inputSchema) => ({ +export default (inputSchema) => ({ ...inputSchema, paths: Object.entries(inputSchema.paths).reduce( (acc, [path, pathItem]) => ({ diff --git a/samples/react-app-with-swr/fetch-client/package.json b/samples/react-app-with-swr/fetch-client/package.json index 0ffe14876..6ee1b6860 100644 --- a/samples/react-app-with-swr/fetch-client/package.json +++ b/samples/react-app-with-swr/fetch-client/package.json @@ -16,17 +16,17 @@ "swr": "^2.3.6" }, "devDependencies": { - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "@types/react": "^18.3.24", "@types/react-dom": "^18.3.7", - "@typescript-eslint/eslint-plugin": "^8.43.0", - "@typescript-eslint/parser": "^8.43.0", - "@vitejs/plugin-react": "^4.7.0", - "eslint": "^9.35.0", + "@typescript-eslint/eslint-plugin": "^8.46.2", + "@typescript-eslint/parser": "^8.46.2", + "@vitejs/plugin-react": "^5.0.4", + "eslint": "^9.38.0", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.20", "orval": "workspace:*", "typescript": "~5.8.3", - "vite": "^5.4.20" + "vite": "^7.1.11" } } diff --git a/samples/react-app/package.json b/samples/react-app/package.json index 5e710d9ed..a57c83962 100644 --- a/samples/react-app/package.json +++ b/samples/react-app/package.json @@ -24,8 +24,8 @@ ] }, "dependencies": { - "@faker-js/faker": "^9.9.0", - "@types/node": "^22.18.10", + "@faker-js/faker": "^10.1.0", + "@types/node": "^22.18.12", "@types/react": "^18.3.24", "@types/react-dom": "^18.3.7", "axios": "^1.12.2", @@ -36,7 +36,7 @@ "typescript": "~5.8.3" }, "devDependencies": { - "msw": "^2.11.2", + "msw": "^2.11.6", "orval": "workspace:*" }, "dependenciesMeta": { diff --git a/samples/react-app/public/mockServiceWorker.js b/samples/react-app/public/mockServiceWorker.js index ed8de433a..2f658e919 100644 --- a/samples/react-app/public/mockServiceWorker.js +++ b/samples/react-app/public/mockServiceWorker.js @@ -2,201 +2,245 @@ /* tslint:disable */ /** - * Mock Service Worker (2.0.2). + * Mock Service Worker. * @see https://github.com/mswjs/msw * - Please do NOT modify this file. - * - Please do NOT serve this file on production. */ -const INTEGRITY_CHECKSUM = '0877fcdc026242810f5bfde0d7178db4'; -const IS_MOCKED_RESPONSE = Symbol('isMockedResponse'); -const activeClientIds = new Set(); +const PACKAGE_VERSION = '2.11.6' +const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82' +const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') +const activeClientIds = new Set() -self.addEventListener('install', function () { - self.skipWaiting(); -}); +addEventListener('install', function () { + self.skipWaiting() +}) -self.addEventListener('activate', function (event) { - event.waitUntil(self.clients.claim()); -}); +addEventListener('activate', function (event) { + event.waitUntil(self.clients.claim()) +}) -self.addEventListener('message', async function (event) { - const clientId = event.source.id; +addEventListener('message', async function (event) { + const clientId = Reflect.get(event.source || {}, 'id') if (!clientId || !self.clients) { - return; + return } - const client = await self.clients.get(clientId); + const client = await self.clients.get(clientId) if (!client) { - return; + return } const allClients = await self.clients.matchAll({ type: 'window', - }); + }) switch (event.data) { case 'KEEPALIVE_REQUEST': { sendToClient(client, { type: 'KEEPALIVE_RESPONSE', - }); - break; + }) + break } case 'INTEGRITY_CHECK_REQUEST': { sendToClient(client, { type: 'INTEGRITY_CHECK_RESPONSE', - payload: INTEGRITY_CHECKSUM, - }); - break; + payload: { + packageVersion: PACKAGE_VERSION, + checksum: INTEGRITY_CHECKSUM, + }, + }) + break } case 'MOCK_ACTIVATE': { - activeClientIds.add(clientId); + activeClientIds.add(clientId) sendToClient(client, { type: 'MOCKING_ENABLED', - payload: true, - }); - break; - } - - case 'MOCK_DEACTIVATE': { - activeClientIds.delete(clientId); - break; + payload: { + client: { + id: client.id, + frameType: client.frameType, + }, + }, + }) + break } case 'CLIENT_CLOSED': { - activeClientIds.delete(clientId); + activeClientIds.delete(clientId) const remainingClients = allClients.filter((client) => { - return client.id !== clientId; - }); + return client.id !== clientId + }) // Unregister itself when there are no more clients if (remainingClients.length === 0) { - self.registration.unregister(); + self.registration.unregister() } - break; + break } } -}); +}) -self.addEventListener('fetch', function (event) { - const { request } = event; +addEventListener('fetch', function (event) { + const requestInterceptedAt = Date.now() // Bypass navigation requests. - if (request.mode === 'navigate') { - return; + if (event.request.mode === 'navigate') { + return } // Opening the DevTools triggers the "only-if-cached" request // that cannot be handled by the worker. Bypass such requests. - if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { - return; + if ( + event.request.cache === 'only-if-cached' && + event.request.mode !== 'same-origin' + ) { + return } // Bypass all requests when there are no active clients. // Prevents the self-unregistered worked from handling requests - // after it's been deleted (still remains active until the next reload). + // after it's been terminated (still remains active until the next reload). if (activeClientIds.size === 0) { - return; + return } - // Generate unique request ID. - const requestId = crypto.randomUUID(); - event.respondWith(handleRequest(event, requestId)); -}); + const requestId = crypto.randomUUID() + event.respondWith(handleRequest(event, requestId, requestInterceptedAt)) +}) -async function handleRequest(event, requestId) { - const client = await resolveMainClient(event); - const response = await getResponse(event, client, requestId); +/** + * @param {FetchEvent} event + * @param {string} requestId + * @param {number} requestInterceptedAt + */ +async function handleRequest(event, requestId, requestInterceptedAt) { + const client = await resolveMainClient(event) + const requestCloneForEvents = event.request.clone() + const response = await getResponse( + event, + client, + requestId, + requestInterceptedAt, + ) // Send back the response clone for the "response:*" life-cycle events. // Ensure MSW is active and ready to handle the message, otherwise // this message will pend indefinitely. if (client && activeClientIds.has(client.id)) { - (async function () { - const responseClone = response.clone(); - // When performing original requests, response body will - // always be a ReadableStream, even for 204 responses. - // But when creating a new Response instance on the client, - // the body for a 204 response must be null. - const responseBody = response.status === 204 ? null : responseClone.body; - - sendToClient( - client, - { - type: 'RESPONSE', - payload: { - requestId, - isMockedResponse: IS_MOCKED_RESPONSE in response, + const serializedRequest = await serializeRequest(requestCloneForEvents) + + // Clone the response so both the client and the library could consume it. + const responseClone = response.clone() + + sendToClient( + client, + { + type: 'RESPONSE', + payload: { + isMockedResponse: IS_MOCKED_RESPONSE in response, + request: { + id: requestId, + ...serializedRequest, + }, + response: { type: responseClone.type, status: responseClone.status, statusText: responseClone.statusText, - body: responseBody, headers: Object.fromEntries(responseClone.headers.entries()), + body: responseClone.body, }, }, - [responseBody], - ); - })(); + }, + responseClone.body ? [serializedRequest.body, responseClone.body] : [], + ) } - return response; + return response } -// Resolve the main client for the given event. -// Client that issues a request doesn't necessarily equal the client -// that registered the worker. It's with the latter the worker should -// communicate with during the response resolving phase. +/** + * Resolve the main client for the given event. + * Client that issues a request doesn't necessarily equal the client + * that registered the worker. It's with the latter the worker should + * communicate with during the response resolving phase. + * @param {FetchEvent} event + * @returns {Promise} + */ async function resolveMainClient(event) { - const client = await self.clients.get(event.clientId); + const client = await self.clients.get(event.clientId) + + if (activeClientIds.has(event.clientId)) { + return client + } if (client?.frameType === 'top-level') { - return client; + return client } const allClients = await self.clients.matchAll({ type: 'window', - }); + }) return allClients .filter((client) => { // Get only those clients that are currently visible. - return client.visibilityState === 'visible'; + return client.visibilityState === 'visible' }) .find((client) => { // Find the client ID that's recorded in the // set of clients that have registered the worker. - return activeClientIds.has(client.id); - }); + return activeClientIds.has(client.id) + }) } -async function getResponse(event, client, requestId) { - const { request } = event; - +/** + * @param {FetchEvent} event + * @param {Client | undefined} client + * @param {string} requestId + * @param {number} requestInterceptedAt + * @returns {Promise} + */ +async function getResponse(event, client, requestId, requestInterceptedAt) { // Clone the request because it might've been already used // (i.e. its body has been read and sent to the client). - const requestClone = request.clone(); + const requestClone = event.request.clone() function passthrough() { - const headers = Object.fromEntries(requestClone.headers.entries()); - - // Remove internal MSW request header so the passthrough request - // complies with any potential CORS preflight checks on the server. - // Some servers forbid unknown request headers. - delete headers['x-msw-intention']; + // Cast the request headers to a new Headers instance + // so the headers can be manipulated with. + const headers = new Headers(requestClone.headers) + + // Remove the "accept" header value that marked this request as passthrough. + // This prevents request alteration and also keeps it compliant with the + // user-defined CORS policies. + const acceptHeader = headers.get('accept') + if (acceptHeader) { + const values = acceptHeader.split(',').map((value) => value.trim()) + const filteredValues = values.filter( + (value) => value !== 'msw/passthrough', + ) + + if (filteredValues.length > 0) { + headers.set('accept', filteredValues.join(', ')) + } else { + headers.delete('accept') + } + } - return fetch(requestClone, { headers }); + return fetch(requestClone, { headers }) } // Bypass mocking when the client is not active. if (!client) { - return passthrough(); + return passthrough() } // Bypass initial page load requests (i.e. static assets). @@ -204,89 +248,102 @@ async function getResponse(event, client, requestId) { // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet // and is not ready to handle requests. if (!activeClientIds.has(client.id)) { - return passthrough(); - } - - // Bypass requests with the explicit bypass header. - // Such requests can be issued by "ctx.fetch()". - const mswIntention = request.headers.get('x-msw-intention'); - if (['bypass', 'passthrough'].includes(mswIntention)) { - return passthrough(); + return passthrough() } // Notify the client that a request has been intercepted. - const requestBuffer = await request.arrayBuffer(); + const serializedRequest = await serializeRequest(event.request) const clientMessage = await sendToClient( client, { type: 'REQUEST', payload: { id: requestId, - url: request.url, - mode: request.mode, - method: request.method, - headers: Object.fromEntries(request.headers.entries()), - cache: request.cache, - credentials: request.credentials, - destination: request.destination, - integrity: request.integrity, - redirect: request.redirect, - referrer: request.referrer, - referrerPolicy: request.referrerPolicy, - body: requestBuffer, - keepalive: request.keepalive, + interceptedAt: requestInterceptedAt, + ...serializedRequest, }, }, - [requestBuffer], - ); + [serializedRequest.body], + ) switch (clientMessage.type) { case 'MOCK_RESPONSE': { - return respondWithMock(clientMessage.data); + return respondWithMock(clientMessage.data) } - case 'MOCK_NOT_FOUND': { - return passthrough(); + case 'PASSTHROUGH': { + return passthrough() } } - return passthrough(); + return passthrough() } +/** + * @param {Client} client + * @param {any} message + * @param {Array} transferrables + * @returns {Promise} + */ function sendToClient(client, message, transferrables = []) { return new Promise((resolve, reject) => { - const channel = new MessageChannel(); + const channel = new MessageChannel() channel.port1.onmessage = (event) => { if (event.data && event.data.error) { - return reject(event.data.error); + return reject(event.data.error) } - resolve(event.data); - }; + resolve(event.data) + } - client.postMessage( - message, - [channel.port2].concat(transferrables.filter(Boolean)), - ); - }); + client.postMessage(message, [ + channel.port2, + ...transferrables.filter(Boolean), + ]) + }) } -async function respondWithMock(response) { +/** + * @param {Response} response + * @returns {Response} + */ +function respondWithMock(response) { // Setting response status code to 0 is a no-op. // However, when responding with a "Response.error()", the produced Response // instance will have status code set to 0. Since it's not possible to create // a Response instance with status code 0, handle that use-case separately. if (response.status === 0) { - return Response.error(); + return Response.error() } - const mockedResponse = new Response(response.body, response); + const mockedResponse = new Response(response.body, response) Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, { value: true, enumerable: true, - }); + }) + + return mockedResponse +} - return mockedResponse; +/** + * @param {Request} request + */ +async function serializeRequest(request) { + return { + url: request.url, + mode: request.mode, + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + cache: request.cache, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body: await request.arrayBuffer(), + keepalive: request.keepalive, + } } diff --git a/samples/react-app/src/api/transformer/add-version.js b/samples/react-app/src/api/transformer/add-version.js index d7c6c1692..60b02e0ca 100644 --- a/samples/react-app/src/api/transformer/add-version.js +++ b/samples/react-app/src/api/transformer/add-version.js @@ -4,7 +4,7 @@ * @param {OpenAPIObject} schema * @return {OpenAPIObject} */ -module.exports = (inputSchema) => ({ +export default (inputSchema) => ({ ...inputSchema, paths: Object.entries(inputSchema.paths).reduce( (acc, [path, pathItem]) => ({ diff --git a/samples/react-query/basic/package.json b/samples/react-query/basic/package.json index e097cca25..8a209749d 100644 --- a/samples/react-query/basic/package.json +++ b/samples/react-query/basic/package.json @@ -2,15 +2,16 @@ "name": "react-query-basic", "version": "7.15.0", "private": true, + "type": "module", "dependencies": { - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "@tanstack/react-query": "~5.62.16", - "@types/node": "^22.18.10", + "@types/node": "^22.18.12", "@types/react": "^18.3.24", "@types/react-dom": "^18.3.7", "ajv": "^8.17.1", "axios": "^1.12.2", - "msw": "^2.11.2", + "msw": "^2.11.6", "react": "^18.3.1", "react-dom": "^18.3.1", "react-scripts": "^5.0.1", @@ -24,6 +25,9 @@ "built": true } }, + "msw": { + "workerDirectory": "public" + }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", diff --git a/samples/react-query/basic/public/mockServiceWorker.js b/samples/react-query/basic/public/mockServiceWorker.js index 63489fd54..2f658e919 100644 --- a/samples/react-query/basic/public/mockServiceWorker.js +++ b/samples/react-query/basic/public/mockServiceWorker.js @@ -1,241 +1,349 @@ +/* eslint-disable */ +/* tslint:disable */ + /** * Mock Service Worker. * @see https://github.com/mswjs/msw * - Please do NOT modify this file. - * - Please do NOT serve this file on production. */ -/* eslint-disable */ -/* tslint:disable */ -const INTEGRITY_CHECKSUM = '65d33ca82955e1c5928aed19d1bdf3f9'; -const bypassHeaderName = 'x-msw-bypass'; +const PACKAGE_VERSION = '2.11.6' +const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82' +const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') +const activeClientIds = new Set() -let clients = {}; +addEventListener('install', function () { + self.skipWaiting() +}) -self.addEventListener('install', function () { - return self.skipWaiting(); -}); +addEventListener('activate', function (event) { + event.waitUntil(self.clients.claim()) +}) -self.addEventListener('activate', async function (event) { - return self.clients.claim(); -}); +addEventListener('message', async function (event) { + const clientId = Reflect.get(event.source || {}, 'id') -self.addEventListener('message', async function (event) { - const clientId = event.source.id; - const client = await event.currentTarget.clients.get(clientId); - const allClients = await self.clients.matchAll(); - const allClientIds = allClients.map((client) => client.id); + if (!clientId || !self.clients) { + return + } + + const client = await self.clients.get(clientId) + + if (!client) { + return + } + + const allClients = await self.clients.matchAll({ + type: 'window', + }) switch (event.data) { case 'KEEPALIVE_REQUEST': { sendToClient(client, { type: 'KEEPALIVE_RESPONSE', - }); - break; + }) + break } case 'INTEGRITY_CHECK_REQUEST': { sendToClient(client, { type: 'INTEGRITY_CHECK_RESPONSE', - payload: INTEGRITY_CHECKSUM, - }); - break; + payload: { + packageVersion: PACKAGE_VERSION, + checksum: INTEGRITY_CHECKSUM, + }, + }) + break } case 'MOCK_ACTIVATE': { - clients = ensureKeys(allClientIds, clients); - clients[clientId] = true; + activeClientIds.add(clientId) sendToClient(client, { type: 'MOCKING_ENABLED', - payload: true, - }); - break; - } - - case 'MOCK_DEACTIVATE': { - clients = ensureKeys(allClientIds, clients); - clients[clientId] = false; - break; + payload: { + client: { + id: client.id, + frameType: client.frameType, + }, + }, + }) + break } case 'CLIENT_CLOSED': { + activeClientIds.delete(clientId) + const remainingClients = allClients.filter((client) => { - return client.id !== clientId; - }); + return client.id !== clientId + }) // Unregister itself when there are no more clients if (remainingClients.length === 0) { - self.registration.unregister(); + self.registration.unregister() } - break; + break } } -}); +}) -self.addEventListener('fetch', function (event) { - const { clientId, request } = event; - const requestClone = request.clone(); - const getOriginalResponse = () => fetch(requestClone); +addEventListener('fetch', function (event) { + const requestInterceptedAt = Date.now() // Bypass navigation requests. - if (request.mode === 'navigate') { - return; - } - - // Bypass mocking if the current client isn't present in the internal clients map - // (i.e. has the mocking disabled). - if (!clients[clientId]) { - return; + if (event.request.mode === 'navigate') { + return } // Opening the DevTools triggers the "only-if-cached" request // that cannot be handled by the worker. Bypass such requests. - if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { - return; + if ( + event.request.cache === 'only-if-cached' && + event.request.mode !== 'same-origin' + ) { + return } - event.respondWith( - new Promise(async (resolve, reject) => { - const client = await event.target.clients.get(clientId); + // Bypass all requests when there are no active clients. + // Prevents the self-unregistered worked from handling requests + // after it's been terminated (still remains active until the next reload). + if (activeClientIds.size === 0) { + return + } - // Bypass mocking when the request client is not active. - if (!client) { - return resolve(getOriginalResponse()); - } + const requestId = crypto.randomUUID() + event.respondWith(handleRequest(event, requestId, requestInterceptedAt)) +}) - // Bypass requests with the explicit bypass header - if (requestClone.headers.get(bypassHeaderName) === 'true') { - const modifiedHeaders = serializeHeaders(requestClone.headers); +/** + * @param {FetchEvent} event + * @param {string} requestId + * @param {number} requestInterceptedAt + */ +async function handleRequest(event, requestId, requestInterceptedAt) { + const client = await resolveMainClient(event) + const requestCloneForEvents = event.request.clone() + const response = await getResponse( + event, + client, + requestId, + requestInterceptedAt, + ) + + // Send back the response clone for the "response:*" life-cycle events. + // Ensure MSW is active and ready to handle the message, otherwise + // this message will pend indefinitely. + if (client && activeClientIds.has(client.id)) { + const serializedRequest = await serializeRequest(requestCloneForEvents) + + // Clone the response so both the client and the library could consume it. + const responseClone = response.clone() + + sendToClient( + client, + { + type: 'RESPONSE', + payload: { + isMockedResponse: IS_MOCKED_RESPONSE in response, + request: { + id: requestId, + ...serializedRequest, + }, + response: { + type: responseClone.type, + status: responseClone.status, + statusText: responseClone.statusText, + headers: Object.fromEntries(responseClone.headers.entries()), + body: responseClone.body, + }, + }, + }, + responseClone.body ? [serializedRequest.body, responseClone.body] : [], + ) + } - // Remove the bypass header to comply with the CORS preflight check - delete modifiedHeaders[bypassHeaderName]; + return response +} - const originalRequest = new Request(requestClone, { - headers: new Headers(modifiedHeaders), - }); +/** + * Resolve the main client for the given event. + * Client that issues a request doesn't necessarily equal the client + * that registered the worker. It's with the latter the worker should + * communicate with during the response resolving phase. + * @param {FetchEvent} event + * @returns {Promise} + */ +async function resolveMainClient(event) { + const client = await self.clients.get(event.clientId) - return resolve(fetch(originalRequest)); - } + if (activeClientIds.has(event.clientId)) { + return client + } - const reqHeaders = serializeHeaders(request.headers); - const body = await request.text(); + if (client?.frameType === 'top-level') { + return client + } - const rawClientMessage = await sendToClient(client, { - type: 'REQUEST', - payload: { - url: request.url, - method: request.method, - headers: reqHeaders, - cache: request.cache, - mode: request.mode, - credentials: request.credentials, - destination: request.destination, - integrity: request.integrity, - redirect: request.redirect, - referrer: request.referrer, - referrerPolicy: request.referrerPolicy, - body, - bodyUsed: request.bodyUsed, - keepalive: request.keepalive, - }, - }); - - const clientMessage = rawClientMessage; - - switch (clientMessage.type) { - case 'MOCK_SUCCESS': { - setTimeout( - resolve.bind(this, createResponse(clientMessage)), - clientMessage.payload.delay, - ); - break; - } - - case 'MOCK_NOT_FOUND': { - return resolve(getOriginalResponse()); - } - - case 'NETWORK_ERROR': { - const { name, message } = clientMessage.payload; - const networkError = new Error(message); - networkError.name = name; - - // Rejecting a request Promise emulates a network error. - return reject(networkError); - } - - case 'INTERNAL_ERROR': { - const parsedBody = JSON.parse(clientMessage.payload.body); - - console.error( - `\ -[MSW] Request handler function for "%s %s" has thrown the following exception: - -${parsedBody.errorType}: ${parsedBody.message} -(see more detailed error stack trace in the mocked response body) - -This exception has been gracefully handled as a 500 response, however, it's strongly recommended to resolve this error. -If you wish to mock an error response, please refer to this guide: https://mswjs.io/docs/recipes/mocking-error-responses\ - `, - request.method, - request.url, - ); - - return resolve(createResponse(clientMessage)); - } + const allClients = await self.clients.matchAll({ + type: 'window', + }) + + return allClients + .filter((client) => { + // Get only those clients that are currently visible. + return client.visibilityState === 'visible' + }) + .find((client) => { + // Find the client ID that's recorded in the + // set of clients that have registered the worker. + return activeClientIds.has(client.id) + }) +} + +/** + * @param {FetchEvent} event + * @param {Client | undefined} client + * @param {string} requestId + * @param {number} requestInterceptedAt + * @returns {Promise} + */ +async function getResponse(event, client, requestId, requestInterceptedAt) { + // Clone the request because it might've been already used + // (i.e. its body has been read and sent to the client). + const requestClone = event.request.clone() + + function passthrough() { + // Cast the request headers to a new Headers instance + // so the headers can be manipulated with. + const headers = new Headers(requestClone.headers) + + // Remove the "accept" header value that marked this request as passthrough. + // This prevents request alteration and also keeps it compliant with the + // user-defined CORS policies. + const acceptHeader = headers.get('accept') + if (acceptHeader) { + const values = acceptHeader.split(',').map((value) => value.trim()) + const filteredValues = values.filter( + (value) => value !== 'msw/passthrough', + ) + + if (filteredValues.length > 0) { + headers.set('accept', filteredValues.join(', ')) + } else { + headers.delete('accept') } - }).catch((error) => { - console.error( - '[MSW] Failed to mock a "%s" request to "%s": %s', - request.method, - request.url, - error, - ); - }), - ); -}); - -function serializeHeaders(headers) { - const reqHeaders = {}; - headers.forEach((value, name) => { - reqHeaders[name] = reqHeaders[name] - ? [].concat(reqHeaders[name]).concat(value) - : value; - }); - return reqHeaders; + } + + return fetch(requestClone, { headers }) + } + + // Bypass mocking when the client is not active. + if (!client) { + return passthrough() + } + + // Bypass initial page load requests (i.e. static assets). + // The absence of the immediate/parent client in the map of the active clients + // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet + // and is not ready to handle requests. + if (!activeClientIds.has(client.id)) { + return passthrough() + } + + // Notify the client that a request has been intercepted. + const serializedRequest = await serializeRequest(event.request) + const clientMessage = await sendToClient( + client, + { + type: 'REQUEST', + payload: { + id: requestId, + interceptedAt: requestInterceptedAt, + ...serializedRequest, + }, + }, + [serializedRequest.body], + ) + + switch (clientMessage.type) { + case 'MOCK_RESPONSE': { + return respondWithMock(clientMessage.data) + } + + case 'PASSTHROUGH': { + return passthrough() + } + } + + return passthrough() } -function sendToClient(client, message) { +/** + * @param {Client} client + * @param {any} message + * @param {Array} transferrables + * @returns {Promise} + */ +function sendToClient(client, message, transferrables = []) { return new Promise((resolve, reject) => { - const channel = new MessageChannel(); + const channel = new MessageChannel() channel.port1.onmessage = (event) => { if (event.data && event.data.error) { - reject(event.data.error); - } else { - resolve(event.data); + return reject(event.data.error) } - }; - client.postMessage(JSON.stringify(message), [channel.port2]); - }); -} + resolve(event.data) + } -function createResponse(clientMessage) { - return new Response(clientMessage.payload.body, { - ...clientMessage.payload, - headers: clientMessage.payload.headers, - }); + client.postMessage(message, [ + channel.port2, + ...transferrables.filter(Boolean), + ]) + }) } -function ensureKeys(keys, obj) { - return Object.keys(obj).reduce((acc, key) => { - if (keys.includes(key)) { - acc[key] = obj[key]; - } +/** + * @param {Response} response + * @returns {Response} + */ +function respondWithMock(response) { + // Setting response status code to 0 is a no-op. + // However, when responding with a "Response.error()", the produced Response + // instance will have status code set to 0. Since it's not possible to create + // a Response instance with status code 0, handle that use-case separately. + if (response.status === 0) { + return Response.error() + } + + const mockedResponse = new Response(response.body, response) + + Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, { + value: true, + enumerable: true, + }) + + return mockedResponse +} - return acc; - }, {}); +/** + * @param {Request} request + */ +async function serializeRequest(request) { + return { + url: request.url, + mode: request.mode, + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + cache: request.cache, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body: await request.arrayBuffer(), + keepalive: request.keepalive, + } } diff --git a/samples/react-query/basic/src/api/transformer/add-version.js b/samples/react-query/basic/src/api/transformer/add-version.js index d7c6c1692..60b02e0ca 100644 --- a/samples/react-query/basic/src/api/transformer/add-version.js +++ b/samples/react-query/basic/src/api/transformer/add-version.js @@ -4,7 +4,7 @@ * @param {OpenAPIObject} schema * @return {OpenAPIObject} */ -module.exports = (inputSchema) => ({ +export default (inputSchema) => ({ ...inputSchema, paths: Object.entries(inputSchema.paths).reduce( (acc, [path, pathItem]) => ({ diff --git a/samples/react-query/custom-client/package.json b/samples/react-query/custom-client/package.json index aefe337d6..e9a4ab243 100644 --- a/samples/react-query/custom-client/package.json +++ b/samples/react-query/custom-client/package.json @@ -3,14 +3,14 @@ "version": "7.15.0", "private": true, "dependencies": { - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "@types/faker": "^5.5.9", - "@types/node": "^22.18.10", + "@types/node": "^22.18.12", "@types/react": "^18.3.24", "@types/react-dom": "^18.3.7", "axios": "^1.12.2", "faker": "^5.5.3", - "msw": "^2.11.2", + "msw": "^2.11.6", "react": "^18.3.1", "react-dom": "^18.3.1", "react-query": "^3.39.3", @@ -25,6 +25,9 @@ "built": true } }, + "msw": { + "workerDirectory": "public" + }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", diff --git a/samples/react-query/custom-client/public/mockServiceWorker.js b/samples/react-query/custom-client/public/mockServiceWorker.js index 63489fd54..2f658e919 100644 --- a/samples/react-query/custom-client/public/mockServiceWorker.js +++ b/samples/react-query/custom-client/public/mockServiceWorker.js @@ -1,241 +1,349 @@ +/* eslint-disable */ +/* tslint:disable */ + /** * Mock Service Worker. * @see https://github.com/mswjs/msw * - Please do NOT modify this file. - * - Please do NOT serve this file on production. */ -/* eslint-disable */ -/* tslint:disable */ -const INTEGRITY_CHECKSUM = '65d33ca82955e1c5928aed19d1bdf3f9'; -const bypassHeaderName = 'x-msw-bypass'; +const PACKAGE_VERSION = '2.11.6' +const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82' +const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') +const activeClientIds = new Set() -let clients = {}; +addEventListener('install', function () { + self.skipWaiting() +}) -self.addEventListener('install', function () { - return self.skipWaiting(); -}); +addEventListener('activate', function (event) { + event.waitUntil(self.clients.claim()) +}) -self.addEventListener('activate', async function (event) { - return self.clients.claim(); -}); +addEventListener('message', async function (event) { + const clientId = Reflect.get(event.source || {}, 'id') -self.addEventListener('message', async function (event) { - const clientId = event.source.id; - const client = await event.currentTarget.clients.get(clientId); - const allClients = await self.clients.matchAll(); - const allClientIds = allClients.map((client) => client.id); + if (!clientId || !self.clients) { + return + } + + const client = await self.clients.get(clientId) + + if (!client) { + return + } + + const allClients = await self.clients.matchAll({ + type: 'window', + }) switch (event.data) { case 'KEEPALIVE_REQUEST': { sendToClient(client, { type: 'KEEPALIVE_RESPONSE', - }); - break; + }) + break } case 'INTEGRITY_CHECK_REQUEST': { sendToClient(client, { type: 'INTEGRITY_CHECK_RESPONSE', - payload: INTEGRITY_CHECKSUM, - }); - break; + payload: { + packageVersion: PACKAGE_VERSION, + checksum: INTEGRITY_CHECKSUM, + }, + }) + break } case 'MOCK_ACTIVATE': { - clients = ensureKeys(allClientIds, clients); - clients[clientId] = true; + activeClientIds.add(clientId) sendToClient(client, { type: 'MOCKING_ENABLED', - payload: true, - }); - break; - } - - case 'MOCK_DEACTIVATE': { - clients = ensureKeys(allClientIds, clients); - clients[clientId] = false; - break; + payload: { + client: { + id: client.id, + frameType: client.frameType, + }, + }, + }) + break } case 'CLIENT_CLOSED': { + activeClientIds.delete(clientId) + const remainingClients = allClients.filter((client) => { - return client.id !== clientId; - }); + return client.id !== clientId + }) // Unregister itself when there are no more clients if (remainingClients.length === 0) { - self.registration.unregister(); + self.registration.unregister() } - break; + break } } -}); +}) -self.addEventListener('fetch', function (event) { - const { clientId, request } = event; - const requestClone = request.clone(); - const getOriginalResponse = () => fetch(requestClone); +addEventListener('fetch', function (event) { + const requestInterceptedAt = Date.now() // Bypass navigation requests. - if (request.mode === 'navigate') { - return; - } - - // Bypass mocking if the current client isn't present in the internal clients map - // (i.e. has the mocking disabled). - if (!clients[clientId]) { - return; + if (event.request.mode === 'navigate') { + return } // Opening the DevTools triggers the "only-if-cached" request // that cannot be handled by the worker. Bypass such requests. - if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { - return; + if ( + event.request.cache === 'only-if-cached' && + event.request.mode !== 'same-origin' + ) { + return } - event.respondWith( - new Promise(async (resolve, reject) => { - const client = await event.target.clients.get(clientId); + // Bypass all requests when there are no active clients. + // Prevents the self-unregistered worked from handling requests + // after it's been terminated (still remains active until the next reload). + if (activeClientIds.size === 0) { + return + } - // Bypass mocking when the request client is not active. - if (!client) { - return resolve(getOriginalResponse()); - } + const requestId = crypto.randomUUID() + event.respondWith(handleRequest(event, requestId, requestInterceptedAt)) +}) - // Bypass requests with the explicit bypass header - if (requestClone.headers.get(bypassHeaderName) === 'true') { - const modifiedHeaders = serializeHeaders(requestClone.headers); +/** + * @param {FetchEvent} event + * @param {string} requestId + * @param {number} requestInterceptedAt + */ +async function handleRequest(event, requestId, requestInterceptedAt) { + const client = await resolveMainClient(event) + const requestCloneForEvents = event.request.clone() + const response = await getResponse( + event, + client, + requestId, + requestInterceptedAt, + ) + + // Send back the response clone for the "response:*" life-cycle events. + // Ensure MSW is active and ready to handle the message, otherwise + // this message will pend indefinitely. + if (client && activeClientIds.has(client.id)) { + const serializedRequest = await serializeRequest(requestCloneForEvents) + + // Clone the response so both the client and the library could consume it. + const responseClone = response.clone() + + sendToClient( + client, + { + type: 'RESPONSE', + payload: { + isMockedResponse: IS_MOCKED_RESPONSE in response, + request: { + id: requestId, + ...serializedRequest, + }, + response: { + type: responseClone.type, + status: responseClone.status, + statusText: responseClone.statusText, + headers: Object.fromEntries(responseClone.headers.entries()), + body: responseClone.body, + }, + }, + }, + responseClone.body ? [serializedRequest.body, responseClone.body] : [], + ) + } - // Remove the bypass header to comply with the CORS preflight check - delete modifiedHeaders[bypassHeaderName]; + return response +} - const originalRequest = new Request(requestClone, { - headers: new Headers(modifiedHeaders), - }); +/** + * Resolve the main client for the given event. + * Client that issues a request doesn't necessarily equal the client + * that registered the worker. It's with the latter the worker should + * communicate with during the response resolving phase. + * @param {FetchEvent} event + * @returns {Promise} + */ +async function resolveMainClient(event) { + const client = await self.clients.get(event.clientId) - return resolve(fetch(originalRequest)); - } + if (activeClientIds.has(event.clientId)) { + return client + } - const reqHeaders = serializeHeaders(request.headers); - const body = await request.text(); + if (client?.frameType === 'top-level') { + return client + } - const rawClientMessage = await sendToClient(client, { - type: 'REQUEST', - payload: { - url: request.url, - method: request.method, - headers: reqHeaders, - cache: request.cache, - mode: request.mode, - credentials: request.credentials, - destination: request.destination, - integrity: request.integrity, - redirect: request.redirect, - referrer: request.referrer, - referrerPolicy: request.referrerPolicy, - body, - bodyUsed: request.bodyUsed, - keepalive: request.keepalive, - }, - }); - - const clientMessage = rawClientMessage; - - switch (clientMessage.type) { - case 'MOCK_SUCCESS': { - setTimeout( - resolve.bind(this, createResponse(clientMessage)), - clientMessage.payload.delay, - ); - break; - } - - case 'MOCK_NOT_FOUND': { - return resolve(getOriginalResponse()); - } - - case 'NETWORK_ERROR': { - const { name, message } = clientMessage.payload; - const networkError = new Error(message); - networkError.name = name; - - // Rejecting a request Promise emulates a network error. - return reject(networkError); - } - - case 'INTERNAL_ERROR': { - const parsedBody = JSON.parse(clientMessage.payload.body); - - console.error( - `\ -[MSW] Request handler function for "%s %s" has thrown the following exception: - -${parsedBody.errorType}: ${parsedBody.message} -(see more detailed error stack trace in the mocked response body) - -This exception has been gracefully handled as a 500 response, however, it's strongly recommended to resolve this error. -If you wish to mock an error response, please refer to this guide: https://mswjs.io/docs/recipes/mocking-error-responses\ - `, - request.method, - request.url, - ); - - return resolve(createResponse(clientMessage)); - } + const allClients = await self.clients.matchAll({ + type: 'window', + }) + + return allClients + .filter((client) => { + // Get only those clients that are currently visible. + return client.visibilityState === 'visible' + }) + .find((client) => { + // Find the client ID that's recorded in the + // set of clients that have registered the worker. + return activeClientIds.has(client.id) + }) +} + +/** + * @param {FetchEvent} event + * @param {Client | undefined} client + * @param {string} requestId + * @param {number} requestInterceptedAt + * @returns {Promise} + */ +async function getResponse(event, client, requestId, requestInterceptedAt) { + // Clone the request because it might've been already used + // (i.e. its body has been read and sent to the client). + const requestClone = event.request.clone() + + function passthrough() { + // Cast the request headers to a new Headers instance + // so the headers can be manipulated with. + const headers = new Headers(requestClone.headers) + + // Remove the "accept" header value that marked this request as passthrough. + // This prevents request alteration and also keeps it compliant with the + // user-defined CORS policies. + const acceptHeader = headers.get('accept') + if (acceptHeader) { + const values = acceptHeader.split(',').map((value) => value.trim()) + const filteredValues = values.filter( + (value) => value !== 'msw/passthrough', + ) + + if (filteredValues.length > 0) { + headers.set('accept', filteredValues.join(', ')) + } else { + headers.delete('accept') } - }).catch((error) => { - console.error( - '[MSW] Failed to mock a "%s" request to "%s": %s', - request.method, - request.url, - error, - ); - }), - ); -}); - -function serializeHeaders(headers) { - const reqHeaders = {}; - headers.forEach((value, name) => { - reqHeaders[name] = reqHeaders[name] - ? [].concat(reqHeaders[name]).concat(value) - : value; - }); - return reqHeaders; + } + + return fetch(requestClone, { headers }) + } + + // Bypass mocking when the client is not active. + if (!client) { + return passthrough() + } + + // Bypass initial page load requests (i.e. static assets). + // The absence of the immediate/parent client in the map of the active clients + // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet + // and is not ready to handle requests. + if (!activeClientIds.has(client.id)) { + return passthrough() + } + + // Notify the client that a request has been intercepted. + const serializedRequest = await serializeRequest(event.request) + const clientMessage = await sendToClient( + client, + { + type: 'REQUEST', + payload: { + id: requestId, + interceptedAt: requestInterceptedAt, + ...serializedRequest, + }, + }, + [serializedRequest.body], + ) + + switch (clientMessage.type) { + case 'MOCK_RESPONSE': { + return respondWithMock(clientMessage.data) + } + + case 'PASSTHROUGH': { + return passthrough() + } + } + + return passthrough() } -function sendToClient(client, message) { +/** + * @param {Client} client + * @param {any} message + * @param {Array} transferrables + * @returns {Promise} + */ +function sendToClient(client, message, transferrables = []) { return new Promise((resolve, reject) => { - const channel = new MessageChannel(); + const channel = new MessageChannel() channel.port1.onmessage = (event) => { if (event.data && event.data.error) { - reject(event.data.error); - } else { - resolve(event.data); + return reject(event.data.error) } - }; - client.postMessage(JSON.stringify(message), [channel.port2]); - }); -} + resolve(event.data) + } -function createResponse(clientMessage) { - return new Response(clientMessage.payload.body, { - ...clientMessage.payload, - headers: clientMessage.payload.headers, - }); + client.postMessage(message, [ + channel.port2, + ...transferrables.filter(Boolean), + ]) + }) } -function ensureKeys(keys, obj) { - return Object.keys(obj).reduce((acc, key) => { - if (keys.includes(key)) { - acc[key] = obj[key]; - } +/** + * @param {Response} response + * @returns {Response} + */ +function respondWithMock(response) { + // Setting response status code to 0 is a no-op. + // However, when responding with a "Response.error()", the produced Response + // instance will have status code set to 0. Since it's not possible to create + // a Response instance with status code 0, handle that use-case separately. + if (response.status === 0) { + return Response.error() + } + + const mockedResponse = new Response(response.body, response) + + Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, { + value: true, + enumerable: true, + }) + + return mockedResponse +} - return acc; - }, {}); +/** + * @param {Request} request + */ +async function serializeRequest(request) { + return { + url: request.url, + mode: request.mode, + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + cache: request.cache, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body: await request.arrayBuffer(), + keepalive: request.keepalive, + } } diff --git a/samples/react-query/custom-client/src/api/transformer/add-version.js b/samples/react-query/custom-client/src/api/transformer/add-version.js index d7c6c1692..60b02e0ca 100644 --- a/samples/react-query/custom-client/src/api/transformer/add-version.js +++ b/samples/react-query/custom-client/src/api/transformer/add-version.js @@ -4,7 +4,7 @@ * @param {OpenAPIObject} schema * @return {OpenAPIObject} */ -module.exports = (inputSchema) => ({ +export default (inputSchema) => ({ ...inputSchema, paths: Object.entries(inputSchema.paths).reduce( (acc, [path, pathItem]) => ({ diff --git a/samples/react-query/custom-fetch/package.json b/samples/react-query/custom-fetch/package.json index 8955cbb7f..ed587793e 100644 --- a/samples/react-query/custom-fetch/package.json +++ b/samples/react-query/custom-fetch/package.json @@ -17,17 +17,17 @@ "react-dom": "^18.3.1" }, "devDependencies": { - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "@types/react": "^18.3.24", "@types/react-dom": "^18.3.7", - "@typescript-eslint/eslint-plugin": "^8.43.0", - "@typescript-eslint/parser": "^8.43.0", - "@vitejs/plugin-react": "^4.7.0", - "eslint": "^9.35.0", + "@typescript-eslint/eslint-plugin": "^8.46.2", + "@typescript-eslint/parser": "^8.46.2", + "@vitejs/plugin-react": "^5.0.4", + "eslint": "^9.38.0", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.20", "orval": "workspace:*", "typescript": "~5.8.3", - "vite": "^5.4.20" + "vite": "^7.1.11" } } diff --git a/samples/react-query/form-data-mutator/package.json b/samples/react-query/form-data-mutator/package.json index 2b516b5bc..46d7a30b9 100644 --- a/samples/react-query/form-data-mutator/package.json +++ b/samples/react-query/form-data-mutator/package.json @@ -7,7 +7,7 @@ "test": "tsc --noEmit endpoints.ts" }, "dependencies": { - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "axios": "^1.12.2", "react": "^18.3.1", "react-query": "^3.39.3" diff --git a/samples/react-query/form-data/package.json b/samples/react-query/form-data/package.json index c0594671c..40c57b044 100644 --- a/samples/react-query/form-data/package.json +++ b/samples/react-query/form-data/package.json @@ -7,7 +7,7 @@ "test": "tsc --noEmit endpoints.ts" }, "dependencies": { - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "axios": "^1.12.2", "react": "^18.3.1", "react-query": "^3.39.3" diff --git a/samples/react-query/form-url-encoded-mutator/package.json b/samples/react-query/form-url-encoded-mutator/package.json index e8106f0df..bbfde97f7 100644 --- a/samples/react-query/form-url-encoded-mutator/package.json +++ b/samples/react-query/form-url-encoded-mutator/package.json @@ -7,7 +7,7 @@ "test": "tsc --noEmit endpoints.ts" }, "dependencies": { - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "axios": "^1.12.2", "react": "^18.3.1", "react-query": "^3.39.3" diff --git a/samples/react-query/form-url-encoded/package.json b/samples/react-query/form-url-encoded/package.json index 3d67966e9..026b6d6cb 100644 --- a/samples/react-query/form-url-encoded/package.json +++ b/samples/react-query/form-url-encoded/package.json @@ -7,7 +7,7 @@ "test": "tsc --noEmit endpoints.ts" }, "dependencies": { - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "axios": "^1.12.2", "react": "^18.3.1", "react-query": "^3.39.3" diff --git a/samples/react-query/hook-mutator/package.json b/samples/react-query/hook-mutator/package.json index a3669a6f8..07c668f02 100644 --- a/samples/react-query/hook-mutator/package.json +++ b/samples/react-query/hook-mutator/package.json @@ -7,7 +7,7 @@ "test": "tsc --noEmit endpoints.ts" }, "dependencies": { - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "axios": "^1.12.2", "react": "^18.3.1", "react-query": "^3.39.3" diff --git a/samples/svelte-query/basic/orval.config.ts b/samples/svelte-query/basic/orval.config.ts index 671474866..7a47b6153 100644 --- a/samples/svelte-query/basic/orval.config.ts +++ b/samples/svelte-query/basic/orval.config.ts @@ -48,7 +48,7 @@ export default defineConfig({ input: { target: './petstore.yaml', override: { - transformer: 'src/api/transformer/add-version.cjs', + transformer: 'src/api/transformer/add-version.mjs', }, }, }, diff --git a/samples/svelte-query/basic/package.json b/samples/svelte-query/basic/package.json index 37fea8f9f..dd7c9abe8 100644 --- a/samples/svelte-query/basic/package.json +++ b/samples/svelte-query/basic/package.json @@ -18,20 +18,20 @@ "prepare": "see https://github.com/sveltejs/kit/issues/5390#issuecomment-1176480653" }, "devDependencies": { - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "@sveltejs/adapter-auto": "^2.1.1", "@sveltejs/kit": "^1.30.4", - "@typescript-eslint/eslint-plugin": "^8.43.0", - "@typescript-eslint/parser": "^8.43.0", - "eslint": "^9.35.0", + "@typescript-eslint/eslint-plugin": "^8.46.2", + "@typescript-eslint/parser": "^8.46.2", + "eslint": "^9.38.0", "eslint-plugin-svelte3": "^4.0.0", - "msw": "^2.11.2", + "msw": "^2.11.6", "orval": "workspace:*", "svelte": "^5.39.7", "svelte-check": "^3.8.6", "tslib": "^2.8.1", "typescript": "~5.8.3", - "vite": "^4.5.14" + "vite": "^7.1.11" }, "dependencies": { "@tanstack/svelte-query": "^4.41.0", diff --git a/samples/angular-app/src/orval/transformer/add-version.js b/samples/svelte-query/basic/src/api/transformer/add-version.mjs similarity index 95% rename from samples/angular-app/src/orval/transformer/add-version.js rename to samples/svelte-query/basic/src/api/transformer/add-version.mjs index d7c6c1692..60b02e0ca 100644 --- a/samples/angular-app/src/orval/transformer/add-version.js +++ b/samples/svelte-query/basic/src/api/transformer/add-version.mjs @@ -4,7 +4,7 @@ * @param {OpenAPIObject} schema * @return {OpenAPIObject} */ -module.exports = (inputSchema) => ({ +export default (inputSchema) => ({ ...inputSchema, paths: Object.entries(inputSchema.paths).reduce( (acc, [path, pathItem]) => ({ diff --git a/samples/svelte-query/basic/static/mockServiceWorker.js b/samples/svelte-query/basic/static/mockServiceWorker.js index ed8de433a..2f658e919 100644 --- a/samples/svelte-query/basic/static/mockServiceWorker.js +++ b/samples/svelte-query/basic/static/mockServiceWorker.js @@ -2,201 +2,245 @@ /* tslint:disable */ /** - * Mock Service Worker (2.0.2). + * Mock Service Worker. * @see https://github.com/mswjs/msw * - Please do NOT modify this file. - * - Please do NOT serve this file on production. */ -const INTEGRITY_CHECKSUM = '0877fcdc026242810f5bfde0d7178db4'; -const IS_MOCKED_RESPONSE = Symbol('isMockedResponse'); -const activeClientIds = new Set(); +const PACKAGE_VERSION = '2.11.6' +const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82' +const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') +const activeClientIds = new Set() -self.addEventListener('install', function () { - self.skipWaiting(); -}); +addEventListener('install', function () { + self.skipWaiting() +}) -self.addEventListener('activate', function (event) { - event.waitUntil(self.clients.claim()); -}); +addEventListener('activate', function (event) { + event.waitUntil(self.clients.claim()) +}) -self.addEventListener('message', async function (event) { - const clientId = event.source.id; +addEventListener('message', async function (event) { + const clientId = Reflect.get(event.source || {}, 'id') if (!clientId || !self.clients) { - return; + return } - const client = await self.clients.get(clientId); + const client = await self.clients.get(clientId) if (!client) { - return; + return } const allClients = await self.clients.matchAll({ type: 'window', - }); + }) switch (event.data) { case 'KEEPALIVE_REQUEST': { sendToClient(client, { type: 'KEEPALIVE_RESPONSE', - }); - break; + }) + break } case 'INTEGRITY_CHECK_REQUEST': { sendToClient(client, { type: 'INTEGRITY_CHECK_RESPONSE', - payload: INTEGRITY_CHECKSUM, - }); - break; + payload: { + packageVersion: PACKAGE_VERSION, + checksum: INTEGRITY_CHECKSUM, + }, + }) + break } case 'MOCK_ACTIVATE': { - activeClientIds.add(clientId); + activeClientIds.add(clientId) sendToClient(client, { type: 'MOCKING_ENABLED', - payload: true, - }); - break; - } - - case 'MOCK_DEACTIVATE': { - activeClientIds.delete(clientId); - break; + payload: { + client: { + id: client.id, + frameType: client.frameType, + }, + }, + }) + break } case 'CLIENT_CLOSED': { - activeClientIds.delete(clientId); + activeClientIds.delete(clientId) const remainingClients = allClients.filter((client) => { - return client.id !== clientId; - }); + return client.id !== clientId + }) // Unregister itself when there are no more clients if (remainingClients.length === 0) { - self.registration.unregister(); + self.registration.unregister() } - break; + break } } -}); +}) -self.addEventListener('fetch', function (event) { - const { request } = event; +addEventListener('fetch', function (event) { + const requestInterceptedAt = Date.now() // Bypass navigation requests. - if (request.mode === 'navigate') { - return; + if (event.request.mode === 'navigate') { + return } // Opening the DevTools triggers the "only-if-cached" request // that cannot be handled by the worker. Bypass such requests. - if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { - return; + if ( + event.request.cache === 'only-if-cached' && + event.request.mode !== 'same-origin' + ) { + return } // Bypass all requests when there are no active clients. // Prevents the self-unregistered worked from handling requests - // after it's been deleted (still remains active until the next reload). + // after it's been terminated (still remains active until the next reload). if (activeClientIds.size === 0) { - return; + return } - // Generate unique request ID. - const requestId = crypto.randomUUID(); - event.respondWith(handleRequest(event, requestId)); -}); + const requestId = crypto.randomUUID() + event.respondWith(handleRequest(event, requestId, requestInterceptedAt)) +}) -async function handleRequest(event, requestId) { - const client = await resolveMainClient(event); - const response = await getResponse(event, client, requestId); +/** + * @param {FetchEvent} event + * @param {string} requestId + * @param {number} requestInterceptedAt + */ +async function handleRequest(event, requestId, requestInterceptedAt) { + const client = await resolveMainClient(event) + const requestCloneForEvents = event.request.clone() + const response = await getResponse( + event, + client, + requestId, + requestInterceptedAt, + ) // Send back the response clone for the "response:*" life-cycle events. // Ensure MSW is active and ready to handle the message, otherwise // this message will pend indefinitely. if (client && activeClientIds.has(client.id)) { - (async function () { - const responseClone = response.clone(); - // When performing original requests, response body will - // always be a ReadableStream, even for 204 responses. - // But when creating a new Response instance on the client, - // the body for a 204 response must be null. - const responseBody = response.status === 204 ? null : responseClone.body; - - sendToClient( - client, - { - type: 'RESPONSE', - payload: { - requestId, - isMockedResponse: IS_MOCKED_RESPONSE in response, + const serializedRequest = await serializeRequest(requestCloneForEvents) + + // Clone the response so both the client and the library could consume it. + const responseClone = response.clone() + + sendToClient( + client, + { + type: 'RESPONSE', + payload: { + isMockedResponse: IS_MOCKED_RESPONSE in response, + request: { + id: requestId, + ...serializedRequest, + }, + response: { type: responseClone.type, status: responseClone.status, statusText: responseClone.statusText, - body: responseBody, headers: Object.fromEntries(responseClone.headers.entries()), + body: responseClone.body, }, }, - [responseBody], - ); - })(); + }, + responseClone.body ? [serializedRequest.body, responseClone.body] : [], + ) } - return response; + return response } -// Resolve the main client for the given event. -// Client that issues a request doesn't necessarily equal the client -// that registered the worker. It's with the latter the worker should -// communicate with during the response resolving phase. +/** + * Resolve the main client for the given event. + * Client that issues a request doesn't necessarily equal the client + * that registered the worker. It's with the latter the worker should + * communicate with during the response resolving phase. + * @param {FetchEvent} event + * @returns {Promise} + */ async function resolveMainClient(event) { - const client = await self.clients.get(event.clientId); + const client = await self.clients.get(event.clientId) + + if (activeClientIds.has(event.clientId)) { + return client + } if (client?.frameType === 'top-level') { - return client; + return client } const allClients = await self.clients.matchAll({ type: 'window', - }); + }) return allClients .filter((client) => { // Get only those clients that are currently visible. - return client.visibilityState === 'visible'; + return client.visibilityState === 'visible' }) .find((client) => { // Find the client ID that's recorded in the // set of clients that have registered the worker. - return activeClientIds.has(client.id); - }); + return activeClientIds.has(client.id) + }) } -async function getResponse(event, client, requestId) { - const { request } = event; - +/** + * @param {FetchEvent} event + * @param {Client | undefined} client + * @param {string} requestId + * @param {number} requestInterceptedAt + * @returns {Promise} + */ +async function getResponse(event, client, requestId, requestInterceptedAt) { // Clone the request because it might've been already used // (i.e. its body has been read and sent to the client). - const requestClone = request.clone(); + const requestClone = event.request.clone() function passthrough() { - const headers = Object.fromEntries(requestClone.headers.entries()); - - // Remove internal MSW request header so the passthrough request - // complies with any potential CORS preflight checks on the server. - // Some servers forbid unknown request headers. - delete headers['x-msw-intention']; + // Cast the request headers to a new Headers instance + // so the headers can be manipulated with. + const headers = new Headers(requestClone.headers) + + // Remove the "accept" header value that marked this request as passthrough. + // This prevents request alteration and also keeps it compliant with the + // user-defined CORS policies. + const acceptHeader = headers.get('accept') + if (acceptHeader) { + const values = acceptHeader.split(',').map((value) => value.trim()) + const filteredValues = values.filter( + (value) => value !== 'msw/passthrough', + ) + + if (filteredValues.length > 0) { + headers.set('accept', filteredValues.join(', ')) + } else { + headers.delete('accept') + } + } - return fetch(requestClone, { headers }); + return fetch(requestClone, { headers }) } // Bypass mocking when the client is not active. if (!client) { - return passthrough(); + return passthrough() } // Bypass initial page load requests (i.e. static assets). @@ -204,89 +248,102 @@ async function getResponse(event, client, requestId) { // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet // and is not ready to handle requests. if (!activeClientIds.has(client.id)) { - return passthrough(); - } - - // Bypass requests with the explicit bypass header. - // Such requests can be issued by "ctx.fetch()". - const mswIntention = request.headers.get('x-msw-intention'); - if (['bypass', 'passthrough'].includes(mswIntention)) { - return passthrough(); + return passthrough() } // Notify the client that a request has been intercepted. - const requestBuffer = await request.arrayBuffer(); + const serializedRequest = await serializeRequest(event.request) const clientMessage = await sendToClient( client, { type: 'REQUEST', payload: { id: requestId, - url: request.url, - mode: request.mode, - method: request.method, - headers: Object.fromEntries(request.headers.entries()), - cache: request.cache, - credentials: request.credentials, - destination: request.destination, - integrity: request.integrity, - redirect: request.redirect, - referrer: request.referrer, - referrerPolicy: request.referrerPolicy, - body: requestBuffer, - keepalive: request.keepalive, + interceptedAt: requestInterceptedAt, + ...serializedRequest, }, }, - [requestBuffer], - ); + [serializedRequest.body], + ) switch (clientMessage.type) { case 'MOCK_RESPONSE': { - return respondWithMock(clientMessage.data); + return respondWithMock(clientMessage.data) } - case 'MOCK_NOT_FOUND': { - return passthrough(); + case 'PASSTHROUGH': { + return passthrough() } } - return passthrough(); + return passthrough() } +/** + * @param {Client} client + * @param {any} message + * @param {Array} transferrables + * @returns {Promise} + */ function sendToClient(client, message, transferrables = []) { return new Promise((resolve, reject) => { - const channel = new MessageChannel(); + const channel = new MessageChannel() channel.port1.onmessage = (event) => { if (event.data && event.data.error) { - return reject(event.data.error); + return reject(event.data.error) } - resolve(event.data); - }; + resolve(event.data) + } - client.postMessage( - message, - [channel.port2].concat(transferrables.filter(Boolean)), - ); - }); + client.postMessage(message, [ + channel.port2, + ...transferrables.filter(Boolean), + ]) + }) } -async function respondWithMock(response) { +/** + * @param {Response} response + * @returns {Response} + */ +function respondWithMock(response) { // Setting response status code to 0 is a no-op. // However, when responding with a "Response.error()", the produced Response // instance will have status code set to 0. Since it's not possible to create // a Response instance with status code 0, handle that use-case separately. if (response.status === 0) { - return Response.error(); + return Response.error() } - const mockedResponse = new Response(response.body, response); + const mockedResponse = new Response(response.body, response) Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, { value: true, enumerable: true, - }); + }) + + return mockedResponse +} - return mockedResponse; +/** + * @param {Request} request + */ +async function serializeRequest(request) { + return { + url: request.url, + mode: request.mode, + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + cache: request.cache, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body: await request.arrayBuffer(), + keepalive: request.keepalive, + } } diff --git a/samples/svelte-query/custom-fetch/package.json b/samples/svelte-query/custom-fetch/package.json index de0c91266..9c412b992 100644 --- a/samples/svelte-query/custom-fetch/package.json +++ b/samples/svelte-query/custom-fetch/package.json @@ -12,7 +12,7 @@ "test": "yarn run check" }, "devDependencies": { - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "@sveltejs/vite-plugin-svelte": "^3.1.2", "@tsconfig/svelte": "^5.0.5", "orval": "workspace:*", @@ -20,7 +20,7 @@ "svelte-check": "^3.8.6", "tslib": "^2.8.1", "typescript": "~5.8.3", - "vite": "^5.4.20" + "vite": "^7.1.11" }, "dependencies": { "@sveltestack/svelte-query": "^1.6.0", diff --git a/samples/swr-with-zod/package.json b/samples/swr-with-zod/package.json index 8a6b6a0ea..133fda97a 100644 --- a/samples/swr-with-zod/package.json +++ b/samples/swr-with-zod/package.json @@ -17,17 +17,17 @@ "zod": "^3.25.76" }, "devDependencies": { - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "@types/react": "^18.3.24", "@types/react-dom": "^18.3.7", - "@typescript-eslint/eslint-plugin": "^8.43.0", - "@typescript-eslint/parser": "^8.43.0", - "@vitejs/plugin-react": "^4.7.0", - "eslint": "^9.35.0", + "@typescript-eslint/eslint-plugin": "^8.46.2", + "@typescript-eslint/parser": "^8.46.2", + "@vitejs/plugin-react": "^5.0.4", + "eslint": "^9.38.0", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.20", "orval": "workspace:*", "typescript": "~5.8.3", - "vite": "^5.4.20" + "vite": "^7.1.11" } } diff --git a/samples/vue-query/custom-fetch/.vscode/extensions.json b/samples/vue-query/custom-fetch/.vscode/extensions.json deleted file mode 100644 index a7cea0b06..000000000 --- a/samples/vue-query/custom-fetch/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": ["Vue.volar"] -} diff --git a/samples/vue-query/custom-fetch/package.json b/samples/vue-query/custom-fetch/package.json index 7d7098101..78c25c817 100644 --- a/samples/vue-query/custom-fetch/package.json +++ b/samples/vue-query/custom-fetch/package.json @@ -4,22 +4,22 @@ "version": "7.15.0", "type": "module", "scripts": { - "dev": "vite --host", - "build": "vue-tsc -b && vite build", - "preview": "vite preview", + "dev": "vite", + "build": "vite build", + "serve": "vite preview", "generate-api": "orval", "test": "tsc --noEmit" }, "dependencies": { - "@tanstack/vue-query": "^5.87.4", - "vue": "^3.5.21" + "@tanstack/vue-query": "^5.90.5", + "vue": "^3.5.22" }, "devDependencies": { - "@faker-js/faker": "^9.9.0", - "@vitejs/plugin-vue": "^5.2.4", + "@faker-js/faker": "^10.1.0", + "@vitejs/plugin-vue": "^6.0.1", "orval": "workspace:*", - "typescript": "~5.8.3", - "vite": "^5.4.20", - "vue-tsc": "^2.2.12" + "typescript": "~5.9.3", + "vite": "^7.1.11", + "vue-tsc": "^3.1.1" } } diff --git a/samples/vue-query/vue-query-basic/package.json b/samples/vue-query/vue-query-basic/package.json index 6563d2330..8cd765ef4 100644 --- a/samples/vue-query/vue-query-basic/package.json +++ b/samples/vue-query/vue-query-basic/package.json @@ -1,34 +1,33 @@ { "name": "vue-query-basic", "version": "7.15.0", + "type": "module", "private": true, "scripts": { "dev": "vite", "build": "vite build", "serve": "vite preview", "generate-api": "orval", - "generate-types": "vue-tsc --declaration --emitDeclarationOnly --module amd --outFile dist/index.d.ts", - "test-types": "yarn generate-types && tsd --typings dist --files src/**/*.test-d.ts", - "test": "vue-tsc --noEmit && vitest --run && yarn test-types" + "test": "vitest --run" }, "dependencies": { - "@faker-js/faker": "^9.9.0", - "@tanstack/vue-query": "^5.87.4", + "@faker-js/faker": "^10.1.0", + "@tanstack/vue-query": "^5.90.5", "axios": "^1.12.2", - "vue": "^3.5.21" + "vue": "^3.5.22" }, "devDependencies": { "@testing-library/vue": "^8.1.0", - "@vitejs/plugin-vue": "^5.2.4", - "@vue/compiler-sfc": "^3.5.21", - "jsdom": "^27.0.0", - "msw": "^2.11.2", + "@vitejs/plugin-vue": "^6.0.1", + "@vue/compiler-sfc": "^3.5.22", + "jsdom": "^27.0.1", + "msw": "^2.11.6", "orval": "workspace:*", "tsd": "^0.33.0", - "typescript": "~5.8.3", - "vite": "^5.4.20", + "typescript": "~5.9.3", + "vite": "^7.1.11", "vitest": "^3.2.4", - "vue-tsc": "^2.2.12" + "vue-tsc": "^3.1.1" }, "dependenciesMeta": { "msw": { diff --git a/samples/vue-query/vue-query-basic/public/mockServiceWorker.js b/samples/vue-query/vue-query-basic/public/mockServiceWorker.js index 24fe3a25f..2f658e919 100644 --- a/samples/vue-query/vue-query-basic/public/mockServiceWorker.js +++ b/samples/vue-query/vue-query-basic/public/mockServiceWorker.js @@ -5,24 +5,23 @@ * Mock Service Worker. * @see https://github.com/mswjs/msw * - Please do NOT modify this file. - * - Please do NOT serve this file on production. */ -const PACKAGE_VERSION = '2.3.1' -const INTEGRITY_CHECKSUM = '26357c79639bfa20d64c0efca2a87423' +const PACKAGE_VERSION = '2.11.6' +const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82' const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') const activeClientIds = new Set() -self.addEventListener('install', function () { +addEventListener('install', function () { self.skipWaiting() }) -self.addEventListener('activate', function (event) { +addEventListener('activate', function (event) { event.waitUntil(self.clients.claim()) }) -self.addEventListener('message', async function (event) { - const clientId = event.source.id +addEventListener('message', async function (event) { + const clientId = Reflect.get(event.source || {}, 'id') if (!clientId || !self.clients) { return @@ -62,16 +61,16 @@ self.addEventListener('message', async function (event) { sendToClient(client, { type: 'MOCKING_ENABLED', - payload: true, + payload: { + client: { + id: client.id, + frameType: client.frameType, + }, + }, }) break } - case 'MOCK_DEACTIVATE': { - activeClientIds.delete(clientId) - break - } - case 'CLIENT_CLOSED': { activeClientIds.delete(clientId) @@ -89,72 +88,99 @@ self.addEventListener('message', async function (event) { } }) -self.addEventListener('fetch', function (event) { - const { request } = event +addEventListener('fetch', function (event) { + const requestInterceptedAt = Date.now() // Bypass navigation requests. - if (request.mode === 'navigate') { + if (event.request.mode === 'navigate') { return } // Opening the DevTools triggers the "only-if-cached" request // that cannot be handled by the worker. Bypass such requests. - if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { + if ( + event.request.cache === 'only-if-cached' && + event.request.mode !== 'same-origin' + ) { return } // Bypass all requests when there are no active clients. // Prevents the self-unregistered worked from handling requests - // after it's been deleted (still remains active until the next reload). + // after it's been terminated (still remains active until the next reload). if (activeClientIds.size === 0) { return } - // Generate unique request ID. const requestId = crypto.randomUUID() - event.respondWith(handleRequest(event, requestId)) + event.respondWith(handleRequest(event, requestId, requestInterceptedAt)) }) -async function handleRequest(event, requestId) { +/** + * @param {FetchEvent} event + * @param {string} requestId + * @param {number} requestInterceptedAt + */ +async function handleRequest(event, requestId, requestInterceptedAt) { const client = await resolveMainClient(event) - const response = await getResponse(event, client, requestId) + const requestCloneForEvents = event.request.clone() + const response = await getResponse( + event, + client, + requestId, + requestInterceptedAt, + ) // Send back the response clone for the "response:*" life-cycle events. // Ensure MSW is active and ready to handle the message, otherwise // this message will pend indefinitely. if (client && activeClientIds.has(client.id)) { - ;(async function () { - const responseClone = response.clone() - - sendToClient( - client, - { - type: 'RESPONSE', - payload: { - requestId, - isMockedResponse: IS_MOCKED_RESPONSE in response, + const serializedRequest = await serializeRequest(requestCloneForEvents) + + // Clone the response so both the client and the library could consume it. + const responseClone = response.clone() + + sendToClient( + client, + { + type: 'RESPONSE', + payload: { + isMockedResponse: IS_MOCKED_RESPONSE in response, + request: { + id: requestId, + ...serializedRequest, + }, + response: { type: responseClone.type, status: responseClone.status, statusText: responseClone.statusText, - body: responseClone.body, headers: Object.fromEntries(responseClone.headers.entries()), + body: responseClone.body, }, }, - [responseClone.body], - ) - })() + }, + responseClone.body ? [serializedRequest.body, responseClone.body] : [], + ) } return response } -// Resolve the main client for the given event. -// Client that issues a request doesn't necessarily equal the client -// that registered the worker. It's with the latter the worker should -// communicate with during the response resolving phase. +/** + * Resolve the main client for the given event. + * Client that issues a request doesn't necessarily equal the client + * that registered the worker. It's with the latter the worker should + * communicate with during the response resolving phase. + * @param {FetchEvent} event + * @returns {Promise} + */ async function resolveMainClient(event) { const client = await self.clients.get(event.clientId) + if (activeClientIds.has(event.clientId)) { + return client + } + if (client?.frameType === 'top-level') { return client } @@ -175,20 +201,39 @@ async function resolveMainClient(event) { }) } -async function getResponse(event, client, requestId) { - const { request } = event - +/** + * @param {FetchEvent} event + * @param {Client | undefined} client + * @param {string} requestId + * @param {number} requestInterceptedAt + * @returns {Promise} + */ +async function getResponse(event, client, requestId, requestInterceptedAt) { // Clone the request because it might've been already used // (i.e. its body has been read and sent to the client). - const requestClone = request.clone() + const requestClone = event.request.clone() function passthrough() { - const headers = Object.fromEntries(requestClone.headers.entries()) + // Cast the request headers to a new Headers instance + // so the headers can be manipulated with. + const headers = new Headers(requestClone.headers) + + // Remove the "accept" header value that marked this request as passthrough. + // This prevents request alteration and also keeps it compliant with the + // user-defined CORS policies. + const acceptHeader = headers.get('accept') + if (acceptHeader) { + const values = acceptHeader.split(',').map((value) => value.trim()) + const filteredValues = values.filter( + (value) => value !== 'msw/passthrough', + ) - // Remove internal MSW request header so the passthrough request - // complies with any potential CORS preflight checks on the server. - // Some servers forbid unknown request headers. - delete headers['x-msw-intention'] + if (filteredValues.length > 0) { + headers.set('accept', filteredValues.join(', ')) + } else { + headers.delete('accept') + } + } return fetch(requestClone, { headers }) } @@ -207,29 +252,18 @@ async function getResponse(event, client, requestId) { } // Notify the client that a request has been intercepted. - const requestBuffer = await request.arrayBuffer() + const serializedRequest = await serializeRequest(event.request) const clientMessage = await sendToClient( client, { type: 'REQUEST', payload: { id: requestId, - url: request.url, - mode: request.mode, - method: request.method, - headers: Object.fromEntries(request.headers.entries()), - cache: request.cache, - credentials: request.credentials, - destination: request.destination, - integrity: request.integrity, - redirect: request.redirect, - referrer: request.referrer, - referrerPolicy: request.referrerPolicy, - body: requestBuffer, - keepalive: request.keepalive, + interceptedAt: requestInterceptedAt, + ...serializedRequest, }, }, - [requestBuffer], + [serializedRequest.body], ) switch (clientMessage.type) { @@ -245,6 +279,12 @@ async function getResponse(event, client, requestId) { return passthrough() } +/** + * @param {Client} client + * @param {any} message + * @param {Array} transferrables + * @returns {Promise} + */ function sendToClient(client, message, transferrables = []) { return new Promise((resolve, reject) => { const channel = new MessageChannel() @@ -257,14 +297,18 @@ function sendToClient(client, message, transferrables = []) { resolve(event.data) } - client.postMessage( - message, - [channel.port2].concat(transferrables.filter(Boolean)), - ) + client.postMessage(message, [ + channel.port2, + ...transferrables.filter(Boolean), + ]) }) } -async function respondWithMock(response) { +/** + * @param {Response} response + * @returns {Response} + */ +function respondWithMock(response) { // Setting response status code to 0 is a no-op. // However, when responding with a "Response.error()", the produced Response // instance will have status code set to 0. Since it's not possible to create @@ -282,3 +326,24 @@ async function respondWithMock(response) { return mockedResponse } + +/** + * @param {Request} request + */ +async function serializeRequest(request) { + return { + url: request.url, + mode: request.mode, + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + cache: request.cache, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body: await request.arrayBuffer(), + keepalive: request.keepalive, + } +} diff --git a/samples/vue-query/vue-query-basic/src/api/transformer/add-version.js b/samples/vue-query/vue-query-basic/src/api/transformer/add-version.js index 148573201..e3d6008e2 100644 --- a/samples/vue-query/vue-query-basic/src/api/transformer/add-version.js +++ b/samples/vue-query/vue-query-basic/src/api/transformer/add-version.js @@ -4,7 +4,7 @@ * @param {OpenAPIObject} schema * @return {OpenAPIObject} */ -module.exports = (inputSchema) => { +export default (inputSchema) => { const transformedPaths = {}; Object.entries(inputSchema.paths).forEach(([path, pathItem]) => { diff --git a/tests/package.json b/tests/package.json index 599dd34dd..7a8b8fa78 100644 --- a/tests/package.json +++ b/tests/package.json @@ -5,6 +5,7 @@ "author": "Victor Bury", "license": "ISC", "private": true, + "type": "module", "scripts": { "generate": "run-p 'generate:*'", "generate:cli": "orval --input ./specifications/petstore.yaml --output ./generated/cli/petstore/endpoints.ts", @@ -28,16 +29,16 @@ "devDependencies": { "@angular/common": "^20.3.0", "@angular/core": "^20.3.0", - "@faker-js/faker": "^9.9.0", + "@faker-js/faker": "^10.1.0", "@hono/zod-validator": "^0.7.4", - "@modelcontextprotocol/sdk": "1.18.0", + "@modelcontextprotocol/sdk": "1.20.1", "@tanstack/react-query": "~5.62.16", "@tanstack/svelte-query": "^4.41.0", - "@tanstack/vue-query": "^4.41.0", + "@tanstack/vue-query": "^5.90.5", "@types/react": "18.3.24", "axios": "^1.12.2", "hono": "^4.10.2", - "msw": "^2.11.2", + "msw": "^2.11.6", "npm-run-all": "^4.1.5", "openapi3-ts": "^4.5.0", "orval": "workspace:*", @@ -47,7 +48,7 @@ "svelte": "^5.39.7", "swr": "^2.3.6", "typescript": "5.8.3", - "vue": "^3.5.21", + "vue": "^3.5.22", "zod": "^3.25.76" } } diff --git a/tsconfig.base.json b/tsconfig.base.json index a4f02eb1e..8c3a6bb2e 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,5 +1,5 @@ { - "exclude": ["node_modules", "dist", "__tests__", "**/*.test*", "**/*.spec*"], + "exclude": ["node_modules", "dist"], "$schema": "https://json.schemastore.org/tsconfig", "compilerOptions": { "target": "esnext", diff --git a/yarn.lock b/yarn.lock index 4f3aaabe7..b512ce13a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -500,16 +500,16 @@ __metadata: languageName: node linkType: hard -"@asamuzakjp/dom-selector@npm:^6.5.4": - version: 6.5.7 - resolution: "@asamuzakjp/dom-selector@npm:6.5.7" +"@asamuzakjp/dom-selector@npm:^6.7.2": + version: 6.7.2 + resolution: "@asamuzakjp/dom-selector@npm:6.7.2" dependencies: "@asamuzakjp/nwsapi": "npm:^2.3.9" bidi-js: "npm:^1.0.3" css-tree: "npm:^3.1.0" is-potential-custom-element-name: "npm:^1.0.1" lru-cache: "npm:^11.2.2" - checksum: 10c0/5089136221fcb3d6570a4ca7df1665e69076be26a1a17b7f400476fb01393b2e264761599fc15a4a361f6ef123fa815e3c8aa4602b0dd780d6c332e3d21e78b1 + checksum: 10c0/b0cb6a5540dc70c9ace3fa91bdd84cf12be7817451d8522d8aaa19f806edc52f500647055ac2b806a93213b9756cd8cae9958fac8dcffbaecaef5dadabf1674f languageName: node linkType: hard @@ -570,7 +570,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.11.1, @babel/core@npm:^7.12.3, @babel/core@npm:^7.16.0, @babel/core@npm:^7.23.9, @babel/core@npm:^7.28.0, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": +"@babel/core@npm:^7.1.0, @babel/core@npm:^7.11.1, @babel/core@npm:^7.12.3, @babel/core@npm:^7.16.0, @babel/core@npm:^7.23.9, @babel/core@npm:^7.28.4, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": version: 7.28.4 resolution: "@babel/core@npm:7.28.4" dependencies: @@ -830,7 +830,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.0, @babel/parser@npm:^7.28.3, @babel/parser@npm:^7.28.4": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.3, @babel/parser@npm:^7.28.4": version: 7.28.4 resolution: "@babel/parser@npm:7.28.4" dependencies: @@ -2129,24 +2129,6 @@ __metadata: languageName: node linkType: hard -"@bundled-es-modules/cookie@npm:^2.0.1": - version: 2.0.1 - resolution: "@bundled-es-modules/cookie@npm:2.0.1" - dependencies: - cookie: "npm:^0.7.2" - checksum: 10c0/dfac5e36127e827c5557b8577f17a8aa94c057baff6d38555917927b99da0ecf0b1357e7fedadc8853ecdbd4a8a7fa1f5e64111b2a656612f4a36376f5bdbe8d - languageName: node - linkType: hard - -"@bundled-es-modules/statuses@npm:^1.0.1": - version: 1.0.1 - resolution: "@bundled-es-modules/statuses@npm:1.0.1" - dependencies: - statuses: "npm:^2.0.1" - checksum: 10c0/c1a8ede3efa8da61ccda4b98e773582a9733edfbeeee569d4630785f8e018766202edb190a754a3ec7a7f6bd738e857829affc2fdb676b6dab4db1bb44e62785 - languageName: node - linkType: hard - "@cloudflare/kv-asset-handler@npm:0.3.4": version: 0.3.4 resolution: "@cloudflare/kv-asset-handler@npm:0.3.4" @@ -2697,13 +2679,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/aix-ppc64@npm:0.21.5" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/aix-ppc64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/aix-ppc64@npm:0.25.11" @@ -2725,20 +2700,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/android-arm64@npm:0.18.20" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-arm64@npm:0.21.5" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/android-arm64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/android-arm64@npm:0.25.11" @@ -2760,20 +2721,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/android-arm@npm:0.18.20" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-arm@npm:0.21.5" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@esbuild/android-arm@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/android-arm@npm:0.25.11" @@ -2795,20 +2742,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/android-x64@npm:0.18.20" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-x64@npm:0.21.5" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - "@esbuild/android-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/android-x64@npm:0.25.11" @@ -2830,20 +2763,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/darwin-arm64@npm:0.18.20" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/darwin-arm64@npm:0.21.5" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/darwin-arm64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/darwin-arm64@npm:0.25.11" @@ -2865,20 +2784,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/darwin-x64@npm:0.18.20" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/darwin-x64@npm:0.21.5" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@esbuild/darwin-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/darwin-x64@npm:0.25.11" @@ -2900,20 +2805,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/freebsd-arm64@npm:0.18.20" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/freebsd-arm64@npm:0.21.5" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/freebsd-arm64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/freebsd-arm64@npm:0.25.11" @@ -2935,20 +2826,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/freebsd-x64@npm:0.18.20" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/freebsd-x64@npm:0.21.5" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/freebsd-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/freebsd-x64@npm:0.25.11" @@ -2970,20 +2847,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-arm64@npm:0.18.20" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-arm64@npm:0.21.5" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/linux-arm64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-arm64@npm:0.25.11" @@ -3005,20 +2868,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-arm@npm:0.18.20" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-arm@npm:0.21.5" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "@esbuild/linux-arm@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-arm@npm:0.25.11" @@ -3040,20 +2889,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-ia32@npm:0.18.20" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-ia32@npm:0.21.5" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/linux-ia32@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-ia32@npm:0.25.11" @@ -3075,20 +2910,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-loong64@npm:0.18.20" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-loong64@npm:0.21.5" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - "@esbuild/linux-loong64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-loong64@npm:0.25.11" @@ -3110,20 +2931,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-mips64el@npm:0.18.20" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-mips64el@npm:0.21.5" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - "@esbuild/linux-mips64el@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-mips64el@npm:0.25.11" @@ -3145,20 +2952,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-ppc64@npm:0.18.20" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-ppc64@npm:0.21.5" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/linux-ppc64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-ppc64@npm:0.25.11" @@ -3180,20 +2973,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-riscv64@npm:0.18.20" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-riscv64@npm:0.21.5" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - "@esbuild/linux-riscv64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-riscv64@npm:0.25.11" @@ -3215,20 +2994,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-s390x@npm:0.18.20" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-s390x@npm:0.21.5" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - "@esbuild/linux-s390x@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-s390x@npm:0.25.11" @@ -3250,20 +3015,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/linux-x64@npm:0.18.20" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-x64@npm:0.21.5" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - "@esbuild/linux-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-x64@npm:0.25.11" @@ -3299,20 +3050,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/netbsd-x64@npm:0.18.20" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/netbsd-x64@npm:0.21.5" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/netbsd-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/netbsd-x64@npm:0.25.11" @@ -3348,20 +3085,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/openbsd-x64@npm:0.18.20" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/openbsd-x64@npm:0.21.5" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/openbsd-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/openbsd-x64@npm:0.25.11" @@ -3397,20 +3120,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/sunos-x64@npm:0.18.20" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/sunos-x64@npm:0.21.5" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - "@esbuild/sunos-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/sunos-x64@npm:0.25.11" @@ -3432,20 +3141,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/win32-arm64@npm:0.18.20" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-arm64@npm:0.21.5" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/win32-arm64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/win32-arm64@npm:0.25.11" @@ -3467,20 +3162,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/win32-ia32@npm:0.18.20" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-ia32@npm:0.21.5" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/win32-ia32@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/win32-ia32@npm:0.25.11" @@ -3502,20 +3183,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.18.20": - version: 0.18.20 - resolution: "@esbuild/win32-x64@npm:0.18.20" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-x64@npm:0.21.5" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@esbuild/win32-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/win32-x64@npm:0.25.11" @@ -3548,17 +3215,6 @@ __metadata: languageName: node linkType: hard -"@eslint/config-array@npm:^0.21.0": - version: 0.21.0 - resolution: "@eslint/config-array@npm:0.21.0" - dependencies: - "@eslint/object-schema": "npm:^2.1.6" - debug: "npm:^4.3.1" - minimatch: "npm:^3.1.2" - checksum: 10c0/0ea801139166c4aa56465b309af512ef9b2d3c68f9198751bbc3e21894fe70f25fbf26e1b0e9fffff41857bc21bfddeee58649ae6d79aadcd747db0c5dca771f - languageName: node - linkType: hard - "@eslint/config-array@npm:^0.21.1": version: 0.21.1 resolution: "@eslint/config-array@npm:0.21.1" @@ -3570,13 +3226,6 @@ __metadata: languageName: node linkType: hard -"@eslint/config-helpers@npm:^0.3.1": - version: 0.3.1 - resolution: "@eslint/config-helpers@npm:0.3.1" - checksum: 10c0/f6c5b3a0b76a0d7d84cc93e310c259e6c3e0792ddd0a62c5fc0027796ffae44183432cb74b2c2b1162801ee1b1b34a6beb5d90a151632b4df7349f994146a856 - languageName: node - linkType: hard - "@eslint/config-helpers@npm:^0.4.1": version: 0.4.1 resolution: "@eslint/config-helpers@npm:0.4.1" @@ -3645,13 +3294,6 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.35.0": - version: 9.35.0 - resolution: "@eslint/js@npm:9.35.0" - checksum: 10c0/d40fe38724bc76c085c0b753cdf937fa35c0d6807ae76b2632e3f5f66c3040c91adcf1aff2ce70b4f45752e60629fadc415eeec9af3be3c274bae1cac54b9840 - languageName: node - linkType: hard - "@eslint/js@npm:9.38.0, @eslint/js@npm:^9.38.0": version: 9.38.0 resolution: "@eslint/js@npm:9.38.0" @@ -3659,13 +3301,6 @@ __metadata: languageName: node linkType: hard -"@eslint/object-schema@npm:^2.1.6": - version: 2.1.6 - resolution: "@eslint/object-schema@npm:2.1.6" - checksum: 10c0/b8cdb7edea5bc5f6a96173f8d768d3554a628327af536da2fc6967a93b040f2557114d98dbcdbf389d5a7b290985ad6a9ce5babc547f36fc1fde42e674d11a56 - languageName: node - linkType: hard - "@eslint/object-schema@npm:^2.1.7": version: 2.1.7 resolution: "@eslint/object-schema@npm:2.1.7" @@ -3673,7 +3308,7 @@ __metadata: languageName: node linkType: hard -"@eslint/plugin-kit@npm:^0.3.3, @eslint/plugin-kit@npm:^0.3.5": +"@eslint/plugin-kit@npm:^0.3.3": version: 0.3.5 resolution: "@eslint/plugin-kit@npm:0.3.5" dependencies: @@ -3700,10 +3335,10 @@ __metadata: languageName: node linkType: hard -"@faker-js/faker@npm:^9.9.0": - version: 9.9.0 - resolution: "@faker-js/faker@npm:9.9.0" - checksum: 10c0/02107cb6915217b4831fa4b261603165972eb7f09d2ab2e1d4b75807df2d425a2bac8621cddbfdcc158c2c447c2bce2e14939d51c4a63fbd832df55452e7f73c +"@faker-js/faker@npm:^10.1.0": + version: 10.1.0 + resolution: "@faker-js/faker@npm:10.1.0" + checksum: 10c0/3dc277245ec1bef8b839a9dc45b4ccb1688d21b8bde6531a849c1773193de30047e40e085b7e900c42c940911ecf1645b582ad3c85093df5bfdbddeb44a2b554 languageName: node linkType: hard @@ -4970,9 +4605,9 @@ __metadata: languageName: node linkType: hard -"@modelcontextprotocol/sdk@npm:1.18.0": - version: 1.18.0 - resolution: "@modelcontextprotocol/sdk@npm:1.18.0" +"@modelcontextprotocol/sdk@npm:1.20.1": + version: 1.20.1 + resolution: "@modelcontextprotocol/sdk@npm:1.20.1" dependencies: ajv: "npm:^6.12.6" content-type: "npm:^1.0.5" @@ -4986,7 +4621,7 @@ __metadata: raw-body: "npm:^3.0.0" zod: "npm:^3.23.8" zod-to-json-schema: "npm:^3.24.1" - checksum: 10c0/73ee91a2f72bdbb9cb9ed1a20f0c35d8ba7439d34b0fb5143814834504b6b244462a5789f30ebe72568c07b4a2cf0ac5a3c15009832f5d0e9a644178f3b8f2ca + checksum: 10c0/23e1ec9bc0f34dabb172d16175b4083d9890ed573252b9072c8bd5d22a8620afb3b4535e73f1c8ba84e3de15942b8aeecdfac76443256cf7a9aee3b51d2b6a66 languageName: node linkType: hard @@ -5032,9 +4667,9 @@ __metadata: languageName: node linkType: hard -"@mswjs/interceptors@npm:^0.39.1": - version: 0.39.6 - resolution: "@mswjs/interceptors@npm:0.39.6" +"@mswjs/interceptors@npm:^0.40.0": + version: 0.40.0 + resolution: "@mswjs/interceptors@npm:0.40.0" dependencies: "@open-draft/deferred-promise": "npm:^2.2.0" "@open-draft/logger": "npm:^0.3.0" @@ -5042,7 +4677,7 @@ __metadata: is-node-process: "npm:^1.2.0" outvariant: "npm:^1.4.3" strict-event-emitter: "npm:^0.5.1" - checksum: 10c0/66f593d4e19da0ada76c6fd89c2bd078f10880f7ec83ba22db3ee3a1aca3998c281011d7e5f1dd5a4bf3ca2eae92e45ce646ec9b85863e9d64b2f8c9d5da6500 + checksum: 10c0/4500f17b65910b2633182fdb15a81ccb6ccd4488a8c45bc2f7acdaaff4621c3cce5362e6b59ddc4fa28d315d0efb0608fd1f0d536bc5345141f8ac03fd7fab22 languageName: node linkType: hard @@ -5236,7 +4871,7 @@ __metadata: languageName: node linkType: hard -"@napi-rs/wasm-runtime@npm:^1.0.3, @napi-rs/wasm-runtime@npm:^1.0.5": +"@napi-rs/wasm-runtime@npm:^1.0.3": version: 1.0.5 resolution: "@napi-rs/wasm-runtime@npm:1.0.5" dependencies: @@ -5247,6 +4882,17 @@ __metadata: languageName: node linkType: hard +"@napi-rs/wasm-runtime@npm:^1.0.7": + version: 1.0.7 + resolution: "@napi-rs/wasm-runtime@npm:1.0.7" + dependencies: + "@emnapi/core": "npm:^1.5.0" + "@emnapi/runtime": "npm:^1.5.0" + "@tybys/wasm-util": "npm:^0.10.1" + checksum: 10c0/2d8635498136abb49d6dbf7395b78c63422292240963bf055f307b77aeafbde57ae2c0ceaaef215601531b36d6eb92a2cdd6f5ba90ed2aa8127c27aff9c4ae55 + languageName: node + linkType: hard + "@next/env@npm:14.2.32": version: 14.2.32 resolution: "@next/env@npm:14.2.32" @@ -5558,7 +5204,7 @@ __metadata: languageName: node linkType: hard -"@open-draft/until@npm:^2.0.0, @open-draft/until@npm:^2.1.0": +"@open-draft/until@npm:^2.0.0": version: 2.1.0 resolution: "@open-draft/until@npm:2.1.0" checksum: 10c0/61d3f99718dd86bb393fee2d7a785f961dcaf12f2055f0c693b27f4d0cd5f7a03d498a6d9289773b117590d794a43cd129366fd8e99222e4832f67b1653d54cf @@ -5570,10 +5216,10 @@ __metadata: resolution: "@orval/angular@workspace:packages/angular" dependencies: "@orval/core": "workspace:*" - eslint: "npm:^9.35.0" + eslint: "npm:^9.38.0" rimraf: "npm:^6.0.1" - tsdown: "npm:^0.15.2" - typescript: "npm:^5.9.2" + tsdown: "npm:^0.15.9" + typescript: "npm:^5.9.3" languageName: unknown linkType: soft @@ -5584,7 +5230,7 @@ __metadata: "@orval/core": "workspace:*" eslint: "npm:^9.38.0" rimraf: "npm:^6.0.1" - tsdown: "npm:^0.15.8" + tsdown: "npm:^0.15.9" typescript: "npm:^5.9.3" languageName: unknown linkType: soft @@ -5594,7 +5240,7 @@ __metadata: resolution: "@orval/core@workspace:packages/core" dependencies: "@apidevtools/swagger-parser": "npm:^12.1.0" - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" "@ibm-cloud/openapi-ruleset": "npm:^1.33.1" "@stoplight/spectral-core": "npm:^1.20.0" "@types/debug": "npm:^4.1.12" @@ -5604,29 +5250,27 @@ __metadata: "@types/lodash.uniq": "npm:^4.5.9" "@types/lodash.uniqby": "npm:^4.7.9" "@types/lodash.uniqwith": "npm:^4.5.9" - "@types/micromatch": "npm:^4.0.9" "@types/swagger2openapi": "npm:^7.0.4" acorn: "npm:^8.15.0" - chalk: "npm:^4.1.2" + chalk: "npm:^5.6.2" compare-versions: "npm:^6.1.1" debug: "npm:^4.4.3" esbuild: "npm:^0.25.11" eslint: "npm:^9.38.0" esutils: "npm:2.0.3" - fs-extra: "npm:^11.3.1" - globby: "npm:11.1.0" + fs-extra: "npm:^11.3.2" + globby: "npm:15.0.0" lodash.isempty: "npm:^4.4.0" lodash.uniq: "npm:^4.5.0" lodash.uniqby: "npm:^4.7.0" lodash.uniqwith: "npm:^4.5.0" - micromatch: "npm:^4.0.8" openapi-types: "npm:^12.1.3" openapi3-ts: "npm:4.5.0" rimraf: "npm:^6.0.1" swagger2openapi: "npm:^7.0.8" - tsdown: "npm:^0.15.8" + tsdown: "npm:^0.15.9" typedoc: "npm:^0.28.14" - typescript: "npm:^5.9.2" + typescript: "npm:^5.9.3" vitest: "npm:^3.2.4" languageName: unknown linkType: soft @@ -5639,7 +5283,7 @@ __metadata: eslint: "npm:^9.38.0" openapi3-ts: "npm:4.5.0" rimraf: "npm:^6.0.1" - tsdown: "npm:^0.15.8" + tsdown: "npm:^0.15.9" typescript: "npm:^5.9.3" languageName: unknown linkType: soft @@ -5658,7 +5302,7 @@ __metadata: lodash.uniq: "npm:^4.5.0" openapi3-ts: "npm:4.5.0" rimraf: "npm:^6.0.1" - tsdown: "npm:^0.15.8" + tsdown: "npm:^0.15.9" typescript: "npm:^5.9.3" languageName: unknown linkType: soft @@ -5673,7 +5317,7 @@ __metadata: eslint: "npm:^9.38.0" openapi3-ts: "npm:4.5.0" rimraf: "npm:^6.0.1" - tsdown: "npm:^0.15.8" + tsdown: "npm:^0.15.9" typescript: "npm:^5.9.3" languageName: unknown linkType: soft @@ -5686,7 +5330,7 @@ __metadata: eslint: "npm:^9.38.0" openapi3-ts: "npm:4.5.0" rimraf: "npm:^6.0.1" - tsdown: "npm:^0.15.8" + tsdown: "npm:^0.15.9" typescript: "npm:^5.9.3" vitest: "npm:^3.2.4" languageName: unknown @@ -5699,11 +5343,11 @@ __metadata: "@orval/core": "workspace:*" "@orval/fetch": "workspace:*" "@types/lodash.omitby": "npm:^4.6.9" - chalk: "npm:^4.1.2" + chalk: "npm:^5.6.2" eslint: "npm:^9.38.0" lodash.omitby: "npm:^4.6.0" rimraf: "npm:^6.0.1" - tsdown: "npm:^0.15.8" + tsdown: "npm:^0.15.9" vitest: "npm:^3.2.4" languageName: unknown linkType: soft @@ -5716,7 +5360,7 @@ __metadata: "@orval/fetch": "workspace:*" eslint: "npm:^9.38.0" rimraf: "npm:^6.0.1" - tsdown: "npm:^0.15.8" + tsdown: "npm:^0.15.9" languageName: unknown linkType: soft @@ -5730,7 +5374,7 @@ __metadata: lodash.uniq: "npm:^4.5.0" openapi3-ts: "npm:4.5.0" rimraf: "npm:^6.0.1" - tsdown: "npm:^0.15.8" + tsdown: "npm:^0.15.9" vitest: "npm:^3.2.4" languageName: unknown linkType: soft @@ -5749,10 +5393,10 @@ __metadata: languageName: node linkType: hard -"@oxc-project/types@npm:=0.89.0": - version: 0.89.0 - resolution: "@oxc-project/types@npm:0.89.0" - checksum: 10c0/2e971397f32d28aef443b0863f915eb56bacb0d94ced10da0d8366e076c1a8f9284cbe107f03ad709b7ac65cd2ddfe4c13f754ddf214001f39f079126fa40622 +"@oxc-project/types@npm:=0.95.0": + version: 0.95.0 + resolution: "@oxc-project/types@npm:0.95.0" + checksum: 10c0/3ab486ff14eaa87d0b7d84763db001791e9d103281eefa87934c0d46d7fd721b83fc4b72ad3435a1974ecba04c2e902ce249cb664e16d58e691a438acd26dd4b languageName: node linkType: hard @@ -5974,9 +5618,9 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-android-arm64@npm:1.0.0-beta.38": - version: 1.0.0-beta.38 - resolution: "@rolldown/binding-android-arm64@npm:1.0.0-beta.38" +"@rolldown/binding-android-arm64@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/binding-android-arm64@npm:1.0.0-beta.44" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -5988,9 +5632,9 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-darwin-arm64@npm:1.0.0-beta.38": - version: 1.0.0-beta.38 - resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-beta.38" +"@rolldown/binding-darwin-arm64@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-beta.44" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -6002,9 +5646,9 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-darwin-x64@npm:1.0.0-beta.38": - version: 1.0.0-beta.38 - resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-beta.38" +"@rolldown/binding-darwin-x64@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-beta.44" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -6016,9 +5660,9 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-freebsd-x64@npm:1.0.0-beta.38": - version: 1.0.0-beta.38 - resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-beta.38" +"@rolldown/binding-freebsd-x64@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-beta.44" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -6030,9 +5674,9 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-beta.38": - version: 1.0.0-beta.38 - resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-beta.38" +"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-beta.44" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -6044,9 +5688,9 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-beta.38": - version: 1.0.0-beta.38 - resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-beta.38" +"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-beta.44" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard @@ -6058,9 +5702,9 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-linux-arm64-musl@npm:1.0.0-beta.38": - version: 1.0.0-beta.38 - resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-beta.38" +"@rolldown/binding-linux-arm64-musl@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-beta.44" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard @@ -6072,9 +5716,9 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-linux-x64-gnu@npm:1.0.0-beta.38": - version: 1.0.0-beta.38 - resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-beta.38" +"@rolldown/binding-linux-x64-gnu@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-beta.44" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard @@ -6086,9 +5730,9 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-linux-x64-musl@npm:1.0.0-beta.38": - version: 1.0.0-beta.38 - resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-beta.38" +"@rolldown/binding-linux-x64-musl@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-beta.44" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard @@ -6100,9 +5744,9 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-openharmony-arm64@npm:1.0.0-beta.38": - version: 1.0.0-beta.38 - resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-beta.38" +"@rolldown/binding-openharmony-arm64@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-beta.44" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard @@ -6116,11 +5760,11 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-wasm32-wasi@npm:1.0.0-beta.38": - version: 1.0.0-beta.38 - resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-beta.38" +"@rolldown/binding-wasm32-wasi@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-beta.44" dependencies: - "@napi-rs/wasm-runtime": "npm:^1.0.5" + "@napi-rs/wasm-runtime": "npm:^1.0.7" conditions: cpu=wasm32 languageName: node linkType: hard @@ -6132,9 +5776,9 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-beta.38": - version: 1.0.0-beta.38 - resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-beta.38" +"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-beta.44" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -6146,9 +5790,9 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-win32-ia32-msvc@npm:1.0.0-beta.38": - version: 1.0.0-beta.38 - resolution: "@rolldown/binding-win32-ia32-msvc@npm:1.0.0-beta.38" +"@rolldown/binding-win32-ia32-msvc@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/binding-win32-ia32-msvc@npm:1.0.0-beta.44" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -6160,17 +5804,17 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-win32-x64-msvc@npm:1.0.0-beta.38": - version: 1.0.0-beta.38 - resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-beta.38" +"@rolldown/binding-win32-x64-msvc@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-beta.44" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@rolldown/pluginutils@npm:1.0.0-beta.27": - version: 1.0.0-beta.27 - resolution: "@rolldown/pluginutils@npm:1.0.0-beta.27" - checksum: 10c0/9658f235b345201d4f6bfb1f32da9754ca164f892d1cb68154fe5f53c1df42bd675ecd409836dff46884a7847d6c00bdc38af870f7c81e05bba5c2645eb4ab9c +"@rolldown/pluginutils@npm:1.0.0-beta.29": + version: 1.0.0-beta.29 + resolution: "@rolldown/pluginutils@npm:1.0.0-beta.29" + checksum: 10c0/6b53011bb93c83be617a5511197656991b06a2ffa8eb869af211cbb0aed8cc9a6cf48f0a6d0ec92c0daadb912fd74808a635a6a6477f97ca9effaf5606c77deb languageName: node linkType: hard @@ -6188,6 +5832,13 @@ __metadata: languageName: node linkType: hard +"@rolldown/pluginutils@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "@rolldown/pluginutils@npm:1.0.0-beta.44" + checksum: 10c0/945edb7883cc2a2ae2d139b9cb94093b318ec92757a3f7056b343f1cbfd4a76a5ba75a7a1043e9cb579eaeff362b20df2282c8112517580811f94385b2fffcf9 + languageName: node + linkType: hard + "@rollup/plugin-babel@npm:^5.2.0": version: 5.3.1 resolution: "@rollup/plugin-babel@npm:5.3.1" @@ -6418,6 +6069,13 @@ __metadata: languageName: node linkType: hard +"@sec-ant/readable-stream@npm:^0.4.1": + version: 0.4.1 + resolution: "@sec-ant/readable-stream@npm:0.4.1" + checksum: 10c0/64e9e9cf161e848067a5bf60cdc04d18495dc28bb63a8d9f8993e4dd99b91ad34e4b563c85de17d91ffb177ec17a0664991d2e115f6543e73236a906068987af + languageName: node + linkType: hard + "@shikijs/engine-oniguruma@npm:^3.12.2": version: 3.12.2 resolution: "@shikijs/engine-oniguruma@npm:3.12.2" @@ -6535,6 +6193,13 @@ __metadata: languageName: node linkType: hard +"@sindresorhus/merge-streams@npm:^4.0.0": + version: 4.0.0 + resolution: "@sindresorhus/merge-streams@npm:4.0.0" + checksum: 10c0/482ee543629aa1933b332f811a1ae805a213681ecdd98c042b1c1b89387df63e7812248bb4df3910b02b3cc5589d3d73e4393f30e197c9dde18046ccd471fc6b + languageName: node + linkType: hard + "@sinonjs/commons@npm:^1.7.0": version: 1.8.6 resolution: "@sinonjs/commons@npm:1.8.6" @@ -7082,7 +6747,7 @@ __metadata: languageName: node linkType: hard -"@tanstack/match-sorter-utils@npm:^8.1.1, @tanstack/match-sorter-utils@npm:^8.19.4": +"@tanstack/match-sorter-utils@npm:^8.19.4": version: 8.19.4 resolution: "@tanstack/match-sorter-utils@npm:8.19.4" dependencies: @@ -7105,10 +6770,10 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:5.87.4": - version: 5.87.4 - resolution: "@tanstack/query-core@npm:5.87.4" - checksum: 10c0/00898c96d199ba8f0cd2004b76da8e5e3355b97473a6c16dd13de65f5063c4f2abfae64e9f32fc395557c2f446af09e1646a82f62992256fdda6062c9399c2a3 +"@tanstack/query-core@npm:5.90.5": + version: 5.90.5 + resolution: "@tanstack/query-core@npm:5.90.5" + checksum: 10c0/3b9460cc10d494357a30ddd3138f2a831611d14b5b8ce3587daa17a078d63945fcdf419864d9dc8e1249aa89b512003d2f134977c64ceccdbdfdd79f1f7e0a34 languageName: node linkType: hard @@ -7134,30 +6799,12 @@ __metadata: languageName: node linkType: hard -"@tanstack/vue-query@npm:^4.41.0": - version: 4.41.0 - resolution: "@tanstack/vue-query@npm:4.41.0" - dependencies: - "@tanstack/match-sorter-utils": "npm:^8.1.1" - "@tanstack/query-core": "npm:4.41.0" - "@vue/devtools-api": "npm:^6.4.2" - vue-demi: "npm:^0.13.11" - peerDependencies: - "@vue/composition-api": ^1.1.2 - vue: ^2.5.0 || ^3.0.0 - peerDependenciesMeta: - "@vue/composition-api": - optional: true - checksum: 10c0/7ef286530f2cf3ad9e7e92826bab1a66907d9774828f36cfa8982409cdf13417e665349d87c903acee1533a9681eb07c79c85aaa13993ac5e067f980b9cb526a - languageName: node - linkType: hard - -"@tanstack/vue-query@npm:^5.87.4": - version: 5.87.4 - resolution: "@tanstack/vue-query@npm:5.87.4" +"@tanstack/vue-query@npm:^5.90.5": + version: 5.90.5 + resolution: "@tanstack/vue-query@npm:5.90.5" dependencies: "@tanstack/match-sorter-utils": "npm:^8.19.4" - "@tanstack/query-core": "npm:5.87.4" + "@tanstack/query-core": "npm:5.90.5" "@vue/devtools-api": "npm:^6.6.3" vue-demi: "npm:^0.14.10" peerDependencies: @@ -7166,7 +6813,7 @@ __metadata: peerDependenciesMeta: "@vue/composition-api": optional: true - checksum: 10c0/fa1f1a838b144b34a8a59e151f760380d5c40c9b8d04a59cfdfc1898554963b5f91257e4877d292ff8709d325a3fcf91f16cebdbe8cafb056e285a94de216423 + checksum: 10c0/8bd4c09380df671484185e2d82b60e0f5cc7b0e94b79511a9c5391941db3f3f67ca1abfa71f35d053d581ecef3596946aa1f71040f491d81b6b6afac8bac5ba3 languageName: node linkType: hard @@ -7352,13 +6999,6 @@ __metadata: languageName: node linkType: hard -"@types/braces@npm:*": - version: 3.0.5 - resolution: "@types/braces@npm:3.0.5" - checksum: 10c0/fff17426731376b452abf747e862f0116b80ccc68a2c8e6b56aff240048c26c983d61c456c6792dffe9df407d80c1a504bea21e8c1a56afaed1f311dfe75bc68 - languageName: node - linkType: hard - "@types/chai@npm:^5.2.2": version: 5.2.2 resolution: "@types/chai@npm:5.2.2" @@ -7403,13 +7043,6 @@ __metadata: languageName: node linkType: hard -"@types/cookie@npm:^0.6.0": - version: 0.6.0 - resolution: "@types/cookie@npm:0.6.0" - checksum: 10c0/5b326bd0188120fb32c0be086b141b1481fec9941b76ad537f9110e10d61ee2636beac145463319c71e4be67a17e85b81ca9e13ceb6e3bb63b93d16824d6c149 - languageName: node - linkType: hard - "@types/debug@npm:^4.1.12": version: 4.1.12 resolution: "@types/debug@npm:4.1.12" @@ -7708,15 +7341,6 @@ __metadata: languageName: node linkType: hard -"@types/micromatch@npm:^4.0.9": - version: 4.0.9 - resolution: "@types/micromatch@npm:4.0.9" - dependencies: - "@types/braces": "npm:*" - checksum: 10c0/b13d7594b4320f20729f20156c51e957d79deb15083f98a736689cd0d3e4ba83b5d125959f6edf65270a6b6db90db9cebef8168d88e1c4eedc9a18aecc0234a3 - languageName: node - linkType: hard - "@types/mime@npm:^1": version: 1.3.5 resolution: "@types/mime@npm:1.3.5" @@ -7756,21 +7380,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^22.18.10": - version: 22.18.10 - resolution: "@types/node@npm:22.18.10" +"@types/node@npm:^22.18.12": + version: 22.18.12 + resolution: "@types/node@npm:22.18.12" dependencies: undici-types: "npm:~6.21.0" - checksum: 10c0/37b34553f1953ab8fc25b7467d44701446400f62547adb62c842cebac091350985470aeed87acd60f5295778c370d9721d477310e643677a7eab03a8dc6ed74f - languageName: node - linkType: hard - -"@types/node@npm:^22.18.11": - version: 22.18.11 - resolution: "@types/node@npm:22.18.11" - dependencies: - undici-types: "npm:~6.21.0" - checksum: 10c0/3802f598608638e13ca350fbe2db0db5dde9a0b6704295fa1b6cec6defe24f9baf6a891eee6eaecd016bcd5ea18edecdaf71679d87079fe468913701adb61387 + checksum: 10c0/13a4638f2baba3efba2b8bc369dd6f950dccbfca78f318f9c9f2c7adc11fce14fc119723c38567dada2d57a873c092b7356c024924d5974a08f3c1f93dc706c6 languageName: node linkType: hard @@ -7990,28 +7605,28 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.46.1": - version: 8.46.1 - resolution: "@typescript-eslint/eslint-plugin@npm:8.46.1" +"@typescript-eslint/eslint-plugin@npm:8.46.2, @typescript-eslint/eslint-plugin@npm:^8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/eslint-plugin@npm:8.46.2" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.46.1" - "@typescript-eslint/type-utils": "npm:8.46.1" - "@typescript-eslint/utils": "npm:8.46.1" - "@typescript-eslint/visitor-keys": "npm:8.46.1" + "@typescript-eslint/scope-manager": "npm:8.46.2" + "@typescript-eslint/type-utils": "npm:8.46.2" + "@typescript-eslint/utils": "npm:8.46.2" + "@typescript-eslint/visitor-keys": "npm:8.46.2" graphemer: "npm:^1.4.0" ignore: "npm:^7.0.0" natural-compare: "npm:^1.4.0" ts-api-utils: "npm:^2.1.0" peerDependencies: - "@typescript-eslint/parser": ^8.46.1 + "@typescript-eslint/parser": ^8.46.2 eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/7a269f7dc3f6d900b9a7caefc0ab455406aae7fc0c0a198b1f18623c1c47bd54c6769777b0d8a2ef2e674a60124470d85394feb5fae4991c84c6a37875f75410 + checksum: 10c0/24d1257bd023525754dc130e99bad1404c46f997729a060e3764b7f80dd43edcc43767b60fd89244cba82157918609e3922e408d0f7be4223e2056c1447fb387 languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0, @typescript-eslint/eslint-plugin@npm:^8.43.0": +"@typescript-eslint/eslint-plugin@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": version: 8.43.0 resolution: "@typescript-eslint/eslint-plugin@npm:8.43.0" dependencies: @@ -8067,23 +7682,23 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.46.1": - version: 8.46.1 - resolution: "@typescript-eslint/parser@npm:8.46.1" +"@typescript-eslint/parser@npm:8.46.2, @typescript-eslint/parser@npm:^8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/parser@npm:8.46.2" dependencies: - "@typescript-eslint/scope-manager": "npm:8.46.1" - "@typescript-eslint/types": "npm:8.46.1" - "@typescript-eslint/typescript-estree": "npm:8.46.1" - "@typescript-eslint/visitor-keys": "npm:8.46.1" + "@typescript-eslint/scope-manager": "npm:8.46.2" + "@typescript-eslint/types": "npm:8.46.2" + "@typescript-eslint/typescript-estree": "npm:8.46.2" + "@typescript-eslint/visitor-keys": "npm:8.46.2" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/4d14e9dbd5b4ba6001d35ae8833b1b03588911d44b1e01a7e38b1883148c3b1d22e4d4de50e5c6a698a4697ef067e235524b521023d0f5a830767d54c8c5fff5 + checksum: 10c0/9556bf8ec039c6d1751a37cf76cf70912e80dc45337731a304509309e67472c3f5b5abe6ac5021a7ae9361ea65b2e1f66b626603cecca6506a4533152a77b28f languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0, @typescript-eslint/parser@npm:^8.43.0": +"@typescript-eslint/parser@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": version: 8.43.0 resolution: "@typescript-eslint/parser@npm:8.43.0" dependencies: @@ -8129,16 +7744,16 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/project-service@npm:8.46.1": - version: 8.46.1 - resolution: "@typescript-eslint/project-service@npm:8.46.1" +"@typescript-eslint/project-service@npm:8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/project-service@npm:8.46.2" dependencies: - "@typescript-eslint/tsconfig-utils": "npm:^8.46.1" - "@typescript-eslint/types": "npm:^8.46.1" + "@typescript-eslint/tsconfig-utils": "npm:^8.46.2" + "@typescript-eslint/types": "npm:^8.46.2" debug: "npm:^4.3.4" peerDependencies: typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/7218bb343eb371e468596947ef66f0ad5024a76f2787550e093af0fc2b34e1bba3e86840bdec719afd26368e9f75c1ea4ab09bdc84610a746acd89b66910cf8b + checksum: 10c0/03e87bcbca6af3f95bf54d4047a8b4d12434126c27d7312e804499a9459e1c847fe045f83fe8e3b22c3dc3925baad0aa2a1a5476d0d51f73a493dc5909a53dbf languageName: node linkType: hard @@ -8162,13 +7777,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.46.1": - version: 8.46.1 - resolution: "@typescript-eslint/scope-manager@npm:8.46.1" +"@typescript-eslint/scope-manager@npm:8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/scope-manager@npm:8.46.2" dependencies: - "@typescript-eslint/types": "npm:8.46.1" - "@typescript-eslint/visitor-keys": "npm:8.46.1" - checksum: 10c0/5cff63677e90f3307fe924b739a3fe9f5239f74ec389fa06d6fa0a3fa51f592d8fb038c0c71088157b5b6fb426145bff1239aa3676c05c7d71d3b9be0f8c2cba + "@typescript-eslint/types": "npm:8.46.2" + "@typescript-eslint/visitor-keys": "npm:8.46.2" + checksum: 10c0/42f52ee621a3a0ef2233e7d3384d9dbd76218f5c906a9cce3152a1f55c060a3d3614c7b8fff5270bdf48e8fcc003e732d3f003f283ea6fb204d64a2f6bb3ea9c languageName: node linkType: hard @@ -8181,12 +7796,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/tsconfig-utils@npm:8.46.1, @typescript-eslint/tsconfig-utils@npm:^8.46.1": - version: 8.46.1 - resolution: "@typescript-eslint/tsconfig-utils@npm:8.46.1" +"@typescript-eslint/tsconfig-utils@npm:8.46.2, @typescript-eslint/tsconfig-utils@npm:^8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.46.2" peerDependencies: typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/c373bd4e2f43e03d8d4dc91cacbc0acdb217809f0e7b23fb4dd349fdab2503489dd79a3adb394491763ec967fa1312c5c9aebdbc5799ad3ed773b036a6eddb9d + checksum: 10c0/23e34ad296347417e42234945138022fb045d180fde69941483884a38e85fa55d5449420d2a660c0ebf1794a445add2f13e171c8dd64e4e83f594e2c4e35bf4d languageName: node linkType: hard @@ -8223,19 +7838,19 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.46.1": - version: 8.46.1 - resolution: "@typescript-eslint/type-utils@npm:8.46.1" +"@typescript-eslint/type-utils@npm:8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/type-utils@npm:8.46.2" dependencies: - "@typescript-eslint/types": "npm:8.46.1" - "@typescript-eslint/typescript-estree": "npm:8.46.1" - "@typescript-eslint/utils": "npm:8.46.1" + "@typescript-eslint/types": "npm:8.46.2" + "@typescript-eslint/typescript-estree": "npm:8.46.2" + "@typescript-eslint/utils": "npm:8.46.2" debug: "npm:^4.3.4" ts-api-utils: "npm:^2.1.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/bcd87755912ad626b496a78e5f3dd8182dd59e815683d6b82a3e9fffc1b52384abfbe4d3faf2ec9b15be67b88e5082a798f35f96624517f82a5026973c251074 + checksum: 10c0/e12fc65e4b58c1ab6fe65f5486265b7afe9a9a6730e3529aca927ddfc22e5913eb28999fc83e68ea1b49097e1edbbae1f61dd724b0bb0e7586fb24ecda1d4938 languageName: node linkType: hard @@ -8253,10 +7868,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:8.46.1, @typescript-eslint/types@npm:^8.46.1": - version: 8.46.1 - resolution: "@typescript-eslint/types@npm:8.46.1" - checksum: 10c0/90887acaa5b33b45af20cf7f87ec4ae098c0daa88484245473e73903fa6e542f613247c22148132167891ca06af6549a60b9d2fd14a65b22871e016901ce3756 +"@typescript-eslint/types@npm:8.46.2, @typescript-eslint/types@npm:^8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/types@npm:8.46.2" + checksum: 10c0/611716bae2369a1b8001c7f6cc03c5ecadfb956643cbbe27269defd28a61d43fe52eda008d7a09568b0be50c502e8292bf767b246366004283476e9a971b6fbc languageName: node linkType: hard @@ -8298,14 +7913,14 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.46.1": - version: 8.46.1 - resolution: "@typescript-eslint/typescript-estree@npm:8.46.1" +"@typescript-eslint/typescript-estree@npm:8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/typescript-estree@npm:8.46.2" dependencies: - "@typescript-eslint/project-service": "npm:8.46.1" - "@typescript-eslint/tsconfig-utils": "npm:8.46.1" - "@typescript-eslint/types": "npm:8.46.1" - "@typescript-eslint/visitor-keys": "npm:8.46.1" + "@typescript-eslint/project-service": "npm:8.46.2" + "@typescript-eslint/tsconfig-utils": "npm:8.46.2" + "@typescript-eslint/types": "npm:8.46.2" + "@typescript-eslint/visitor-keys": "npm:8.46.2" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -8314,7 +7929,7 @@ __metadata: ts-api-utils: "npm:^2.1.0" peerDependencies: typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/610048f615d4487f3dc57b7440214a14614a9dca8783d142e7dd29e2948d9c8239773839a3bcdf509c266d5f8595ea9f3a20c53c38d7b3bf3cf2305de1491bd8 + checksum: 10c0/ad7dbf352982bc6e16473ef19fc7d209fffeb147a732db8a2464e0ec33e7fbbc24ce3f23d01bdf99d503626c582a476debf4c90c527d755eeb99b863476d9f5f languageName: node linkType: hard @@ -8351,18 +7966,18 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.46.1": - version: 8.46.1 - resolution: "@typescript-eslint/utils@npm:8.46.1" +"@typescript-eslint/utils@npm:8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/utils@npm:8.46.2" dependencies: "@eslint-community/eslint-utils": "npm:^4.7.0" - "@typescript-eslint/scope-manager": "npm:8.46.1" - "@typescript-eslint/types": "npm:8.46.1" - "@typescript-eslint/typescript-estree": "npm:8.46.1" + "@typescript-eslint/scope-manager": "npm:8.46.2" + "@typescript-eslint/types": "npm:8.46.2" + "@typescript-eslint/typescript-estree": "npm:8.46.2" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/9089be6b88a934843fd4eead61739e43dc79ba3db3dbaebcd9908eed819765b6414da983254a7d619e89d28b441bd131f53c9f163c39ca5b2369b76cd6699121 + checksum: 10c0/600b70730077ed85a6e278e06771f3933cdafce242f979e4af1c1b41290bf1efb14d20823c25c38a3a792def69b18eb9410af28bb228fe86027ad7859753c62d languageName: node linkType: hard @@ -8386,13 +8001,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.46.1": - version: 8.46.1 - resolution: "@typescript-eslint/visitor-keys@npm:8.46.1" +"@typescript-eslint/visitor-keys@npm:8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/visitor-keys@npm:8.46.2" dependencies: - "@typescript-eslint/types": "npm:8.46.1" + "@typescript-eslint/types": "npm:8.46.2" eslint-visitor-keys: "npm:^4.2.1" - checksum: 10c0/4139a8d78ad95e59fff2285beb623a530b7c2e6af89b994a92e9d8728d0c86eb8d86f64f2372aa874f9f24924253ba9887a2f77bec6bfc6028380b024c24e582 + checksum: 10c0/2067cd9a3c90b3817242cc49b5fa77428e1b92b28e16a12f45c2b399acbba7bd17e503553e5e68924e40078477a5c247dfa12e7709c24fe11c0b17a0c8486c33 languageName: node linkType: hard @@ -8547,29 +8162,31 @@ __metadata: languageName: node linkType: hard -"@vitejs/plugin-react@npm:^4.7.0": - version: 4.7.0 - resolution: "@vitejs/plugin-react@npm:4.7.0" +"@vitejs/plugin-react@npm:^5.0.4": + version: 5.0.4 + resolution: "@vitejs/plugin-react@npm:5.0.4" dependencies: - "@babel/core": "npm:^7.28.0" + "@babel/core": "npm:^7.28.4" "@babel/plugin-transform-react-jsx-self": "npm:^7.27.1" "@babel/plugin-transform-react-jsx-source": "npm:^7.27.1" - "@rolldown/pluginutils": "npm:1.0.0-beta.27" + "@rolldown/pluginutils": "npm:1.0.0-beta.38" "@types/babel__core": "npm:^7.20.5" react-refresh: "npm:^0.17.0" peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - checksum: 10c0/692f23960972879485d647713663ec299c478222c96567d60285acf7c7dc5c178e71abfe9d2eefddef1eeb01514dacbc2ed68aad84628debf9c7116134734253 + checksum: 10c0/bb9360a4b4c0abf064d22211756b999faf23889ac150de490590ca7bd029b0ef7f4cd8ba3a32b86682a62d46fb7bebd75b3fa9835c57c78123f4a646de2e0136 languageName: node linkType: hard -"@vitejs/plugin-vue@npm:^5.2.4": - version: 5.2.4 - resolution: "@vitejs/plugin-vue@npm:5.2.4" +"@vitejs/plugin-vue@npm:^6.0.1": + version: 6.0.1 + resolution: "@vitejs/plugin-vue@npm:6.0.1" + dependencies: + "@rolldown/pluginutils": "npm:1.0.0-beta.29" peerDependencies: - vite: ^5.0.0 || ^6.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 vue: ^3.2.25 - checksum: 10c0/9559224f178daf35e3a665410d09089b0ce7c0402981f8757481c24c22f29df377f96cc6161d92f74d16c37c6e32ac19fea99086f75338ad6ceb9b5ee8375509 + checksum: 10c0/6d11fa9637e1e76e16e1deebec35e04a08c302ce13ed794f1463e5251f17152c481e9534411faa31c56122f2a75490fac534fa6b4535f1d336d1d4e7ae37bdf6 languageName: node linkType: hard @@ -8656,30 +8273,30 @@ __metadata: languageName: node linkType: hard -"@volar/language-core@npm:2.4.15": - version: 2.4.15 - resolution: "@volar/language-core@npm:2.4.15" +"@volar/language-core@npm:2.4.23": + version: 2.4.23 + resolution: "@volar/language-core@npm:2.4.23" dependencies: - "@volar/source-map": "npm:2.4.15" - checksum: 10c0/34ebd2a0f19ff5ee676d990dd3cc63a72867ab39a39071b0699486cf6e1304cad136cace78a55eaba41340720aa60863a4a9646f338bcca4bb9e0e22bd5d431e + "@volar/source-map": "npm:2.4.23" + checksum: 10c0/1b8d60c7c0faa29ef5ec46dd2b673227592d0697753767e4df088f7c2d93843828116fe59472bb9d604ba653400be32a538e985730844b1af4f42a7075e62049 languageName: node linkType: hard -"@volar/source-map@npm:2.4.15": - version: 2.4.15 - resolution: "@volar/source-map@npm:2.4.15" - checksum: 10c0/f1c353774c1e758d99ebadc2fffd416eeba5fa5f461597cef5d201ca4ea5a81ad9d7eb1c418d61b3cadaed1db2fef3fa0a29e85a02f08bba6fab04578736959a +"@volar/source-map@npm:2.4.23": + version: 2.4.23 + resolution: "@volar/source-map@npm:2.4.23" + checksum: 10c0/08af690093b811d0a37bdd8d306755b4e7f1535b67625c26f6fa6eb9ae081e24c55dabc8231ce8856aa1b731a5ac137b3f0449b34c093923c3545afdbe462c7a languageName: node linkType: hard -"@volar/typescript@npm:2.4.15": - version: 2.4.15 - resolution: "@volar/typescript@npm:2.4.15" +"@volar/typescript@npm:2.4.23": + version: 2.4.23 + resolution: "@volar/typescript@npm:2.4.23" dependencies: - "@volar/language-core": "npm:2.4.15" + "@volar/language-core": "npm:2.4.23" path-browserify: "npm:^1.0.1" vscode-uri: "npm:^3.0.8" - checksum: 10c0/f8d9e2f34e3d47edd3db51c23a4b14c48098e145c31566e463ec468a472bb3679426652c73a605a501977690749f7330c463a110283ce5d2c221f411b5fd889b + checksum: 10c0/dbb449b66e627a75f8f6df98b3210c32edff62747a12d1e6237a6dc2a75f26432833d4d3646d6fbd60ed21fa52d7e342437377973b80cf4bbeacee1980ffd0cb languageName: node linkType: hard @@ -8696,7 +8313,30 @@ __metadata: languageName: node linkType: hard -"@vue/compiler-dom@npm:3.5.21, @vue/compiler-dom@npm:^3.5.0": +"@vue/compiler-core@npm:3.5.22": + version: 3.5.22 + resolution: "@vue/compiler-core@npm:3.5.22" + dependencies: + "@babel/parser": "npm:^7.28.4" + "@vue/shared": "npm:3.5.22" + entities: "npm:^4.5.0" + estree-walker: "npm:^2.0.2" + source-map-js: "npm:^1.2.1" + checksum: 10c0/7575fdef8d2b69aa9a7f55ba237abe0ab86a855dba1048dc32b32e2e5212a66410f922603b1191a8fbbf6e0caee7efab0cea705516304eeb1108d3819a10b092 + languageName: node + linkType: hard + +"@vue/compiler-dom@npm:3.5.22": + version: 3.5.22 + resolution: "@vue/compiler-dom@npm:3.5.22" + dependencies: + "@vue/compiler-core": "npm:3.5.22" + "@vue/shared": "npm:3.5.22" + checksum: 10c0/f853e7533a6e2f51321b5ce258c6ed2bdac8a294e833a61e87b00d3fdd36cd39e1045c03027c31d85f518422062e50085f1358a37d104ccf0866bc174a5c7b9a + languageName: node + linkType: hard + +"@vue/compiler-dom@npm:^3.5.0": version: 3.5.21 resolution: "@vue/compiler-dom@npm:3.5.21" dependencies: @@ -8706,111 +8346,100 @@ __metadata: languageName: node linkType: hard -"@vue/compiler-sfc@npm:3.5.21, @vue/compiler-sfc@npm:^3.5.21": - version: 3.5.21 - resolution: "@vue/compiler-sfc@npm:3.5.21" +"@vue/compiler-sfc@npm:3.5.22, @vue/compiler-sfc@npm:^3.5.22": + version: 3.5.22 + resolution: "@vue/compiler-sfc@npm:3.5.22" dependencies: - "@babel/parser": "npm:^7.28.3" - "@vue/compiler-core": "npm:3.5.21" - "@vue/compiler-dom": "npm:3.5.21" - "@vue/compiler-ssr": "npm:3.5.21" - "@vue/shared": "npm:3.5.21" + "@babel/parser": "npm:^7.28.4" + "@vue/compiler-core": "npm:3.5.22" + "@vue/compiler-dom": "npm:3.5.22" + "@vue/compiler-ssr": "npm:3.5.22" + "@vue/shared": "npm:3.5.22" estree-walker: "npm:^2.0.2" - magic-string: "npm:^0.30.18" + magic-string: "npm:^0.30.19" postcss: "npm:^8.5.6" source-map-js: "npm:^1.2.1" - checksum: 10c0/5aea296dbfd3d734a457b3026e08a70ead16e0a0814b2c96732a0e12c773574b1582b36b2eaedf8364953ed002aec6877d5c60b60bbc0c4ea3c76e5f637bb2bc - languageName: node - linkType: hard - -"@vue/compiler-ssr@npm:3.5.21": - version: 3.5.21 - resolution: "@vue/compiler-ssr@npm:3.5.21" - dependencies: - "@vue/compiler-dom": "npm:3.5.21" - "@vue/shared": "npm:3.5.21" - checksum: 10c0/5baba67df45372f455dd83ada011e2090703a31b27787987a42174ced6010091b4f7fb7bdff22cc4787b4b195ec431fae483bbac7a07372a7cda6f4d775cd718 + checksum: 10c0/662838a31f69cf6eedfcb5dc9f7f67a67ec6761645f2f09e6d2b5a4833c0e08a11fb960665d16519599e865e9a883490116e984132f8f7bb5d8ba07fca062ca5 languageName: node linkType: hard -"@vue/compiler-vue2@npm:^2.7.16": - version: 2.7.16 - resolution: "@vue/compiler-vue2@npm:2.7.16" +"@vue/compiler-ssr@npm:3.5.22": + version: 3.5.22 + resolution: "@vue/compiler-ssr@npm:3.5.22" dependencies: - de-indent: "npm:^1.0.2" - he: "npm:^1.2.0" - checksum: 10c0/c76c3fad770b9a7da40b314116cc9da173da20e5fd68785c8ed8dd8a87d02f239545fa296e16552e040ec86b47bfb18283b39447b250c2e76e479bd6ae475bb3 + "@vue/compiler-dom": "npm:3.5.22" + "@vue/shared": "npm:3.5.22" + checksum: 10c0/d27721b96784d078e410d978ed5e7c0a2fca10b8a8087d7cfc832baedf79de8b3d34d05def3e54d7baaca0f7583c7261628dca482ba4e8b3c908302e44a53b2f languageName: node linkType: hard -"@vue/devtools-api@npm:^6.4.2, @vue/devtools-api@npm:^6.6.3": +"@vue/devtools-api@npm:^6.6.3": version: 6.6.4 resolution: "@vue/devtools-api@npm:6.6.4" checksum: 10c0/0a993ae23618166e1bee5a7c14cebd8312752b93c143cbdd48fb2d0f7ade070d0e6baf757cd920d4681fef8f9acf29515162160f38cc7410f9a684d2df21b6de languageName: node linkType: hard -"@vue/language-core@npm:2.2.12": - version: 2.2.12 - resolution: "@vue/language-core@npm:2.2.12" +"@vue/language-core@npm:3.1.1": + version: 3.1.1 + resolution: "@vue/language-core@npm:3.1.1" dependencies: - "@volar/language-core": "npm:2.4.15" + "@volar/language-core": "npm:2.4.23" "@vue/compiler-dom": "npm:^3.5.0" - "@vue/compiler-vue2": "npm:^2.7.16" "@vue/shared": "npm:^3.5.0" - alien-signals: "npm:^1.0.3" - minimatch: "npm:^9.0.3" + alien-signals: "npm:^3.0.0" muggle-string: "npm:^0.4.1" path-browserify: "npm:^1.0.1" + picomatch: "npm:^4.0.2" peerDependencies: typescript: "*" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/b69864af058d757f9774390f4ced8e79d569703088c708736aba987c3a2f4072f2aa92dee81051891bd060998c5383dd857b9107e2c9f6c3ba0f288f826f521e + checksum: 10c0/9af743f9886fb7d8c81fe814ed1d0c52b149b618de5c507c59df7adbd3850d46dc578ff9766b3a6d31a44c564407da48b0ed8725eded90eebfc1fe12cda7576e languageName: node linkType: hard -"@vue/reactivity@npm:3.5.21": - version: 3.5.21 - resolution: "@vue/reactivity@npm:3.5.21" +"@vue/reactivity@npm:3.5.22": + version: 3.5.22 + resolution: "@vue/reactivity@npm:3.5.22" dependencies: - "@vue/shared": "npm:3.5.21" - checksum: 10c0/d2396705d37544d6d504873e62d09a46f3c5989c6d80b2eedc85848906477e050bf6bcb154ce072a48a270f44ac910670207a8ae94df63de4f8588181bb32557 + "@vue/shared": "npm:3.5.22" + checksum: 10c0/1fecb06885110203f50574fff9e126844ebfd09d180aa16896782af29d1c30466d6ba290983e40ca977042482b493215afadf6b75ef1d86bb7f7919f0129f5c7 languageName: node linkType: hard -"@vue/runtime-core@npm:3.5.21": - version: 3.5.21 - resolution: "@vue/runtime-core@npm:3.5.21" +"@vue/runtime-core@npm:3.5.22": + version: 3.5.22 + resolution: "@vue/runtime-core@npm:3.5.22" dependencies: - "@vue/reactivity": "npm:3.5.21" - "@vue/shared": "npm:3.5.21" - checksum: 10c0/40878341befc8bb3390ae33165a5c9e52e81dd555ba8b889de95f5ddc519f16f97636bc51d5cf1e67a064329068b0c399ea5c9784dc75a5260bc6a519495e3bd + "@vue/reactivity": "npm:3.5.22" + "@vue/shared": "npm:3.5.22" + checksum: 10c0/7d9d37f33faa4fc66a7964551004936f37cc73ab7da71459568f8df7420658c06615394d98d3304040c16ab3fe7fcaeb05b50e3842d68afe3e24dbab57733aef languageName: node linkType: hard -"@vue/runtime-dom@npm:3.5.21": - version: 3.5.21 - resolution: "@vue/runtime-dom@npm:3.5.21" +"@vue/runtime-dom@npm:3.5.22": + version: 3.5.22 + resolution: "@vue/runtime-dom@npm:3.5.22" dependencies: - "@vue/reactivity": "npm:3.5.21" - "@vue/runtime-core": "npm:3.5.21" - "@vue/shared": "npm:3.5.21" + "@vue/reactivity": "npm:3.5.22" + "@vue/runtime-core": "npm:3.5.22" + "@vue/shared": "npm:3.5.22" csstype: "npm:^3.1.3" - checksum: 10c0/047a468fbd2ce4ad6b6cc6fa47da8671f9f648e8a24164b423eab42c2a45547b73f14c33a7439c1a7d348e5ea7fe3020176a7138b69ced3cb224b399c6898267 + checksum: 10c0/e0d16ff44d154589d0a0607c07426fd90e60a8e859de0489ed49ac73eef634a9fa29dd78b261bf52a2a519ba32f191a46799cc92a36957c42a3c4b2ab1f20027 languageName: node linkType: hard -"@vue/server-renderer@npm:3.5.21": - version: 3.5.21 - resolution: "@vue/server-renderer@npm:3.5.21" +"@vue/server-renderer@npm:3.5.22": + version: 3.5.22 + resolution: "@vue/server-renderer@npm:3.5.22" dependencies: - "@vue/compiler-ssr": "npm:3.5.21" - "@vue/shared": "npm:3.5.21" + "@vue/compiler-ssr": "npm:3.5.22" + "@vue/shared": "npm:3.5.22" peerDependencies: - vue: 3.5.21 - checksum: 10c0/4899387eb9885b17315ddfafd1e28d362a3dba0f781812fc8dc2a2f323789b8b193b8e9a0b7f9610a6fbbf4a2e83620b26c0f9e229598413fb220ba02e56a7df + vue: 3.5.22 + checksum: 10c0/154ea79c4735c02bf4788b6338495e60c1bf7d5ba69bfbd26a92ecb677ed653baafc276fe08249c441a784d2d03dd85d420ea8ed6803150d34b84ce8318362ba languageName: node linkType: hard @@ -8821,6 +8450,13 @@ __metadata: languageName: node linkType: hard +"@vue/shared@npm:3.5.22": + version: 3.5.22 + resolution: "@vue/shared@npm:3.5.22" + checksum: 10c0/5866eab1dd6caa949f4ae2da2a7bac69612b35e316a298785279fb4de101bfe89a3572db56448aa35023b01d069b80a664be4fe22847ce5e5fbc1990e5970ec5 + languageName: node + linkType: hard + "@vue/test-utils@npm:^2.4.1": version: 2.4.6 resolution: "@vue/test-utils@npm:2.4.6" @@ -9291,10 +8927,10 @@ __metadata: languageName: node linkType: hard -"alien-signals@npm:^1.0.3": - version: 1.0.13 - resolution: "alien-signals@npm:1.0.13" - checksum: 10c0/7b0ec8305eaacf810ab3fa7e2045c343e695dca510befc148ccef26cb59b8f159d9d56772fbd8767f85cbccc6fadcc09b9f90a4e1e1206d5f726b8995f24dbe4 +"alien-signals@npm:^3.0.0": + version: 3.0.3 + resolution: "alien-signals@npm:3.0.3" + checksum: 10c0/7222967610926ceda7599dc8272311d3c8ba5fedc38d650424ff92c52696c2b60dd0d0c2473b4b8258f7ab72b8a39aac8c45e8f80576b6bbc134fcea86981066 languageName: node linkType: hard @@ -9311,8 +8947,8 @@ __metadata: "@angular/forms": "npm:^20.3.0" "@angular/platform-browser": "npm:^20.3.0" "@angular/router": "npm:^20.3.0" - "@faker-js/faker": "npm:^9.9.0" - msw: "npm:^2.11.2" + "@faker-js/faker": "npm:^10.1.0" + msw: "npm:^2.11.6" orval: "workspace:*" rimraf: "npm:^6.0.1" rxjs: "npm:~7.8.2" @@ -9414,7 +9050,7 @@ __metadata: languageName: node linkType: hard -"ansis@npm:^4.0.0, ansis@npm:^4.1.0": +"ansis@npm:^4.0.0": version: 4.1.0 resolution: "ansis@npm:4.1.0" checksum: 10c0/df62d017a7791babdaf45b93f930d2cfd6d1dab5568b610735c11434c9a5ef8f513740e7cfd80bcbc3530fc8bd892b88f8476f26621efc251230e53cbd1a2c24 @@ -9665,16 +9301,6 @@ __metadata: languageName: node linkType: hard -"ast-kit@npm:^2.1.2": - version: 2.1.2 - resolution: "ast-kit@npm:2.1.2" - dependencies: - "@babel/parser": "npm:^7.28.0" - pathe: "npm:^2.0.3" - checksum: 10c0/7034c2d98de971cd689f5e098837c08f4f1b96a4fab14ab8d54ddc3b877e5e677f6851bef7e1625f0c714196f85ba2a0417446afe571ae34db1a4e34d788b25c - languageName: node - linkType: hard - "ast-kit@npm:^2.1.3": version: 2.1.3 resolution: "ast-kit@npm:2.1.3" @@ -9984,9 +9610,9 @@ __metadata: version: 0.0.0-use.local resolution: "basic@workspace:samples/basic" dependencies: - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" axios: "npm:^1.12.2" - msw: "npm:^2.11.2" + msw: "npm:^2.11.6" npm-run-all: "npm:^4.1.5" orval: "workspace:*" dependenciesMeta: @@ -10061,13 +9687,6 @@ __metadata: languageName: node linkType: hard -"birpc@npm:^2.5.0": - version: 2.5.0 - resolution: "birpc@npm:2.5.0" - checksum: 10c0/8caed5ad86b71e0b4af6a1c5e8ed006f451d3b378ce52c2fa613fe68f15bb3df1357ad69f7fb0251e4261f39b2926995e34307ac06397f993665b16ba569dc54 - languageName: node - linkType: hard - "birpc@npm:^2.6.1": version: 2.6.1 resolution: "birpc@npm:2.6.1" @@ -10437,7 +10056,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^5.3.0": +"chalk@npm:^5.3.0, chalk@npm:^5.6.2": version: 5.6.2 resolution: "chalk@npm:5.6.2" checksum: 10c0/99a4b0f0e7991796b1e7e3f52dceb9137cae2a9dfc8fc0784a550dc4c558e15ab32ed70b14b21b52beb2679b4892b41a0aa44249bcb996f01e125d58477c6976 @@ -10991,13 +10610,20 @@ __metadata: languageName: node linkType: hard -"cookie@npm:^0.7.1, cookie@npm:^0.7.2": +"cookie@npm:^0.7.1": version: 0.7.2 resolution: "cookie@npm:0.7.2" checksum: 10c0/9596e8ccdbf1a3a88ae02cf5ee80c1c50959423e1022e4e60b91dd87c622af1da309253d8abdb258fb5e3eacb4f08e579dc58b4897b8087574eee0fd35dfa5d2 languageName: node linkType: hard +"cookie@npm:^1.0.2": + version: 1.0.2 + resolution: "cookie@npm:1.0.2" + checksum: 10c0/fd25fe79e8fbcfcaf6aa61cd081c55d144eeeba755206c058682257cb38c4bd6795c6620de3f064c740695bb65b7949ebb1db7a95e4636efb8357a335ad3f54b + languageName: node + linkType: hard + "core-js-compat@npm:^3.43.0, core-js-compat@npm:^3.44.0": version: 3.45.1 resolution: "core-js-compat@npm:3.45.1" @@ -11432,7 +11058,7 @@ __metadata: languageName: node linkType: hard -"cssstyle@npm:^5.3.0": +"cssstyle@npm:^5.3.1": version: 5.3.1 resolution: "cssstyle@npm:5.3.1" dependencies: @@ -11525,13 +11151,6 @@ __metadata: languageName: node linkType: hard -"de-indent@npm:^1.0.2": - version: 1.0.2 - resolution: "de-indent@npm:1.0.2" - checksum: 10c0/7058ce58abd6dfc123dd204e36be3797abd419b59482a634605420f47ae97639d0c183ec5d1b904f308a01033f473673897afc2bd59bc620ebf1658763ef4291 - languageName: node - linkType: hard - "debug@npm:2.6.9, debug@npm:^2.6.0": version: 2.6.9 resolution: "debug@npm:2.6.9" @@ -11579,7 +11198,7 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.2.1, decimal.js@npm:^10.5.0": +"decimal.js@npm:^10.2.1, decimal.js@npm:^10.6.0": version: 10.6.0 resolution: "decimal.js@npm:10.6.0" checksum: 10c0/07d69fbcc54167a340d2d97de95f546f9ff1f69d2b45a02fd7a5292412df3cd9eb7e23065e532a318f5474a2e1bccf8392fdf0443ef467f97f3bf8cb0477e5aa @@ -12619,163 +12238,6 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.18.10": - version: 0.18.20 - resolution: "esbuild@npm:0.18.20" - dependencies: - "@esbuild/android-arm": "npm:0.18.20" - "@esbuild/android-arm64": "npm:0.18.20" - "@esbuild/android-x64": "npm:0.18.20" - "@esbuild/darwin-arm64": "npm:0.18.20" - "@esbuild/darwin-x64": "npm:0.18.20" - "@esbuild/freebsd-arm64": "npm:0.18.20" - "@esbuild/freebsd-x64": "npm:0.18.20" - "@esbuild/linux-arm": "npm:0.18.20" - "@esbuild/linux-arm64": "npm:0.18.20" - "@esbuild/linux-ia32": "npm:0.18.20" - "@esbuild/linux-loong64": "npm:0.18.20" - "@esbuild/linux-mips64el": "npm:0.18.20" - "@esbuild/linux-ppc64": "npm:0.18.20" - "@esbuild/linux-riscv64": "npm:0.18.20" - "@esbuild/linux-s390x": "npm:0.18.20" - "@esbuild/linux-x64": "npm:0.18.20" - "@esbuild/netbsd-x64": "npm:0.18.20" - "@esbuild/openbsd-x64": "npm:0.18.20" - "@esbuild/sunos-x64": "npm:0.18.20" - "@esbuild/win32-arm64": "npm:0.18.20" - "@esbuild/win32-ia32": "npm:0.18.20" - "@esbuild/win32-x64": "npm:0.18.20" - dependenciesMeta: - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/473b1d92842f50a303cf948a11ebd5f69581cd254d599dd9d62f9989858e0533f64e83b723b5e1398a5b488c0f5fd088795b4235f65ecaf4f007d4b79f04bc88 - languageName: node - linkType: hard - -"esbuild@npm:^0.21.3": - version: 0.21.5 - resolution: "esbuild@npm:0.21.5" - dependencies: - "@esbuild/aix-ppc64": "npm:0.21.5" - "@esbuild/android-arm": "npm:0.21.5" - "@esbuild/android-arm64": "npm:0.21.5" - "@esbuild/android-x64": "npm:0.21.5" - "@esbuild/darwin-arm64": "npm:0.21.5" - "@esbuild/darwin-x64": "npm:0.21.5" - "@esbuild/freebsd-arm64": "npm:0.21.5" - "@esbuild/freebsd-x64": "npm:0.21.5" - "@esbuild/linux-arm": "npm:0.21.5" - "@esbuild/linux-arm64": "npm:0.21.5" - "@esbuild/linux-ia32": "npm:0.21.5" - "@esbuild/linux-loong64": "npm:0.21.5" - "@esbuild/linux-mips64el": "npm:0.21.5" - "@esbuild/linux-ppc64": "npm:0.21.5" - "@esbuild/linux-riscv64": "npm:0.21.5" - "@esbuild/linux-s390x": "npm:0.21.5" - "@esbuild/linux-x64": "npm:0.21.5" - "@esbuild/netbsd-x64": "npm:0.21.5" - "@esbuild/openbsd-x64": "npm:0.21.5" - "@esbuild/sunos-x64": "npm:0.21.5" - "@esbuild/win32-arm64": "npm:0.21.5" - "@esbuild/win32-ia32": "npm:0.21.5" - "@esbuild/win32-x64": "npm:0.21.5" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de - languageName: node - linkType: hard - "esbuild@npm:^0.25.11": version: 0.25.11 resolution: "esbuild@npm:0.25.11" @@ -13423,56 +12885,6 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^9.35.0": - version: 9.35.0 - resolution: "eslint@npm:9.35.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.8.0" - "@eslint-community/regexpp": "npm:^4.12.1" - "@eslint/config-array": "npm:^0.21.0" - "@eslint/config-helpers": "npm:^0.3.1" - "@eslint/core": "npm:^0.15.2" - "@eslint/eslintrc": "npm:^3.3.1" - "@eslint/js": "npm:9.35.0" - "@eslint/plugin-kit": "npm:^0.3.5" - "@humanfs/node": "npm:^0.16.6" - "@humanwhocodes/module-importer": "npm:^1.0.1" - "@humanwhocodes/retry": "npm:^0.4.2" - "@types/estree": "npm:^1.0.6" - "@types/json-schema": "npm:^7.0.15" - ajv: "npm:^6.12.4" - chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.6" - debug: "npm:^4.3.2" - escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^8.4.0" - eslint-visitor-keys: "npm:^4.2.1" - espree: "npm:^10.4.0" - esquery: "npm:^1.5.0" - esutils: "npm:^2.0.2" - fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^8.0.0" - find-up: "npm:^5.0.0" - glob-parent: "npm:^6.0.2" - ignore: "npm:^5.2.0" - imurmurhash: "npm:^0.1.4" - is-glob: "npm:^4.0.0" - json-stable-stringify-without-jsonify: "npm:^1.0.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" - natural-compare: "npm:^1.4.0" - optionator: "npm:^0.9.3" - peerDependencies: - jiti: "*" - peerDependenciesMeta: - jiti: - optional: true - bin: - eslint: bin/eslint.js - checksum: 10c0/798c527520ccf62106f8cd210bd1db1f8eb1b0e7a56feb0a8b322bf3a1e6a0bc6dc3a414542c22b1b393d58d5e3cd0252c44c023049de9067b836450503a2f03 - languageName: node - linkType: hard - "eslint@npm:^9.38.0": version: 9.38.0 resolution: "eslint@npm:9.38.0" @@ -13700,7 +13112,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^5.0.0, execa@npm:^5.1.1": +"execa@npm:^5.0.0": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -13717,6 +13129,26 @@ __metadata: languageName: node linkType: hard +"execa@npm:^9.6.0": + version: 9.6.0 + resolution: "execa@npm:9.6.0" + dependencies: + "@sindresorhus/merge-streams": "npm:^4.0.0" + cross-spawn: "npm:^7.0.6" + figures: "npm:^6.1.0" + get-stream: "npm:^9.0.0" + human-signals: "npm:^8.0.1" + is-plain-obj: "npm:^4.1.0" + is-stream: "npm:^4.0.1" + npm-run-path: "npm:^6.0.0" + pretty-ms: "npm:^9.2.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^4.0.0" + yoctocolors: "npm:^2.1.1" + checksum: 10c0/2c44a33142f77d3a6a590a3b769b49b27029a76768593bac1f26fed4dd1330e9c189ee61eba6a8c990fb77e37286c68c7445472ebf24c22b31e9ff320e73d7ac + languageName: node + linkType: hard + "exit-hook@npm:2.2.1": version: 2.2.1 resolution: "exit-hook@npm:2.2.1" @@ -13868,7 +13300,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2, fast-glob@npm:^3.3.3": version: 3.3.3 resolution: "fast-glob@npm:3.3.3" dependencies: @@ -13955,6 +13387,15 @@ __metadata: languageName: node linkType: hard +"figures@npm:^6.1.0": + version: 6.1.0 + resolution: "figures@npm:6.1.0" + dependencies: + is-unicode-supported: "npm:^2.0.0" + checksum: 10c0/9159df4264d62ef447a3931537de92f5012210cf5135c35c010df50a2169377581378149abfe1eb238bd6acbba1c0d547b1f18e0af6eee49e30363cedaffcfe4 + languageName: node + linkType: hard + "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -14057,13 +13498,13 @@ __metadata: languageName: node linkType: hard -"find-up@npm:5.0.0, find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" +"find-up@npm:8.0.0": + version: 8.0.0 + resolution: "find-up@npm:8.0.0" dependencies: - locate-path: "npm:^6.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + locate-path: "npm:^8.0.0" + unicorn-magic: "npm:^0.3.0" + checksum: 10c0/4c6d2cb92f74bd42ec7344c881a46f6455010d3993f8f55b09bb64298c0a13e11e10200147624db8938590890a15ade69c40f0172698388d0999899f0f2a70a5 languageName: node linkType: hard @@ -14086,6 +13527,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + "find-up@npm:^7.0.0": version: 7.0.0 resolution: "find-up@npm:7.0.0" @@ -14250,17 +13701,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^11.3.1": - version: 11.3.1 - resolution: "fs-extra@npm:11.3.1" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/61e5b7285b1ca72c68dfe1058b2514294a922683afac2a80aa90540f9bd85370763d675e3b408ef500077d355956fece3bd24b546790e261c3d3015967e2b2d9 - languageName: node - linkType: hard - "fs-extra@npm:^11.3.2": version: 11.3.2 resolution: "fs-extra@npm:11.3.2" @@ -14443,6 +13883,16 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^9.0.0": + version: 9.0.1 + resolution: "get-stream@npm:9.0.1" + dependencies: + "@sec-ant/readable-stream": "npm:^0.4.1" + is-stream: "npm:^4.0.1" + checksum: 10c0/d70e73857f2eea1826ac570c3a912757dcfbe8a718a033fa0c23e12ac8e7d633195b01710e0559af574cbb5af101009b42df7b6f6b29ceec8dbdf7291931b948 + languageName: node + linkType: hard + "get-symbol-description@npm:^1.1.0": version: 1.1.0 resolution: "get-symbol-description@npm:1.1.0" @@ -14454,7 +13904,7 @@ __metadata: languageName: node linkType: hard -"get-tsconfig@npm:^4.10.0, get-tsconfig@npm:^4.10.1": +"get-tsconfig@npm:^4.10.0": version: 4.10.1 resolution: "get-tsconfig@npm:4.10.1" dependencies: @@ -14640,7 +14090,21 @@ __metadata: languageName: node linkType: hard -"globby@npm:11.1.0, globby@npm:^11.0.1, globby@npm:^11.0.4, globby@npm:^11.1.0": +"globby@npm:15.0.0": + version: 15.0.0 + resolution: "globby@npm:15.0.0" + dependencies: + "@sindresorhus/merge-streams": "npm:^4.0.0" + fast-glob: "npm:^3.3.3" + ignore: "npm:^7.0.5" + path-type: "npm:^6.0.0" + slash: "npm:^5.1.0" + unicorn-magic: "npm:^0.3.0" + checksum: 10c0/e4107be0579bcdd9642b8dff86aeafeaf62b2b9dd116669ab6e02e0e0c07ada0d972c2db182dee7588b460fe8c8919ddcc6b1cc4db405ca3a2adc9d35fa6eb21 + languageName: node + linkType: hard + +"globby@npm:^11.0.1, globby@npm:^11.0.4, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -15122,6 +14586,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^8.0.1": + version: 8.0.1 + resolution: "human-signals@npm:8.0.1" + checksum: 10c0/195ac607108c56253757717242e17cd2e21b29f06c5d2dad362e86c672bf2d096e8a3bbb2601841c376c2301c4ae7cff129e87f740aa4ebff1390c163114c7c4 + languageName: node + linkType: hard + "husky@npm:^9.1.7": version: 9.1.7 resolution: "husky@npm:9.1.7" @@ -15199,7 +14670,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^7.0.0": +"ignore@npm:^7.0.0, ignore@npm:^7.0.5": version: 7.0.5 resolution: "ignore@npm:7.0.5" checksum: 10c0/ae00db89fe873064a093b8999fe4cc284b13ef2a178636211842cceb650b9c3e390d3339191acb145d81ed5379d2074840cf0c33a20bdbd6f32821f79eb4ad5d @@ -15655,6 +15126,13 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^4.1.0": + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 10c0/32130d651d71d9564dc88ba7e6fda0e91a1010a3694648e9f4f47bb6080438140696d3e3e15c741411d712e47ac9edc1a8a9de1fe76f3487b0d90be06ac9975e + languageName: node + linkType: hard + "is-potential-custom-element-name@npm:^1.0.1": version: 1.0.1 resolution: "is-potential-custom-element-name@npm:1.0.1" @@ -15727,6 +15205,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^4.0.1": + version: 4.0.1 + resolution: "is-stream@npm:4.0.1" + checksum: 10c0/2706c7f19b851327ba374687bc4a3940805e14ca496dc672b9629e744d143b1ad9c6f1b162dece81c7bfbc0f83b32b61ccc19ad2e05aad2dd7af347408f60c7f + languageName: node + linkType: hard + "is-string@npm:^1.0.7, is-string@npm:^1.1.1": version: 1.1.1 resolution: "is-string@npm:1.1.1" @@ -16711,19 +16196,19 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^27.0.0": - version: 27.0.0 - resolution: "jsdom@npm:27.0.0" +"jsdom@npm:^27.0.1": + version: 27.0.1 + resolution: "jsdom@npm:27.0.1" dependencies: - "@asamuzakjp/dom-selector": "npm:^6.5.4" - cssstyle: "npm:^5.3.0" + "@asamuzakjp/dom-selector": "npm:^6.7.2" + cssstyle: "npm:^5.3.1" data-urls: "npm:^6.0.0" - decimal.js: "npm:^10.5.0" + decimal.js: "npm:^10.6.0" html-encoding-sniffer: "npm:^4.0.0" http-proxy-agent: "npm:^7.0.2" https-proxy-agent: "npm:^7.0.6" is-potential-custom-element-name: "npm:^1.0.1" - parse5: "npm:^7.3.0" + parse5: "npm:^8.0.0" rrweb-cssom: "npm:^0.8.0" saxes: "npm:^6.0.0" symbol-tree: "npm:^3.2.4" @@ -16732,15 +16217,15 @@ __metadata: webidl-conversions: "npm:^8.0.0" whatwg-encoding: "npm:^3.1.1" whatwg-mimetype: "npm:^4.0.0" - whatwg-url: "npm:^15.0.0" - ws: "npm:^8.18.2" + whatwg-url: "npm:^15.1.0" + ws: "npm:^8.18.3" xml-name-validator: "npm:^5.0.0" peerDependencies: canvas: ^3.0.0 peerDependenciesMeta: canvas: optional: true - checksum: 10c0/cc977bd0f48f92b275166b3e64622d83c2073dc309b790ed806246365985743295a7735bc8519a186ccffd42d1f2c16a0fa52a4ea79d2b329a948756db64ade1 + checksum: 10c0/563ff3ebfd9a3dc66082cdf2427198b647993753b4c37b2d0064b5b47cf7be5154c62df10eb8122254f7b89c73ecb6fc870fa038e22ab9975b23079ee62e050e languageName: node linkType: hard @@ -17050,9 +16535,9 @@ __metadata: languageName: node linkType: hard -"lint-staged@npm:^16.2.4": - version: 16.2.4 - resolution: "lint-staged@npm:16.2.4" +"lint-staged@npm:^16.2.5": + version: 16.2.5 + resolution: "lint-staged@npm:16.2.5" dependencies: commander: "npm:^14.0.1" listr2: "npm:^9.0.4" @@ -17063,7 +16548,7 @@ __metadata: yaml: "npm:^2.8.1" bin: lint-staged: bin/lint-staged.js - checksum: 10c0/101b32040b9601938a7da6aa58195ce5a1f7a1a96998e8f700c219d9a1070e0f87ade9289d85ff8041a5f901252e834411c7e4f35538593678ed304ba2c58eba + checksum: 10c0/debe2815d9c20c675eb8063f7ad0ce4a94e828832d975b0d8ad7d464e3ee387120056e0e0deaa7bd23a4849edfdc28c9c4f32e99a40746509ba3b76fd78e175a languageName: node linkType: hard @@ -17082,8 +16567,8 @@ __metadata: linkType: hard "listr2@npm:^9.0.4": - version: 9.0.4 - resolution: "listr2@npm:9.0.4" + version: 9.0.5 + resolution: "listr2@npm:9.0.5" dependencies: cli-truncate: "npm:^5.0.0" colorette: "npm:^2.0.20" @@ -17091,7 +16576,7 @@ __metadata: log-update: "npm:^6.1.0" rfdc: "npm:^1.4.1" wrap-ansi: "npm:^9.0.0" - checksum: 10c0/69feca532f5b3317112a74bc7589ad29f98ccfbe1a582bdab556d536978b094e5841b94069e01cf59ea919684dfb68218754526ddd317b1dc829ab57f7450e45 + checksum: 10c0/46448d1ba0addc9d71aeafd05bb8e86ded9641ccad930ac302c2bd2ad71580375604743e18586fcb8f11906edf98e8e17fca75ba0759947bf275d381f68e311d languageName: node linkType: hard @@ -17214,6 +16699,15 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^8.0.0": + version: 8.0.0 + resolution: "locate-path@npm:8.0.0" + dependencies: + p-locate: "npm:^6.0.0" + checksum: 10c0/4c837878b6d1b8557c5d1c624d11d6721d77f4627c14bd84182c85cbb9ec8fc01b5b5f089e21fab17b30fc5ecc14216a3d31f754dfcc5299f1fe9f4c83482fee + languageName: node + linkType: hard + "lodash.camelcase@npm:^4.3.0": version: 4.3.0 resolution: "lodash.camelcase@npm:4.3.0" @@ -17487,7 +16981,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.0, magic-string@npm:^0.30.10, magic-string@npm:^0.30.11, magic-string@npm:^0.30.17, magic-string@npm:^0.30.18, magic-string@npm:^0.30.19, magic-string@npm:^0.30.3, magic-string@npm:^0.30.5": +"magic-string@npm:^0.30.0, magic-string@npm:^0.30.10, magic-string@npm:^0.30.11, magic-string@npm:^0.30.17, magic-string@npm:^0.30.19, magic-string@npm:^0.30.3, magic-string@npm:^0.30.5": version: 0.30.19 resolution: "magic-string@npm:0.30.19" dependencies: @@ -17600,8 +17094,8 @@ __metadata: version: 0.0.0-use.local resolution: "mcp-petstore@workspace:samples/mcp/petstore" dependencies: - "@modelcontextprotocol/sdk": "npm:1.18.0" - "@types/node": "npm:^22.18.10" + "@modelcontextprotocol/sdk": "npm:1.20.1" + "@types/node": "npm:^22.18.12" orval: "workspace:*" ts-node: "npm:^10.9.2" typescript: "npm:~5.8.3" @@ -17902,7 +17396,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.1, minimatch@npm:^9.0.3, minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": +"minimatch@npm:^9.0.1, minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": version: 9.0.5 resolution: "minimatch@npm:9.0.5" dependencies: @@ -18129,18 +17623,15 @@ __metadata: languageName: node linkType: hard -"msw@npm:^2.11.2": - version: 2.11.2 - resolution: "msw@npm:2.11.2" +"msw@npm:^2.11.6": + version: 2.11.6 + resolution: "msw@npm:2.11.6" dependencies: - "@bundled-es-modules/cookie": "npm:^2.0.1" - "@bundled-es-modules/statuses": "npm:^1.0.1" "@inquirer/confirm": "npm:^5.0.0" - "@mswjs/interceptors": "npm:^0.39.1" + "@mswjs/interceptors": "npm:^0.40.0" "@open-draft/deferred-promise": "npm:^2.2.0" - "@open-draft/until": "npm:^2.1.0" - "@types/cookie": "npm:^0.6.0" "@types/statuses": "npm:^2.0.4" + cookie: "npm:^1.0.2" graphql: "npm:^16.8.1" headers-polyfill: "npm:^4.0.2" is-node-process: "npm:^1.2.0" @@ -18148,9 +17639,11 @@ __metadata: path-to-regexp: "npm:^6.3.0" picocolors: "npm:^1.1.1" rettime: "npm:^0.7.0" + statuses: "npm:^2.0.2" strict-event-emitter: "npm:^0.5.1" tough-cookie: "npm:^6.0.0" type-fest: "npm:^4.26.1" + until-async: "npm:^3.0.2" yargs: "npm:^17.7.2" peerDependencies: typescript: ">= 4.8.x" @@ -18159,7 +17652,7 @@ __metadata: optional: true bin: msw: cli/index.js - checksum: 10c0/56f9549fbba4a7fdf638c79484fee637bcd85696450e3192f7998506c318a1057a84ceed4596c8af87d544d5d4cc218d10d65c32cea2d11cac5b26f601030bc0 + checksum: 10c0/a19e9af0ca880bddbdfa7a852c40d7b8db8e04cd1d745575346cef5ee313acd65cadd0a1c48c6945b020235048168dce8e0ad856c3e14a0c1bb4b26618c5fb3c languageName: node linkType: hard @@ -18289,13 +17782,13 @@ __metadata: version: 0.0.0-use.local resolution: "next-app-with-fetch@workspace:samples/next-app-with-fetch" dependencies: - "@faker-js/faker": "npm:^9.9.0" - "@types/node": "npm:^22.18.10" + "@faker-js/faker": "npm:^10.1.0" + "@types/node": "npm:^22.18.12" "@types/react": "npm:^18.3.24" "@types/react-dom": "npm:^18.3.7" - eslint: "npm:^9.35.0" + eslint: "npm:^9.38.0" eslint-config-next: "npm:14.2.32" - msw: "npm:^2.11.2" + msw: "npm:^2.11.6" next: "npm:14.2.32" orval: "workspace:*" postcss: "npm:8.5.6" @@ -18313,8 +17806,8 @@ __metadata: version: 0.0.0-use.local resolution: "next-app@workspace:samples/hono/hono-with-fetch-client/next-app" dependencies: - "@faker-js/faker": "npm:^9.9.0" - "@types/node": "npm:^22.18.10" + "@faker-js/faker": "npm:^10.1.0" + "@types/node": "npm:^22.18.12" "@types/react": "npm:^18.3.24" "@types/react-dom": "npm:^18.3.7" next: "npm:^15.5.3" @@ -18766,6 +18259,16 @@ __metadata: languageName: node linkType: hard +"npm-run-path@npm:^6.0.0": + version: 6.0.0 + resolution: "npm-run-path@npm:6.0.0" + dependencies: + path-key: "npm:^4.0.0" + unicorn-magic: "npm:^0.3.0" + checksum: 10c0/b223c8a0dcd608abf95363ea5c3c0ccc3cd877daf0102eaf1b0f2390d6858d8337fbb7c443af2403b067a7d2c116d10691ecd22ab3c5273c44da1ff8d07753bd + languageName: node + linkType: hard + "nth-check@npm:^1.0.2": version: 1.0.2 resolution: "nth-check@npm:1.0.2" @@ -19112,16 +18615,16 @@ __metadata: dependencies: "@angular/common": "npm:^20.3.0" "@angular/core": "npm:^20.3.0" - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" "@hono/zod-validator": "npm:^0.7.4" - "@modelcontextprotocol/sdk": "npm:1.18.0" + "@modelcontextprotocol/sdk": "npm:1.20.1" "@tanstack/react-query": "npm:~5.62.16" "@tanstack/svelte-query": "npm:^4.41.0" - "@tanstack/vue-query": "npm:^4.41.0" + "@tanstack/vue-query": "npm:^5.90.5" "@types/react": "npm:18.3.24" axios: "npm:^1.12.2" hono: "npm:^4.10.2" - msw: "npm:^2.11.2" + msw: "npm:^2.11.6" npm-run-all: "npm:^4.1.5" openapi3-ts: "npm:^4.5.0" orval: "workspace:*" @@ -19131,7 +18634,7 @@ __metadata: svelte: "npm:^5.39.7" swr: "npm:^2.3.6" typescript: "npm:5.8.3" - vue: "npm:^3.5.21" + vue: "npm:^3.5.22" zod: "npm:^3.25.76" languageName: unknown linkType: soft @@ -19143,7 +18646,7 @@ __metadata: "@commitlint/cli": "npm:^20.1.0" "@commitlint/config-conventional": "npm:^20.0.0" "@eslint/js": "npm:^9.38.0" - "@types/node": "npm:^22.18.11" + "@types/node": "npm:^22.18.12" esbuild-plugin-alias: "npm:^0.2.1" eslint: "npm:^9.38.0" eslint-config-prettier: "npm:^10.1.8" @@ -19153,13 +18656,12 @@ __metadata: eslint-plugin-unicorn: "npm:^61.0.2" globals: "npm:^16.4.0" husky: "npm:^9.1.7" - lint-staged: "npm:^16.2.4" - npm-run-all: "npm:^4.1.5" + lint-staged: "npm:^16.2.5" prettier: "npm:3.6.2" rimraf: "npm:^6.0.1" turbo: "npm:^2.5.8" typescript: "npm:^5.9.3" - typescript-eslint: "npm:^8.46.1" + typescript-eslint: "npm:^8.46.2" vitest: "npm:^3.2.4" languageName: unknown linkType: soft @@ -19183,13 +18685,13 @@ __metadata: "@types/fs-extra": "npm:^11.0.4" "@types/js-yaml": "npm:^4.0.9" "@types/lodash.uniq": "npm:^4.5.9" - chalk: "npm:^4.1.2" + chalk: "npm:^5.6.2" chokidar: "npm:^4.0.3" commander: "npm:^14.0.1" enquirer: "npm:^2.4.1" eslint: "npm:^9.38.0" - execa: "npm:^5.1.1" - find-up: "npm:5.0.0" + execa: "npm:^9.6.0" + find-up: "npm:8.0.0" fs-extra: "npm:^11.3.2" js-yaml: "npm:4.1.0" lodash.uniq: "npm:^4.5.0" @@ -19197,8 +18699,8 @@ __metadata: openapi3-ts: "npm:4.5.0" rimraf: "npm:^6.0.1" string-argv: "npm:^0.3.2" - tsconfck: "npm:^2.1.2" - tsdown: "npm:^0.15.8" + tsconfck: "npm:^3.1.6" + tsdown: "npm:^0.15.9" typedoc: "npm:^0.28.14" typedoc-plugin-coverage: "npm:^4.0.2" typedoc-plugin-markdown: "npm:^4.9.0" @@ -19389,6 +18891,13 @@ __metadata: languageName: node linkType: hard +"parse-ms@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-ms@npm:4.0.0" + checksum: 10c0/a7900f4f1ebac24cbf5e9708c16fb2fd482517fad353aecd7aefb8c2ba2f85ce017913ccb8925d231770404780df46244ea6fec598b3bde6490882358b4d2d16 + languageName: node + linkType: hard + "parse5-html-rewriting-stream@npm:8.0.0": version: 8.0.0 resolution: "parse5-html-rewriting-stream@npm:8.0.0" @@ -19416,15 +18925,6 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^7.3.0": - version: 7.3.0 - resolution: "parse5@npm:7.3.0" - dependencies: - entities: "npm:^6.0.0" - checksum: 10c0/7fd2e4e247e85241d6f2a464d0085eed599a26d7b0a5233790c49f53473232eb85350e8133344d9b3fd58b89339e7ad7270fe1f89d28abe50674ec97b87f80b5 - languageName: node - linkType: hard - "parse5@npm:^8.0.0": version: 8.0.0 resolution: "parse5@npm:8.0.0" @@ -19500,6 +19000,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 10c0/794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 + languageName: node + linkType: hard + "path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" @@ -19564,6 +19071,13 @@ __metadata: languageName: node linkType: hard +"path-type@npm:^6.0.0": + version: 6.0.0 + resolution: "path-type@npm:6.0.0" + checksum: 10c0/55baa8b1187d6dc683d5a9cfcc866168d6adff58e5db91126795376d818eee46391e00b2a4d53e44d844c7524a7d96aa68cc68f4f3e500d3d069a39e6535481c + languageName: node + linkType: hard + "pathe@npm:^2.0.3": version: 2.0.3 resolution: "pathe@npm:2.0.3" @@ -20567,7 +20081,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.5.6, postcss@npm:^8.3.5, postcss@npm:^8.4.27, postcss@npm:^8.4.33, postcss@npm:^8.4.4, postcss@npm:^8.4.43, postcss@npm:^8.4.47, postcss@npm:^8.4.49, postcss@npm:^8.5.6": +"postcss@npm:8.5.6, postcss@npm:^8.3.5, postcss@npm:^8.4.33, postcss@npm:^8.4.4, postcss@npm:^8.4.47, postcss@npm:^8.4.49, postcss@npm:^8.5.6": version: 8.5.6 resolution: "postcss@npm:8.5.6" dependencies: @@ -20671,6 +20185,15 @@ __metadata: languageName: node linkType: hard +"pretty-ms@npm:^9.2.0": + version: 9.3.0 + resolution: "pretty-ms@npm:9.3.0" + dependencies: + parse-ms: "npm:^4.0.0" + checksum: 10c0/555ea39a1de48a30601938aedb76d682871d33b6dee015281c37108921514b11e1792928b1648c2e5589acc73c8ef0fb5e585fb4c718e340a28b86799e90fb34 + languageName: node + linkType: hard + "printable-characters@npm:^1.0.42": version: 1.0.42 resolution: "printable-characters@npm:1.0.42" @@ -20899,12 +20422,12 @@ __metadata: version: 0.0.0-use.local resolution: "react-app@workspace:samples/react-app" dependencies: - "@faker-js/faker": "npm:^9.9.0" - "@types/node": "npm:^22.18.10" + "@faker-js/faker": "npm:^10.1.0" + "@types/node": "npm:^22.18.12" "@types/react": "npm:^18.3.24" "@types/react-dom": "npm:^18.3.7" axios: "npm:^1.12.2" - msw: "npm:^2.11.2" + msw: "npm:^2.11.6" orval: "workspace:*" react: "npm:^18.3.1" react-dom: "npm:^18.3.1" @@ -20993,14 +20516,14 @@ __metadata: version: 0.0.0-use.local resolution: "react-query-basic@workspace:samples/react-query/basic" dependencies: - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" "@tanstack/react-query": "npm:~5.62.16" - "@types/node": "npm:^22.18.10" + "@types/node": "npm:^22.18.12" "@types/react": "npm:^18.3.24" "@types/react-dom": "npm:^18.3.7" ajv: "npm:^8.17.1" axios: "npm:^1.12.2" - msw: "npm:^2.11.2" + msw: "npm:^2.11.6" orval: "workspace:*" react: "npm:^18.3.1" react-dom: "npm:^18.3.1" @@ -21016,14 +20539,14 @@ __metadata: version: 0.0.0-use.local resolution: "react-query-custom-client@workspace:samples/react-query/custom-client" dependencies: - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" "@types/faker": "npm:^5.5.9" - "@types/node": "npm:^22.18.10" + "@types/node": "npm:^22.18.12" "@types/react": "npm:^18.3.24" "@types/react-dom": "npm:^18.3.7" axios: "npm:^1.12.2" faker: "npm:^5.5.3" - msw: "npm:^2.11.2" + msw: "npm:^2.11.6" orval: "workspace:*" react: "npm:^18.3.1" react-dom: "npm:^18.3.1" @@ -21040,21 +20563,21 @@ __metadata: version: 0.0.0-use.local resolution: "react-query-custom-fetch@workspace:samples/react-query/custom-fetch" dependencies: - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" "@tanstack/react-query": "npm:~5.62.16" "@types/react": "npm:^18.3.24" "@types/react-dom": "npm:^18.3.7" - "@typescript-eslint/eslint-plugin": "npm:^8.43.0" - "@typescript-eslint/parser": "npm:^8.43.0" - "@vitejs/plugin-react": "npm:^4.7.0" - eslint: "npm:^9.35.0" + "@typescript-eslint/eslint-plugin": "npm:^8.46.2" + "@typescript-eslint/parser": "npm:^8.46.2" + "@vitejs/plugin-react": "npm:^5.0.4" + eslint: "npm:^9.38.0" eslint-plugin-react-hooks: "npm:^4.6.2" eslint-plugin-react-refresh: "npm:^0.4.20" orval: "workspace:*" react: "npm:^18.3.1" react-dom: "npm:^18.3.1" typescript: "npm:~5.8.3" - vite: "npm:^5.4.20" + vite: "npm:^7.1.11" languageName: unknown linkType: soft @@ -21062,7 +20585,7 @@ __metadata: version: 0.0.0-use.local resolution: "react-query-form-data-mutator@workspace:samples/react-query/form-data-mutator" dependencies: - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" axios: "npm:^1.12.2" orval: "workspace:*" react: "npm:^18.3.1" @@ -21074,7 +20597,7 @@ __metadata: version: 0.0.0-use.local resolution: "react-query-form-data@workspace:samples/react-query/form-data" dependencies: - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" axios: "npm:^1.12.2" orval: "workspace:*" react: "npm:^18.3.1" @@ -21086,7 +20609,7 @@ __metadata: version: 0.0.0-use.local resolution: "react-query-form-url-encoded-mutator@workspace:samples/react-query/form-url-encoded-mutator" dependencies: - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" axios: "npm:^1.12.2" orval: "workspace:*" react: "npm:^18.3.1" @@ -21098,7 +20621,7 @@ __metadata: version: 0.0.0-use.local resolution: "react-query-form-url-encoded@workspace:samples/react-query/form-url-encoded" dependencies: - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" axios: "npm:^1.12.2" orval: "workspace:*" react: "npm:^18.3.1" @@ -21110,7 +20633,7 @@ __metadata: version: 0.0.0-use.local resolution: "react-query-hook-mutator@workspace:samples/react-query/hook-mutator" dependencies: - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" axios: "npm:^1.12.2" orval: "workspace:*" react: "npm:^18.3.1" @@ -21714,38 +21237,6 @@ __metadata: languageName: node linkType: hard -"rolldown-plugin-dts@npm:^0.16.5": - version: 0.16.5 - resolution: "rolldown-plugin-dts@npm:0.16.5" - dependencies: - "@babel/generator": "npm:^7.28.3" - "@babel/parser": "npm:^7.28.4" - "@babel/types": "npm:^7.28.4" - ast-kit: "npm:^2.1.2" - birpc: "npm:^2.5.0" - debug: "npm:^4.4.1" - dts-resolver: "npm:^2.1.2" - get-tsconfig: "npm:^4.10.1" - magic-string: "npm:^0.30.19" - peerDependencies: - "@ts-macro/tsc": ^0.3.6 - "@typescript/native-preview": ">=7.0.0-dev.20250601.1" - rolldown: ^1.0.0-beta.9 - typescript: ^5.0.0 - vue-tsc: ~3.0.3 - peerDependenciesMeta: - "@ts-macro/tsc": - optional: true - "@typescript/native-preview": - optional: true - typescript: - optional: true - vue-tsc: - optional: true - checksum: 10c0/f15ba5ef752cb56db9289d71d62f371a06a04159d266efd7d19f7ff4a961730f4a2367f4f80d59322fbf6d2f3d5c7b36a2f3412c36e2cc49101976f5720939c8 - languageName: node - linkType: hard - "rolldown@npm:1.0.0-beta.32": version: 1.0.0-beta.32 resolution: "rolldown@npm:1.0.0-beta.32" @@ -21803,27 +21294,26 @@ __metadata: languageName: node linkType: hard -"rolldown@npm:latest": - version: 1.0.0-beta.38 - resolution: "rolldown@npm:1.0.0-beta.38" - dependencies: - "@oxc-project/types": "npm:=0.89.0" - "@rolldown/binding-android-arm64": "npm:1.0.0-beta.38" - "@rolldown/binding-darwin-arm64": "npm:1.0.0-beta.38" - "@rolldown/binding-darwin-x64": "npm:1.0.0-beta.38" - "@rolldown/binding-freebsd-x64": "npm:1.0.0-beta.38" - "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-beta.38" - "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-beta.38" - "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-beta.38" - "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-beta.38" - "@rolldown/binding-linux-x64-musl": "npm:1.0.0-beta.38" - "@rolldown/binding-openharmony-arm64": "npm:1.0.0-beta.38" - "@rolldown/binding-wasm32-wasi": "npm:1.0.0-beta.38" - "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-beta.38" - "@rolldown/binding-win32-ia32-msvc": "npm:1.0.0-beta.38" - "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-beta.38" - "@rolldown/pluginutils": "npm:1.0.0-beta.38" - ansis: "npm:^4.0.0" +"rolldown@npm:1.0.0-beta.44": + version: 1.0.0-beta.44 + resolution: "rolldown@npm:1.0.0-beta.44" + dependencies: + "@oxc-project/types": "npm:=0.95.0" + "@rolldown/binding-android-arm64": "npm:1.0.0-beta.44" + "@rolldown/binding-darwin-arm64": "npm:1.0.0-beta.44" + "@rolldown/binding-darwin-x64": "npm:1.0.0-beta.44" + "@rolldown/binding-freebsd-x64": "npm:1.0.0-beta.44" + "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-beta.44" + "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-beta.44" + "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-beta.44" + "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-beta.44" + "@rolldown/binding-linux-x64-musl": "npm:1.0.0-beta.44" + "@rolldown/binding-openharmony-arm64": "npm:1.0.0-beta.44" + "@rolldown/binding-wasm32-wasi": "npm:1.0.0-beta.44" + "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-beta.44" + "@rolldown/binding-win32-ia32-msvc": "npm:1.0.0-beta.44" + "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-beta.44" + "@rolldown/pluginutils": "npm:1.0.0-beta.44" dependenciesMeta: "@rolldown/binding-android-arm64": optional: true @@ -21855,7 +21345,7 @@ __metadata: optional: true bin: rolldown: bin/cli.mjs - checksum: 10c0/5c77fe444585d9d06c2383dbb0480e9ef4c8c565c8f87119f8ee8d7f9e63df749eb24f3342c66273510635fd32aedda7cbad94f4c40c9ffed2e9e76097c0961e + checksum: 10c0/e8a8e50856cbde6333d6ec813955dd40c0b7b146066cc5c50db8c5b094fcc6a7db206b47289f382aceabb08b9966a439ff1e5cfbfa068e90e50a8dd43f179312 languageName: node linkType: hard @@ -21916,21 +21406,7 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^3.27.1": - version: 3.29.5 - resolution: "rollup@npm:3.29.5" - dependencies: - fsevents: "npm:~2.3.2" - dependenciesMeta: - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10c0/a1fa26f21f0d6cf93b6d05ea284ad5854905b585f28a14c27d439b0f9b859cba13ea25f376303d86770e59b4686bedc52b4706e57442514f0414c6fd3c5b8e71 - languageName: node - linkType: hard - -"rollup@npm:^4.20.0, rollup@npm:^4.43.0": +"rollup@npm:^4.43.0": version: 4.50.1 resolution: "rollup@npm:4.50.1" dependencies: @@ -22840,6 +22316,13 @@ __metadata: languageName: node linkType: hard +"slash@npm:^5.1.0": + version: 5.1.0 + resolution: "slash@npm:5.1.0" + checksum: 10c0/eb48b815caf0bdc390d0519d41b9e0556a14380f6799c72ba35caf03544d501d18befdeeef074bc9c052acf69654bc9e0d79d7f1de0866284137a40805299eb3 + languageName: node + linkType: hard + "slice-ansi@npm:^5.0.0": version: 5.0.0 resolution: "slice-ansi@npm:5.0.0" @@ -23134,7 +22617,7 @@ __metadata: languageName: node linkType: hard -"statuses@npm:^2.0.1": +"statuses@npm:^2.0.1, statuses@npm:^2.0.2": version: 2.0.2 resolution: "statuses@npm:2.0.2" checksum: 10c0/a9947d98ad60d01f6b26727570f3bcceb6c8fa789da64fe6889908fe2e294d57503b14bf2b5af7605c2d36647259e856635cd4c49eab41667658ec9d0080ec3f @@ -23430,6 +22913,13 @@ __metadata: languageName: node linkType: hard +"strip-final-newline@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-final-newline@npm:4.0.0" + checksum: 10c0/b0cf2b62d597a1b0e3ebc42b88767f0a0d45601f89fd379a928a1812c8779440c81abba708082c946445af1d6b62d5f16e2a7cf4f30d9d6587b89425fae801ff + languageName: node + linkType: hard + "strip-indent@npm:^3.0.0": version: 3.0.0 resolution: "strip-indent@npm:3.0.0" @@ -23663,22 +23153,22 @@ __metadata: version: 0.0.0-use.local resolution: "svelte-query-basic@workspace:samples/svelte-query/basic" dependencies: - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" "@sveltejs/adapter-auto": "npm:^2.1.1" "@sveltejs/kit": "npm:^1.30.4" "@tanstack/svelte-query": "npm:^4.41.0" - "@typescript-eslint/eslint-plugin": "npm:^8.43.0" - "@typescript-eslint/parser": "npm:^8.43.0" + "@typescript-eslint/eslint-plugin": "npm:^8.46.2" + "@typescript-eslint/parser": "npm:^8.46.2" axios: "npm:^1.12.2" - eslint: "npm:^9.35.0" + eslint: "npm:^9.38.0" eslint-plugin-svelte3: "npm:^4.0.0" - msw: "npm:^2.11.2" + msw: "npm:^2.11.6" orval: "workspace:*" svelte: "npm:^5.39.7" svelte-check: "npm:^3.8.6" tslib: "npm:^2.8.1" typescript: "npm:~5.8.3" - vite: "npm:^4.5.14" + vite: "npm:^7.1.11" dependenciesMeta: msw: built: true @@ -23689,7 +23179,7 @@ __metadata: version: 0.0.0-use.local resolution: "svelte-query-custom-fetch@workspace:samples/svelte-query/custom-fetch" dependencies: - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" "@sveltejs/vite-plugin-svelte": "npm:^3.1.2" "@sveltestack/svelte-query": "npm:^1.6.0" "@tanstack/svelte-query": "npm:^4.41.0" @@ -23699,7 +23189,7 @@ __metadata: svelte-check: "npm:^3.8.6" tslib: "npm:^2.8.1" typescript: "npm:~5.8.3" - vite: "npm:^5.4.20" + vite: "npm:^7.1.11" languageName: unknown linkType: soft @@ -23799,12 +23289,12 @@ __metadata: version: 0.0.0-use.local resolution: "swr-basic@workspace:samples/react-app-with-swr/basic" dependencies: - "@faker-js/faker": "npm:^9.9.0" - "@types/node": "npm:^22.18.10" + "@faker-js/faker": "npm:^10.1.0" + "@types/node": "npm:^22.18.12" "@types/react": "npm:^18.3.24" "@types/react-dom": "npm:^18.3.7" axios: "npm:^1.12.2" - msw: "npm:^2.11.2" + msw: "npm:^2.11.6" orval: "workspace:*" react: "npm:^18.3.1" react-dom: "npm:^18.3.1" @@ -23821,13 +23311,13 @@ __metadata: version: 0.0.0-use.local resolution: "swr-with-fetch-client@workspace:samples/react-app-with-swr/fetch-client" dependencies: - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" "@types/react": "npm:^18.3.24" "@types/react-dom": "npm:^18.3.7" - "@typescript-eslint/eslint-plugin": "npm:^8.43.0" - "@typescript-eslint/parser": "npm:^8.43.0" - "@vitejs/plugin-react": "npm:^4.7.0" - eslint: "npm:^9.35.0" + "@typescript-eslint/eslint-plugin": "npm:^8.46.2" + "@typescript-eslint/parser": "npm:^8.46.2" + "@vitejs/plugin-react": "npm:^5.0.4" + eslint: "npm:^9.38.0" eslint-plugin-react-hooks: "npm:^4.6.2" eslint-plugin-react-refresh: "npm:^0.4.20" orval: "workspace:*" @@ -23835,7 +23325,7 @@ __metadata: react-dom: "npm:^18.3.1" swr: "npm:^2.3.6" typescript: "npm:~5.8.3" - vite: "npm:^5.4.20" + vite: "npm:^7.1.11" languageName: unknown linkType: soft @@ -23843,13 +23333,13 @@ __metadata: version: 0.0.0-use.local resolution: "swr-with-zod@workspace:samples/swr-with-zod" dependencies: - "@faker-js/faker": "npm:^9.9.0" + "@faker-js/faker": "npm:^10.1.0" "@types/react": "npm:^18.3.24" "@types/react-dom": "npm:^18.3.7" - "@typescript-eslint/eslint-plugin": "npm:^8.43.0" - "@typescript-eslint/parser": "npm:^8.43.0" - "@vitejs/plugin-react": "npm:^4.7.0" - eslint: "npm:^9.35.0" + "@typescript-eslint/eslint-plugin": "npm:^8.46.2" + "@typescript-eslint/parser": "npm:^8.46.2" + "@vitejs/plugin-react": "npm:^5.0.4" + eslint: "npm:^9.38.0" eslint-plugin-react-hooks: "npm:^4.6.2" eslint-plugin-react-refresh: "npm:^0.4.20" orval: "workspace:*" @@ -23857,7 +23347,7 @@ __metadata: react-dom: "npm:^18.3.1" swr: "npm:^2.3.6" typescript: "npm:~5.8.3" - vite: "npm:^5.4.20" + vite: "npm:^7.1.11" zod: "npm:^3.25.76" languageName: unknown linkType: soft @@ -24346,17 +23836,17 @@ __metadata: languageName: node linkType: hard -"tsconfck@npm:^2.1.2": - version: 2.1.2 - resolution: "tsconfck@npm:2.1.2" +"tsconfck@npm:^3.1.6": + version: 3.1.6 + resolution: "tsconfck@npm:3.1.6" peerDependencies: - typescript: ^4.3.5 || ^5.0.0 + typescript: ^5.0.0 peerDependenciesMeta: typescript: optional: true bin: tsconfck: bin/tsconfck.js - checksum: 10c0/6efc9cbbccdbbcafc86a744a1804fcd8438097c2beaac370444cc413fa1582a019a74002a111e3005b89ca0b0169ace730161864628fc751754e29b335c3c79f + checksum: 10c0/269c3c513540be44844117bb9b9258fe6f8aeab026d32aeebf458d5299125f330711429dbb556dbf125a0bc25f4a81e6c24ac96de2740badd295c3fb400f66c4 languageName: node linkType: hard @@ -24389,50 +23879,9 @@ __metadata: languageName: node linkType: hard -"tsdown@npm:^0.15.2": - version: 0.15.2 - resolution: "tsdown@npm:0.15.2" - dependencies: - ansis: "npm:^4.1.0" - cac: "npm:^6.7.14" - chokidar: "npm:^4.0.3" - debug: "npm:^4.4.3" - diff: "npm:^8.0.2" - empathic: "npm:^2.0.0" - hookable: "npm:^5.5.3" - rolldown: "npm:latest" - rolldown-plugin-dts: "npm:^0.16.5" - semver: "npm:^7.7.2" - tinyexec: "npm:^1.0.1" - tinyglobby: "npm:^0.2.15" - tree-kill: "npm:^1.2.2" - unconfig: "npm:^7.3.3" - peerDependencies: - "@arethetypeswrong/core": ^0.18.1 - publint: ^0.3.0 - typescript: ^5.0.0 - unplugin-lightningcss: ^0.4.0 - unplugin-unused: ^0.5.0 - peerDependenciesMeta: - "@arethetypeswrong/core": - optional: true - publint: - optional: true - typescript: - optional: true - unplugin-lightningcss: - optional: true - unplugin-unused: - optional: true - bin: - tsdown: dist/run.mjs - checksum: 10c0/bce0343d24a2495003c2dc9849de95c8adbfcb6873ba9ec422bc7f408f6de7f1e6736fcca7044f41c87e588428c53d4d44ec2d7e350e85587b5786e4e1a7b0d1 - languageName: node - linkType: hard - -"tsdown@npm:^0.15.8": - version: 0.15.8 - resolution: "tsdown@npm:0.15.8" +"tsdown@npm:^0.15.9": + version: 0.15.9 + resolution: "tsdown@npm:0.15.9" dependencies: ansis: "npm:^4.2.0" cac: "npm:^6.7.14" @@ -24441,7 +23890,7 @@ __metadata: diff: "npm:^8.0.2" empathic: "npm:^2.0.0" hookable: "npm:^5.5.3" - rolldown: "npm:latest" + rolldown: "npm:1.0.0-beta.44" rolldown-plugin-dts: "npm:^0.16.12" semver: "npm:^7.7.3" tinyexec: "npm:^1.0.1" @@ -24467,7 +23916,7 @@ __metadata: optional: true bin: tsdown: dist/run.mjs - checksum: 10c0/ca810d51ff05ec4cd0e2bb3a046687fa11aa2b3005de29796549ea23deeeb7434d767b26b69b867b502f1e2fcebcc5e2e2ebd52d22bc5f594ae55dd251e8a264 + checksum: 10c0/faa19fe6aa51f370dccfb56f127e14b4648bfa4f64ed08d36ce5ee6c81e19459185be431bd090140a1efff1cdfa05f18f4607aa4cb99b33ce99c75ec61075453 languageName: node linkType: hard @@ -24770,18 +24219,18 @@ __metadata: languageName: node linkType: hard -"typescript-eslint@npm:^8.46.1": - version: 8.46.1 - resolution: "typescript-eslint@npm:8.46.1" +"typescript-eslint@npm:^8.46.2": + version: 8.46.2 + resolution: "typescript-eslint@npm:8.46.2" dependencies: - "@typescript-eslint/eslint-plugin": "npm:8.46.1" - "@typescript-eslint/parser": "npm:8.46.1" - "@typescript-eslint/typescript-estree": "npm:8.46.1" - "@typescript-eslint/utils": "npm:8.46.1" + "@typescript-eslint/eslint-plugin": "npm:8.46.2" + "@typescript-eslint/parser": "npm:8.46.2" + "@typescript-eslint/typescript-estree": "npm:8.46.2" + "@typescript-eslint/utils": "npm:8.46.2" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/002934d83eec1afcf94e9785399740efe39f1fe6538e469a01ed36c004303af8736e3aea9100c8733798fcb0d1e0301177bd70aa29e6d05d8cefbd8e18887ea6 + checksum: 10c0/9c1bef1887ee984e63cbf4f4321f22ed232b192597400b74220aaecd42235bccc3c7786e002d283f81e1a0812a1c6d83ea5860bffa5e87d119204ecb9db0296a languageName: node linkType: hard @@ -24795,7 +24244,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.0.3, typescript@npm:^5.9.2": +"typescript@npm:^5.0.3": version: 5.9.2 resolution: "typescript@npm:5.9.2" bin: @@ -24805,7 +24254,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.9.3": +"typescript@npm:^5.9.3, typescript@npm:~5.9.3": version: 5.9.3 resolution: "typescript@npm:5.9.3" bin: @@ -24825,7 +24274,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.0.3#optional!builtin, typescript@patch:typescript@npm%3A^5.9.2#optional!builtin": +"typescript@patch:typescript@npm%3A^5.0.3#optional!builtin": version: 5.9.2 resolution: "typescript@patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5" bin: @@ -24835,7 +24284,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": +"typescript@patch:typescript@npm%3A^5.9.3#optional!builtin, typescript@patch:typescript@npm%3A~5.9.3#optional!builtin": version: 5.9.3 resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" bin: @@ -24964,6 +24413,13 @@ __metadata: languageName: node linkType: hard +"unicorn-magic@npm:^0.3.0": + version: 0.3.0 + resolution: "unicorn-magic@npm:0.3.0" + checksum: 10c0/0a32a997d6c15f1c2a077a15b1c4ca6f268d574cf5b8975e778bb98e6f8db4ef4e86dfcae4e158cd4c7e38fb4dd383b93b13eefddc7f178dea13d3ac8a603271 + languageName: node + linkType: hard + "unique-filename@npm:^4.0.0": version: 4.0.0 resolution: "unique-filename@npm:4.0.0" @@ -25096,6 +24552,13 @@ __metadata: languageName: node linkType: hard +"until-async@npm:^3.0.2": + version: 3.0.2 + resolution: "until-async@npm:3.0.2" + checksum: 10c0/61c8b03895dbe18fe3d90316d0a1894e0c131ea4b1673f6ce78eed993d0bb81bbf4b7adf8477e9ff7725782a76767eed9d077561cfc9f89b4a1ebe61f7c9828e + languageName: node + linkType: hard + "upath@npm:^1.2.0": version: 1.2.0 resolution: "upath@npm:1.2.0" @@ -25320,69 +24783,37 @@ __metadata: languageName: node linkType: hard -"vite@npm:^4.5.14": - version: 4.5.14 - resolution: "vite@npm:4.5.14" - dependencies: - esbuild: "npm:^0.18.10" - fsevents: "npm:~2.3.2" - postcss: "npm:^8.4.27" - rollup: "npm:^3.27.1" - peerDependencies: - "@types/node": ">= 14" - less: "*" - lightningcss: ^1.21.0 - sass: "*" - stylus: "*" - sugarss: "*" - terser: ^5.4.0 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - bin: - vite: bin/vite.js - checksum: 10c0/58fdbb7e14650f78ebe290bb67f873900b914cee906c7367ad1c9786fb323ec60c3f085447341953b5e411a17703f86ed33723b31f98778d94f0ead06370b306 - languageName: node - linkType: hard - -"vite@npm:^5.4.20": - version: 5.4.20 - resolution: "vite@npm:5.4.20" +"vite@npm:^7.1.11": + version: 7.1.11 + resolution: "vite@npm:7.1.11" dependencies: - esbuild: "npm:^0.21.3" + esbuild: "npm:^0.25.0" + fdir: "npm:^6.5.0" fsevents: "npm:~2.3.3" - postcss: "npm:^8.4.43" - rollup: "npm:^4.20.0" + picomatch: "npm:^4.0.3" + postcss: "npm:^8.5.6" + rollup: "npm:^4.43.0" + tinyglobby: "npm:^0.2.15" peerDependencies: - "@types/node": ^18.0.0 || >=20.0.0 - less: "*" + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" - terser: ^5.4.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 dependenciesMeta: fsevents: optional: true peerDependenciesMeta: "@types/node": optional: true + jiti: + optional: true less: optional: true lightningcss: @@ -25397,9 +24828,13 @@ __metadata: optional: true terser: optional: true + tsx: + optional: true + yaml: + optional: true bin: vite: bin/vite.js - checksum: 10c0/391a1fdd7e05445d60aa3b15d6c1cffcdd92c5d154da375bf06b9cd5633c2387ebee0e8f2fceed3226a63dff36c8ef18fb497662dde8c135133c46670996c7a1 + checksum: 10c0/c4aa7f47b1fb07f734ed6f4f605d73e5acf7ff9754d75b4adbfbdddf0e520413019834620c1f7b4a207bce7e1d20a2636c584db2b1b17f5a3ba2cd23d47e50ab languageName: node linkType: hard @@ -25485,22 +24920,6 @@ __metadata: languageName: node linkType: hard -"vue-demi@npm:^0.13.11": - version: 0.13.11 - resolution: "vue-demi@npm:0.13.11" - peerDependencies: - "@vue/composition-api": ^1.0.0-rc.1 - vue: ^3.0.0-0 || ^2.6.0 - peerDependenciesMeta: - "@vue/composition-api": - optional: true - bin: - vue-demi-fix: bin/vue-demi-fix.js - vue-demi-switch: bin/vue-demi-switch.js - checksum: 10c0/8f1a38e41e3dd0a4821c87231c664dcc00e6dbf5eecd3de397b7ddb6ae01f173aed5385c55a3c3239be36145742f1a5be407662fc67f9c4515ea691dd0ac93e1 - languageName: node - linkType: hard - "vue-demi@npm:^0.14.10": version: 0.14.10 resolution: "vue-demi@npm:0.14.10" @@ -25521,21 +24940,21 @@ __metadata: version: 0.0.0-use.local resolution: "vue-query-basic@workspace:samples/vue-query/vue-query-basic" dependencies: - "@faker-js/faker": "npm:^9.9.0" - "@tanstack/vue-query": "npm:^5.87.4" + "@faker-js/faker": "npm:^10.1.0" + "@tanstack/vue-query": "npm:^5.90.5" "@testing-library/vue": "npm:^8.1.0" - "@vitejs/plugin-vue": "npm:^5.2.4" - "@vue/compiler-sfc": "npm:^3.5.21" + "@vitejs/plugin-vue": "npm:^6.0.1" + "@vue/compiler-sfc": "npm:^3.5.22" axios: "npm:^1.12.2" - jsdom: "npm:^27.0.0" - msw: "npm:^2.11.2" + jsdom: "npm:^27.0.1" + msw: "npm:^2.11.6" orval: "workspace:*" tsd: "npm:^0.33.0" - typescript: "npm:~5.8.3" - vite: "npm:^5.4.20" + typescript: "npm:~5.9.3" + vite: "npm:^7.1.11" vitest: "npm:^3.2.4" - vue: "npm:^3.5.21" - vue-tsc: "npm:^2.2.12" + vue: "npm:^3.5.22" + vue-tsc: "npm:^3.1.1" dependenciesMeta: msw: built: true @@ -25546,46 +24965,46 @@ __metadata: version: 0.0.0-use.local resolution: "vue-query-custom-fetch@workspace:samples/vue-query/custom-fetch" dependencies: - "@faker-js/faker": "npm:^9.9.0" - "@tanstack/vue-query": "npm:^5.87.4" - "@vitejs/plugin-vue": "npm:^5.2.4" + "@faker-js/faker": "npm:^10.1.0" + "@tanstack/vue-query": "npm:^5.90.5" + "@vitejs/plugin-vue": "npm:^6.0.1" orval: "workspace:*" - typescript: "npm:~5.8.3" - vite: "npm:^5.4.20" - vue: "npm:^3.5.21" - vue-tsc: "npm:^2.2.12" + typescript: "npm:~5.9.3" + vite: "npm:^7.1.11" + vue: "npm:^3.5.22" + vue-tsc: "npm:^3.1.1" languageName: unknown linkType: soft -"vue-tsc@npm:^2.2.12": - version: 2.2.12 - resolution: "vue-tsc@npm:2.2.12" +"vue-tsc@npm:^3.1.1": + version: 3.1.1 + resolution: "vue-tsc@npm:3.1.1" dependencies: - "@volar/typescript": "npm:2.4.15" - "@vue/language-core": "npm:2.2.12" + "@volar/typescript": "npm:2.4.23" + "@vue/language-core": "npm:3.1.1" peerDependencies: typescript: ">=5.0.0" bin: vue-tsc: ./bin/vue-tsc.js - checksum: 10c0/6c5159c064bc0a8628510bea1f55083a9ad03de35150e1d9ba5811b4e2c3fbc2a4c4d55fbe2d62fcad25c48771f62656e1b47ea5b072386914945707f97d7d65 + checksum: 10c0/fce50a83192ce716109f85d966ee562529a71a1d4f9b81b4a2f410cd8b946101c682726daac60477c8bd2e096100f7a5ef218d08bbe3c492bde380a3aa0416fd languageName: node linkType: hard -"vue@npm:^3.5.21": - version: 3.5.21 - resolution: "vue@npm:3.5.21" +"vue@npm:^3.5.22": + version: 3.5.22 + resolution: "vue@npm:3.5.22" dependencies: - "@vue/compiler-dom": "npm:3.5.21" - "@vue/compiler-sfc": "npm:3.5.21" - "@vue/runtime-dom": "npm:3.5.21" - "@vue/server-renderer": "npm:3.5.21" - "@vue/shared": "npm:3.5.21" + "@vue/compiler-dom": "npm:3.5.22" + "@vue/compiler-sfc": "npm:3.5.22" + "@vue/runtime-dom": "npm:3.5.22" + "@vue/server-renderer": "npm:3.5.22" + "@vue/shared": "npm:3.5.22" peerDependencies: typescript: "*" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/4a635b211e43d00a75f35fbd7413b3a5067f97638be5e11d1b3e2860d7b85444bd0288593c63e068366b9b2371cb5cf05a451ff6bc82246cd7092b17c6711100 + checksum: 10c0/ceee900a627c2274985da4a6cf1ceb093d3b6c59cc9e9dee606aedd2147918078ccb21bc0a39aacbd29d84449491e46e4b188e4a9fb57ff6c6d146ccb1baf752 languageName: node linkType: hard @@ -25882,7 +25301,7 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^15.0.0": +"whatwg-url@npm:^15.0.0, whatwg-url@npm:^15.1.0": version: 15.1.0 resolution: "whatwg-url@npm:15.1.0" dependencies: @@ -26394,7 +25813,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.13.0, ws@npm:^8.18.2": +"ws@npm:^8.13.0, ws@npm:^8.18.3": version: 8.18.3 resolution: "ws@npm:8.18.3" peerDependencies: @@ -26567,6 +25986,13 @@ __metadata: languageName: node linkType: hard +"yoctocolors@npm:^2.1.1": + version: 2.1.2 + resolution: "yoctocolors@npm:2.1.2" + checksum: 10c0/b220f30f53ebc2167330c3adc86a3c7f158bcba0236f6c67e25644c3188e2571a6014ffc1321943bb619460259d3d27eb4c9cc58c2d884c1b195805883ec7066 + languageName: node + linkType: hard + "youch@npm:3.3.4": version: 3.3.4 resolution: "youch@npm:3.3.4"