diff --git a/.gitignore b/.gitignore
index 0983c95..ce90809 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,8 @@
build
+ssr-build
+
# Logs
logs
*.log
diff --git a/coverage-badge.svg b/coverage-badge.svg
index 5bb55be..0d62383 100644
--- a/coverage-badge.svg
+++ b/coverage-badge.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/images/bundling-third-party-dep-issue.png b/images/bundling-third-party-dep-issue.png
new file mode 100644
index 0000000..4294714
Binary files /dev/null and b/images/bundling-third-party-dep-issue.png differ
diff --git a/images/coverage-report.png b/images/coverage-report.png
new file mode 100644
index 0000000..8363c54
Binary files /dev/null and b/images/coverage-report.png differ
diff --git a/jest.config.mjs b/jest.config.mjs
index 9fe2ed5..0768f36 100644
--- a/jest.config.mjs
+++ b/jest.config.mjs
@@ -12,4 +12,7 @@ export default {
},
extensionsToTreatAsEsm: ['.ts', '.tsx'],
coverageReporters: ['json-summary'],
+ // moduleNameMapper: {
+ // '^@adaptate/utils/(.*)$': '/packages/utils/src/$1',
+ // },
};
diff --git a/package.json b/package.json
index 564cd9f..4d38728 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "adaptate",
- "version": "0.0.10-rc",
+ "version": "0.1.0",
"author": {
"name": "Peramanathan Sathyamoorthy",
"url": "https://github.com/p10ns11y/adaptate.git"
@@ -24,15 +24,18 @@
"README.md"
],
"scripts": {
- "test": "node --experimental-vm-modules --no-warnings node_modules/jest/bin/jest.js --coverage",
- "build": "turbo run build"
+ "test": "vitest --coverage",
+ "build": "turbo run build",
+ "coveragebadge": "npx make-coverage-badge --output-path ./coverage-badge.svg"
},
"devDependencies": {
"@types/jest": "^29.5.14",
"@types/node": "^22.9.0",
+ "@vitest/coverage-v8": "^2.1.4",
"jest": "^29.7.0",
"ts-jest": "^29.2.5",
- "turbo": "^2.2.3"
+ "turbo": "^2.2.3",
+ "vitest": "^2.1.4"
},
"description": "Dynamic and Adaptable Model Validator Using Zod, Interoperable with OpenAPI",
"keywords": [
diff --git a/packages/core/package.json b/packages/core/package.json
index 1fa4983..0031644 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@adaptate/core",
- "version": "0.0.10-rc",
+ "version": "0.1.0",
"author": {
"name": "Peramanathan Sathyamoorthy",
"url": "https://github.com/p10ns11y/adaptate.git"
@@ -38,9 +38,9 @@
"README.md"
],
"exports": {
- ".": {
- "types": "./src/index.ts",
- "default": "./build/index.es.js"
+ "./*": {
+ "types": "./src/*.ts",
+ "default": "./build/*.es.js"
}
},
"description": "Dynamic and Adaptable Model Validator Using Zod, Interoperable with OpenAPI",
diff --git a/packages/core/src/__tests__/index.test.ts b/packages/core/src/__tests__/index.test.ts
index 464304c..3190ce5 100644
--- a/packages/core/src/__tests__/index.test.ts
+++ b/packages/core/src/__tests__/index.test.ts
@@ -1,4 +1,7 @@
+import { describe, it, expect } from 'vitest';
+
import { z } from 'zod';
+
import {
getDereferencedOpenAPIDocument,
openAPISchemaToZod,
@@ -82,7 +85,7 @@ describe('makeSchemaRequired', () => {
expect(() => transformedSchema.parse(invalidDataMissingName))
.toThrowErrorMatchingInlineSnapshot(`
- "[
+ [ZodError: [
{
"code": "invalid_type",
"expected": "string",
@@ -105,7 +108,7 @@ describe('makeSchemaRequired', () => {
],
"message": "Required"
}
- ]"
+ ]]
`);
// Re transforming the schema with different config
@@ -129,7 +132,7 @@ describe('makeSchemaRequired', () => {
expect(() => baseSchema.parse(invalidDataItems)).toThrow();
expect(() => transformedSchema.parse(invalidDataItems))
.toThrowErrorMatchingInlineSnapshot(`
- "[
+ [ZodError: [
{
"code": "invalid_type",
"expected": "string",
@@ -152,7 +155,7 @@ describe('makeSchemaRequired', () => {
],
"message": "Expected array, received string"
}
- ]"
+ ]]
`);
// TODO: Update code after evaluating the case of list of objects at top level
@@ -215,6 +218,22 @@ describe('makeSchemaRequired', () => {
dereferencedOpenAPIDocument['components']['schemas']['Category']
);
+ try {
+ // Intentionally not mocking the fetch call
+ let dereferencedOpenAPIDocumentFromWeb =
+ await getDereferencedOpenAPIDocument(
+ 'https://raw.githubusercontent.com/p10ns11y/adaptate/refs/heads/main/packages/core/src/fixtures/base-schema.yml',
+ '',
+ 'browser'
+ );
+
+ expect(dereferencedOpenAPIDocumentFromWeb).toEqual(
+ dereferencedOpenAPIDocument
+ );
+ } catch (e) {
+ console.log('Network failure or', (e as any)?.message);
+ }
+
let yetAnotherTransformedSchema = makeSchemaRequired(dataZodSchema, config);
expect(() =>
@@ -315,7 +334,7 @@ describe('makeSchemaRequired', () => {
expect(() =>
makeSchemaRequired(invalidSchema, config)
).toThrowErrorMatchingInlineSnapshot(
- `"The given schema must be a Zod object."`
+ `[Error: The given schema must be a Zod object.]`
);
});
diff --git a/packages/core/vite.config.js b/packages/core/vite.config.js
index be1da2b..93ddc5c 100644
--- a/packages/core/vite.config.js
+++ b/packages/core/vite.config.js
@@ -5,6 +5,7 @@ export default defineConfig({
build: {
target: 'esnext',
outDir: 'build',
+ sourcemap: true,
lib: {
entry: ['src/index.ts', 'src/mutate-model.ts'],
formats: ['es'],
diff --git a/packages/utils/images/import-fix.png b/packages/utils/images/import-fix.png
new file mode 100644
index 0000000..3db7d59
Binary files /dev/null and b/packages/utils/images/import-fix.png differ
diff --git a/packages/utils/package.json b/packages/utils/package.json
index 0d303b1..37bcc0d 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@adaptate/utils",
- "version": "0.0.10-rc",
+ "version": "0.1.0",
"author": {
"name": "Peramanathan Sathyamoorthy",
"url": "https://github.com/p10ns11y/adaptate.git"
@@ -17,18 +17,23 @@
"type": "module",
"source": "./src/index.ts",
"main": "./build/index.es.js",
+ "browser": "./build/index.es.js",
+ "module": "./build/index.es.js",
+ "jsnext:main": "./build/index.es.js",
+ "jsnext": "./build/index.es.js",
"types": "./build/index.d.ts",
"scripts": {
- "build": "vite build",
+ "build": "vite build && vite build --ssr",
+ "build:ssr": "vite build --ssr",
"check-types": "tsc --noEmit"
},
"dependencies": {
+ "@apidevtools/json-schema-ref-parser": "^11.7.2",
+ "js-yaml": "^4.1.0",
"zod": "^3.23.8"
},
"devDependencies": {
- "@apidevtools/swagger-parser": "^10.1.0",
"@types/js-yaml": "^4.0.9",
- "js-yaml": "^4.1.0",
"vite": "^5.4.10"
},
"peerDependencies": {
@@ -41,20 +46,29 @@
],
"exports": {
".": {
- "types": "./src/index.ts",
+ "types": "./src/index",
+ "import": "./build/index.es.js",
"default": "./build/index.es.js"
},
"./openapi": {
- "import": {
- "types": "./src/openapi.ts",
- "default": "./src/openapi.ts"
- },
- "require": {
- "types": "./src/openapi.ts",
- "default": "./build/openapi.es.js"
- },
"types": "./src/openapi.ts",
- "default": "./build/openapi.es.js"
+ "import": "./ssr-build/openapi.js",
+ "default": "./ssr-build/openapi.js"
+ },
+ "./*": {
+ "types": "./src/*.ts",
+ "import": "./build/*.es.js",
+ "default": "./build/*.es.js"
+ },
+ "./ssr": {
+ "types": "./src/index",
+ "import": "./ssr-build/index.js",
+ "default": "./ssr-build/index.js"
+ },
+ "./ssr/*": {
+ "types": "./src/index",
+ "import": "./ssr-build/*.js",
+ "default": "./ssr-build/*.js"
}
},
"description": "Dynamic and Adaptable Model Validator Using Zod, Interoperable with OpenAPI",
diff --git a/packages/utils/src/__tests__/openapi.test.ts b/packages/utils/src/__tests__/openapi.test.ts
index 8871520..3b3c86e 100644
--- a/packages/utils/src/__tests__/openapi.test.ts
+++ b/packages/utils/src/__tests__/openapi.test.ts
@@ -1,3 +1,5 @@
+import { describe, it, expect } from 'vitest';
+
import { z } from 'zod';
import {
@@ -316,11 +318,11 @@ describe('getDereferencedOpenAPIDocument', () => {
},
}
`);
- });
- expect(() =>
- getDereferencedOpenAPIDocument(import.meta.url, '../fixtures/unknown.yml')
- ).rejects.toThrowErrorMatchingInlineSnapshot(
- `"Error reading OpenAPI document: ENOENT: no such file or directory, open '/Users/peram/code/adaptate/packages/utils/src/fixtures/unknown.yml'"`
- );
+ await expect(() =>
+ getDereferencedOpenAPIDocument(import.meta.url, '../fixtures/unknown.yml')
+ ).rejects.toThrowErrorMatchingInlineSnapshot(
+ `[Error: Error reading OpenAPI document: ENOENT: no such file or directory, open '/Users/peram/code/adaptate/packages/utils/src/fixtures/unknown.yml']`
+ );
+ });
});
diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts
index a66d6ea..3c61ae1 100644
--- a/packages/utils/src/index.ts
+++ b/packages/utils/src/index.ts
@@ -1,10 +1,12 @@
export {
getDereferencedOpenAPIDocument,
// Features such as max, min, minLength, maxLength, pattern are missing
- openAPISchemaToZod as simple_OpenAPISchemaToZod,
- zodToOpenAPISchema as simple_ZodToOpenAPISchema,
- openAPISchemaToZod as partial_OpenAPISchemaToZod,
- zodToOpenAPISchema as partial_ZodToOpenAPISchema,
- openAPISchemaToZod as incomplete_OpenAPISchemaToZod,
- zodToOpenAPISchema as incomplete_ZodToOpenAPISchema,
+ // Check: https://github.com/StefanTerdell/json-schema-to-zod
+ // And zod-to-json-schema
+ openAPISchemaToZod as simple_openAPISchemaToZod,
+ openAPISchemaToZod as incomplete_openAPISchemaToZod,
+ openAPISchemaToZod as partial_openAPISchemaToZod,
+ zodToOpenAPISchema as simple_zodToOpenAPISchema,
+ zodToOpenAPISchema as incomplete_zodToOpenAPISchema,
+ zodToOpenAPISchema as partial_zodToOpenAPISchema,
} from './openapi';
diff --git a/packages/utils/src/load-yaml.ts b/packages/utils/src/load-yaml.ts
new file mode 100644
index 0000000..8a09387
--- /dev/null
+++ b/packages/utils/src/load-yaml.ts
@@ -0,0 +1,16 @@
+import yaml from 'js-yaml';
+
+export async function getYamlContent(fileURL: string, relativePath: string) {
+ let fs = await import('node:fs');
+ let path = await import('node:path');
+ let { fileURLToPath } = await import('node:url');
+ let { dirname } = path;
+ let fileURLPath = fileURLToPath(fileURL);
+ let callerDirectoryName = dirname(fileURLPath);
+ let yamlFilePath = path.resolve(callerDirectoryName, relativePath);
+ let openapiDocument = yaml.load(
+ fs.readFileSync(yamlFilePath, 'utf8')
+ ) as string;
+
+ return openapiDocument;
+}
diff --git a/packages/utils/src/openapi.ts b/packages/utils/src/openapi.ts
index b3c4201..a93bd5e 100644
--- a/packages/utils/src/openapi.ts
+++ b/packages/utils/src/openapi.ts
@@ -1,4 +1,3 @@
-import SwaggerParser from '@apidevtools/swagger-parser';
import yaml from 'js-yaml';
import { z, ZodTypeAny, ZodArray, ZodObject } from 'zod';
@@ -30,9 +29,11 @@ export function openAPISchemaToZod(
return required.includes(propertyKey) ? zodSchema : zodSchema.optional();
// Handle array type
} else if (schema.type === 'array') {
- const itemsSchema = schema.items
- ? openAPISchemaToZod(schema.items, propertyKey, required)
- : z.any();
+ let itemsSchema = z.any();
+ if (schema.items) {
+ // @ts-ignore
+ itemsSchema = openAPISchemaToZod(schema.items, propertyKey, required);
+ }
return required.includes(propertyKey)
? z.array(itemsSchema)
@@ -79,23 +80,46 @@ export function zodToOpenAPISchema(schema: ZodTypeAny): any {
return {};
}
+async function fetchYamlContent(fileURL: string, relativePath: string) {
+ let fileURLPath = fileURL + relativePath;
+ let response = await globalThis.fetch(fileURLPath, {
+ headers: {
+ 'Content-Type': 'text/yaml',
+ },
+ });
+ let openapiDocument = yaml.load(await response.text());
+
+ return openapiDocument;
+}
+
export async function getDereferencedOpenAPIDocument(
fileURL: string,
- relativePath: string
+ relativePath: string = '',
+ environment: 'server' | 'browser' = 'server'
) {
+ let openapiDocument = JSON.stringify({});
+
+ let isNode = globalThis.process?.versions?.node || environment === 'server';
+ let isBrowser = globalThis?.window?.document || environment === 'browser';
+
try {
- let fs = await import('node:fs');
- let path = await import('node:path');
- let { fileURLToPath } = await import('node:url');
- let { dirname } = path;
- let fileURLPath = fileURLToPath(fileURL);
- let callerDirectoryName = dirname(fileURLPath);
- let yamlFilePath = path.resolve(callerDirectoryName, relativePath);
- const openapiDocument = yaml.load(
- fs.readFileSync(yamlFilePath, 'utf8')
- ) as string;
+ if (isBrowser) {
+ openapiDocument = (await fetchYamlContent(
+ fileURL,
+ relativePath
+ )) as string;
+ } else if (isNode) {
+ let { getYamlContent } = await import('./load-yaml.ts');
+
+ openapiDocument = await getYamlContent(fileURL, relativePath);
+ }
+ // https://github.com/APIDevTools/json-schema-reader/blob/main/src/index.ts#L21
+ // let SwaggerParser = await import('@apidevtools/swagger-parser');
+ let SwaggerParser = await import('@apidevtools/json-schema-ref-parser');
- const dereferenced = await SwaggerParser.dereference(openapiDocument);
+ const dereferenced = await SwaggerParser.default.dereference(
+ openapiDocument
+ );
return dereferenced;
} catch (error) {
diff --git a/packages/utils/vite.config.js b/packages/utils/vite.config.js
index c598b9b..ec3e91b 100644
--- a/packages/utils/vite.config.js
+++ b/packages/utils/vite.config.js
@@ -1,18 +1,37 @@
// vite.config.js
+
import { defineConfig } from 'vite';
+import { builtinModules } from 'module';
-export default defineConfig({
- build: {
- target: 'esnext',
- outDir: 'build',
- lib: {
- entry: ['src/index.ts', 'src/openapi.ts'],
- formats: ['es'],
- fileName: (format, entryName) => `${entryName}.${format}.js`,
- types: 'src/index.d.ts',
- },
- rollupOptions: {
- external: ['zod'],
+export default defineConfig(({ isSsrBuild }) => {
+ if (isSsrBuild) {
+ console.log('Building for SSR');
+
+ return {
+ build: {
+ target: 'esnext',
+ ssr: 'src/index.ts',
+ ssrManifest: true,
+ outDir: 'ssr-build',
+ sourcemap: true,
+ rollupOptions: {
+ input: ['src/index.ts', 'src/openapi.ts'],
+ external: ['zod', ...builtinModules],
+ },
+ },
+ };
+ }
+
+ return {
+ build: {
+ target: 'esnext',
+ outDir: 'build',
+ lib: {
+ entry: ['src/index.ts', 'src/openapi.ts'],
+ formats: ['es'],
+ fileName: (format, entryName) => `${entryName}.${format}.js`,
+ types: 'src/index.d.ts',
+ },
},
- },
+ };
});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 525bc8f..6131884 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -14,6 +14,9 @@ importers:
'@types/node':
specifier: ^22.9.0
version: 22.9.0
+ '@vitest/coverage-v8':
+ specifier: ^2.1.4
+ version: 2.1.4(vitest@2.1.4(@types/node@22.9.0))
jest:
specifier: ^29.7.0
version: 29.7.0(@types/node@22.9.0)
@@ -23,6 +26,9 @@ importers:
turbo:
specifier: ^2.2.3
version: 2.2.3
+ vitest:
+ specifier: ^2.1.4
+ version: 2.1.4(@types/node@22.9.0)
packages/core:
dependencies:
@@ -39,19 +45,19 @@ importers:
packages/utils:
dependencies:
+ '@apidevtools/json-schema-ref-parser':
+ specifier: ^11.7.2
+ version: 11.7.2
+ js-yaml:
+ specifier: ^4.1.0
+ version: 4.1.0
zod:
specifier: ^3.23.8
version: 3.23.8
devDependencies:
- '@apidevtools/swagger-parser':
- specifier: ^10.1.0
- version: 10.1.0(openapi-types@12.1.3)
'@types/js-yaml':
specifier: ^4.0.9
version: 4.0.9
- js-yaml:
- specifier: ^4.1.0
- version: 4.1.0
vite:
specifier: ^5.4.10
version: 5.4.10(@types/node@22.9.0)
@@ -62,20 +68,9 @@ packages:
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
- '@apidevtools/json-schema-ref-parser@9.0.6':
- resolution: {integrity: sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==}
-
- '@apidevtools/openapi-schemas@2.1.0':
- resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==}
- engines: {node: '>=10'}
-
- '@apidevtools/swagger-methods@3.0.2':
- resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==}
-
- '@apidevtools/swagger-parser@10.1.0':
- resolution: {integrity: sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw==}
- peerDependencies:
- openapi-types: '>=7'
+ '@apidevtools/json-schema-ref-parser@11.7.2':
+ resolution: {integrity: sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA==}
+ engines: {node: '>= 16'}
'@babel/code-frame@7.26.2':
resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
@@ -376,6 +371,10 @@ packages:
cpu: [x64]
os: [win32]
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
'@istanbuljs/load-nyc-config@1.1.0':
resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
engines: {node: '>=8'}
@@ -471,6 +470,10 @@ packages:
'@jsdevtools/ono@7.1.3':
resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==}
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
'@rollup/rollup-android-arm-eabi@4.24.4':
resolution: {integrity: sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==}
cpu: [arm]
@@ -603,6 +606,9 @@ packages:
'@types/js-yaml@4.0.9':
resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==}
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
'@types/node@22.9.0':
resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==}
@@ -615,16 +621,43 @@ packages:
'@types/yargs@17.0.33':
resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
- ajv-draft-04@1.0.0:
- resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==}
+ '@vitest/coverage-v8@2.1.4':
+ resolution: {integrity: sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==}
peerDependencies:
- ajv: ^8.5.0
+ '@vitest/browser': 2.1.4
+ vitest: 2.1.4
peerDependenciesMeta:
- ajv:
+ '@vitest/browser':
+ optional: true
+
+ '@vitest/expect@2.1.4':
+ resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==}
+
+ '@vitest/mocker@2.1.4':
+ resolution: {integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^5.0.0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
optional: true
- ajv@8.17.1:
- resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+ '@vitest/pretty-format@2.1.4':
+ resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==}
+
+ '@vitest/runner@2.1.4':
+ resolution: {integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==}
+
+ '@vitest/snapshot@2.1.4':
+ resolution: {integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==}
+
+ '@vitest/spy@2.1.4':
+ resolution: {integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==}
+
+ '@vitest/utils@2.1.4':
+ resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==}
ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
@@ -634,6 +667,10 @@ packages:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
+ ansi-regex@6.1.0:
+ resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ engines: {node: '>=12'}
+
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
@@ -642,6 +679,10 @@ packages:
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
engines: {node: '>=10'}
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+
anymatch@3.1.3:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
@@ -652,6 +693,10 @@ packages:
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
async@3.2.6:
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
@@ -708,8 +753,9 @@ packages:
buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
- call-me-maybe@1.0.2:
- resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==}
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
@@ -726,6 +772,10 @@ packages:
caniuse-lite@1.0.30001679:
resolution: {integrity: sha512-j2YqID/YwpLnKzCmBOS4tlZdWprXm3ZmQLBH9ZBXFOhoxLA46fwyBvx6toCBWBmnuwUY/qB3kEU6gFx8qgCroA==}
+ chai@5.1.2:
+ resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==}
+ engines: {node: '>=12'}
+
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -734,6 +784,10 @@ packages:
resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
engines: {node: '>=10'}
+ check-error@2.1.1:
+ resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
+ engines: {node: '>= 16'}
+
ci-info@3.9.0:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
@@ -791,6 +845,10 @@ packages:
babel-plugin-macros:
optional: true
+ deep-eql@5.0.2:
+ resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
+ engines: {node: '>=6'}
+
deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
@@ -803,6 +861,9 @@ packages:
resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
ejs@3.1.10:
resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
engines: {node: '>=0.10.0'}
@@ -818,6 +879,9 @@ packages:
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
error-ex@1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
@@ -839,6 +903,9 @@ packages:
engines: {node: '>=4'}
hasBin: true
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
execa@5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
@@ -847,19 +914,17 @@ packages:
resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
engines: {node: '>= 0.8.0'}
+ expect-type@1.1.0:
+ resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==}
+ engines: {node: '>=12.0.0'}
+
expect@29.7.0:
resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- fast-deep-equal@3.1.3:
- resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
-
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
- fast-uri@3.0.3:
- resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==}
-
fb-watchman@2.0.2:
resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
@@ -874,6 +939,10 @@ packages:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
+ foreground-child@3.3.0:
+ resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
+ engines: {node: '>=14'}
+
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -901,6 +970,10 @@ packages:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
+ glob@10.4.5:
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ hasBin: true
+
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
@@ -989,10 +1062,17 @@ packages:
resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
engines: {node: '>=10'}
+ istanbul-lib-source-maps@5.0.6:
+ resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
+ engines: {node: '>=10'}
+
istanbul-reports@3.1.7:
resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
engines: {node: '>=8'}
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
jake@10.9.2:
resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==}
engines: {node: '>=10'}
@@ -1146,9 +1226,6 @@ packages:
json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
- json-schema-traverse@1.0.0:
- resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
-
json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
@@ -1172,9 +1249,21 @@ packages:
lodash.memoize@4.1.2:
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
+ loupe@3.1.2:
+ resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ magic-string@0.30.12:
+ resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==}
+
+ magicast@0.3.5:
+ resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
+
make-dir@4.0.0:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines: {node: '>=10'}
@@ -1203,6 +1292,14 @@ packages:
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
engines: {node: '>=10'}
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -1235,9 +1332,6 @@ packages:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
- openapi-types@12.1.3:
- resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==}
-
p-limit@2.3.0:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
engines: {node: '>=6'}
@@ -1254,6 +1348,9 @@ packages:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
@@ -1273,6 +1370,17 @@ packages:
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ pathe@1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+
+ pathval@2.0.0:
+ resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
+ engines: {node: '>= 14.16'}
+
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -1310,10 +1418,6 @@ packages:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
- require-from-string@2.0.2:
- resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
- engines: {node: '>=0.10.0'}
-
resolve-cwd@3.0.0:
resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
engines: {node: '>=8'}
@@ -1352,9 +1456,16 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
@@ -1380,6 +1491,12 @@ packages:
resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
engines: {node: '>=10'}
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ std-env@3.8.0:
+ resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==}
+
string-length@4.0.2:
resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
engines: {node: '>=10'}
@@ -1388,10 +1505,18 @@ packages:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+
strip-bom@4.0.0:
resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
engines: {node: '>=8'}
@@ -1420,6 +1545,28 @@ packages:
resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
engines: {node: '>=8'}
+ test-exclude@7.0.1:
+ resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
+ engines: {node: '>=18'}
+
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyexec@0.3.1:
+ resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==}
+
+ tinypool@1.0.1:
+ resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+
+ tinyrainbow@1.2.0:
+ resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
+ engines: {node: '>=14.0.0'}
+
+ tinyspy@3.0.2:
+ resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
+ engines: {node: '>=14.0.0'}
+
tmpl@1.0.5:
resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
@@ -1511,6 +1658,11 @@ packages:
resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
engines: {node: '>=10.12.0'}
+ vite-node@2.1.4:
+ resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+
vite@5.4.10:
resolution: {integrity: sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==}
engines: {node: ^18.0.0 || >=20.0.0}
@@ -1542,6 +1694,31 @@ packages:
terser:
optional: true
+ vitest@2.1.4:
+ resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@types/node': ^18.0.0 || >=20.0.0
+ '@vitest/browser': 2.1.4
+ '@vitest/ui': 2.1.4
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
walker@1.0.8:
resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
@@ -1550,10 +1727,19 @@ packages:
engines: {node: '>= 8'}
hasBin: true
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
@@ -1590,26 +1776,11 @@ snapshots:
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
- '@apidevtools/json-schema-ref-parser@9.0.6':
+ '@apidevtools/json-schema-ref-parser@11.7.2':
dependencies:
'@jsdevtools/ono': 7.1.3
- call-me-maybe: 1.0.2
- js-yaml: 3.14.1
-
- '@apidevtools/openapi-schemas@2.1.0': {}
-
- '@apidevtools/swagger-methods@3.0.2': {}
-
- '@apidevtools/swagger-parser@10.1.0(openapi-types@12.1.3)':
- dependencies:
- '@apidevtools/json-schema-ref-parser': 9.0.6
- '@apidevtools/openapi-schemas': 2.1.0
- '@apidevtools/swagger-methods': 3.0.2
- '@jsdevtools/ono': 7.1.3
- ajv: 8.17.1
- ajv-draft-04: 1.0.0(ajv@8.17.1)
- call-me-maybe: 1.0.2
- openapi-types: 12.1.3
+ '@types/json-schema': 7.0.15
+ js-yaml: 4.1.0
'@babel/code-frame@7.26.2':
dependencies:
@@ -1867,6 +2038,15 @@ snapshots:
'@esbuild/win32-x64@0.21.5':
optional: true
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
'@istanbuljs/load-nyc-config@1.1.0':
dependencies:
camelcase: 5.3.1
@@ -2058,6 +2238,9 @@ snapshots:
'@jsdevtools/ono@7.1.3': {}
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
'@rollup/rollup-android-arm-eabi@4.24.4':
optional: true
@@ -2166,6 +2349,8 @@ snapshots:
'@types/js-yaml@4.0.9': {}
+ '@types/json-schema@7.0.15': {}
+
'@types/node@22.9.0':
dependencies:
undici-types: 6.19.8
@@ -2178,16 +2363,63 @@ snapshots:
dependencies:
'@types/yargs-parser': 21.0.3
- ajv-draft-04@1.0.0(ajv@8.17.1):
+ '@vitest/coverage-v8@2.1.4(vitest@2.1.4(@types/node@22.9.0))':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@bcoe/v8-coverage': 0.2.3
+ debug: 4.3.7
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 5.0.6
+ istanbul-reports: 3.1.7
+ magic-string: 0.30.12
+ magicast: 0.3.5
+ std-env: 3.8.0
+ test-exclude: 7.0.1
+ tinyrainbow: 1.2.0
+ vitest: 2.1.4(@types/node@22.9.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vitest/expect@2.1.4':
+ dependencies:
+ '@vitest/spy': 2.1.4
+ '@vitest/utils': 2.1.4
+ chai: 5.1.2
+ tinyrainbow: 1.2.0
+
+ '@vitest/mocker@2.1.4(vite@5.4.10(@types/node@22.9.0))':
+ dependencies:
+ '@vitest/spy': 2.1.4
+ estree-walker: 3.0.3
+ magic-string: 0.30.12
optionalDependencies:
- ajv: 8.17.1
+ vite: 5.4.10(@types/node@22.9.0)
+
+ '@vitest/pretty-format@2.1.4':
+ dependencies:
+ tinyrainbow: 1.2.0
+
+ '@vitest/runner@2.1.4':
+ dependencies:
+ '@vitest/utils': 2.1.4
+ pathe: 1.1.2
+
+ '@vitest/snapshot@2.1.4':
+ dependencies:
+ '@vitest/pretty-format': 2.1.4
+ magic-string: 0.30.12
+ pathe: 1.1.2
- ajv@8.17.1:
+ '@vitest/spy@2.1.4':
dependencies:
- fast-deep-equal: 3.1.3
- fast-uri: 3.0.3
- json-schema-traverse: 1.0.0
- require-from-string: 2.0.2
+ tinyspy: 3.0.2
+
+ '@vitest/utils@2.1.4':
+ dependencies:
+ '@vitest/pretty-format': 2.1.4
+ loupe: 3.1.2
+ tinyrainbow: 1.2.0
ansi-escapes@4.3.2:
dependencies:
@@ -2195,12 +2427,16 @@ snapshots:
ansi-regex@5.0.1: {}
+ ansi-regex@6.1.0: {}
+
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
ansi-styles@5.2.0: {}
+ ansi-styles@6.2.1: {}
+
anymatch@3.1.3:
dependencies:
normalize-path: 3.0.0
@@ -2212,6 +2448,8 @@ snapshots:
argparse@2.0.1: {}
+ assertion-error@2.0.1: {}
+
async@3.2.6: {}
babel-jest@29.7.0(@babel/core@7.26.0):
@@ -2301,7 +2539,7 @@ snapshots:
buffer-from@1.1.2: {}
- call-me-maybe@1.0.2: {}
+ cac@6.7.14: {}
callsites@3.1.0: {}
@@ -2311,6 +2549,14 @@ snapshots:
caniuse-lite@1.0.30001679: {}
+ chai@5.1.2:
+ dependencies:
+ assertion-error: 2.0.1
+ check-error: 2.1.1
+ deep-eql: 5.0.2
+ loupe: 3.1.2
+ pathval: 2.0.0
+
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
@@ -2318,6 +2564,8 @@ snapshots:
char-regex@1.0.2: {}
+ check-error@2.1.1: {}
+
ci-info@3.9.0: {}
cjs-module-lexer@1.4.1: {}
@@ -2369,12 +2617,16 @@ snapshots:
dedent@1.5.3: {}
+ deep-eql@5.0.2: {}
+
deepmerge@4.3.1: {}
detect-newline@3.1.0: {}
diff-sequences@29.6.3: {}
+ eastasianwidth@0.2.0: {}
+
ejs@3.1.10:
dependencies:
jake: 10.9.2
@@ -2385,6 +2637,8 @@ snapshots:
emoji-regex@8.0.0: {}
+ emoji-regex@9.2.2: {}
+
error-ex@1.3.2:
dependencies:
is-arrayish: 0.2.1
@@ -2421,6 +2675,10 @@ snapshots:
esprima@4.0.1: {}
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.6
+
execa@5.1.1:
dependencies:
cross-spawn: 7.0.5
@@ -2435,6 +2693,8 @@ snapshots:
exit@0.1.2: {}
+ expect-type@1.1.0: {}
+
expect@29.7.0:
dependencies:
'@jest/expect-utils': 29.7.0
@@ -2443,12 +2703,8 @@ snapshots:
jest-message-util: 29.7.0
jest-util: 29.7.0
- fast-deep-equal@3.1.3: {}
-
fast-json-stable-stringify@2.1.0: {}
- fast-uri@3.0.3: {}
-
fb-watchman@2.0.2:
dependencies:
bser: 2.1.1
@@ -2466,6 +2722,11 @@ snapshots:
locate-path: 5.0.0
path-exists: 4.0.0
+ foreground-child@3.3.0:
+ dependencies:
+ cross-spawn: 7.0.5
+ signal-exit: 4.1.0
+
fs.realpath@1.0.0: {}
fsevents@2.3.3:
@@ -2481,6 +2742,15 @@ snapshots:
get-stream@6.0.1: {}
+ glob@10.4.5:
+ dependencies:
+ foreground-child: 3.3.0
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
glob@7.2.3:
dependencies:
fs.realpath: 1.0.0
@@ -2570,11 +2840,25 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ istanbul-lib-source-maps@5.0.6:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ debug: 4.3.7
+ istanbul-lib-coverage: 3.2.2
+ transitivePeerDependencies:
+ - supports-color
+
istanbul-reports@3.1.7:
dependencies:
html-escaper: 2.0.2
istanbul-lib-report: 3.0.1
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
jake@10.9.2:
dependencies:
async: 3.2.6
@@ -2905,8 +3189,6 @@ snapshots:
json-parse-even-better-errors@2.3.1: {}
- json-schema-traverse@1.0.0: {}
-
json5@2.2.3: {}
kleur@3.0.3: {}
@@ -2921,10 +3203,24 @@ snapshots:
lodash.memoize@4.1.2: {}
+ loupe@3.1.2: {}
+
+ lru-cache@10.4.3: {}
+
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
+ magic-string@0.30.12:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ magicast@0.3.5:
+ dependencies:
+ '@babel/parser': 7.26.2
+ '@babel/types': 7.26.0
+ source-map-js: 1.2.1
+
make-dir@4.0.0:
dependencies:
semver: 7.6.3
@@ -2952,6 +3248,12 @@ snapshots:
dependencies:
brace-expansion: 2.0.1
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minipass@7.1.2: {}
+
ms@2.1.3: {}
nanoid@3.3.7: {}
@@ -2976,8 +3278,6 @@ snapshots:
dependencies:
mimic-fn: 2.1.0
- openapi-types@12.1.3: {}
-
p-limit@2.3.0:
dependencies:
p-try: 2.2.0
@@ -2992,6 +3292,8 @@ snapshots:
p-try@2.2.0: {}
+ package-json-from-dist@1.0.1: {}
+
parse-json@5.2.0:
dependencies:
'@babel/code-frame': 7.26.2
@@ -3007,6 +3309,15 @@ snapshots:
path-parse@1.0.7: {}
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+
+ pathe@1.1.2: {}
+
+ pathval@2.0.0: {}
+
picocolors@1.1.1: {}
picomatch@2.3.1: {}
@@ -3040,8 +3351,6 @@ snapshots:
require-directory@2.1.1: {}
- require-from-string@2.0.2: {}
-
resolve-cwd@3.0.0:
dependencies:
resolve-from: 5.0.0
@@ -3090,8 +3399,12 @@ snapshots:
shebang-regex@3.0.0: {}
+ siginfo@2.0.0: {}
+
signal-exit@3.0.7: {}
+ signal-exit@4.1.0: {}
+
sisteransi@1.0.5: {}
slash@3.0.0: {}
@@ -3111,6 +3424,10 @@ snapshots:
dependencies:
escape-string-regexp: 2.0.0
+ stackback@0.0.2: {}
+
+ std-env@3.8.0: {}
+
string-length@4.0.2:
dependencies:
char-regex: 1.0.2
@@ -3122,10 +3439,20 @@ snapshots:
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.1.0
+
strip-bom@4.0.0: {}
strip-final-newline@2.0.0: {}
@@ -3148,6 +3475,22 @@ snapshots:
glob: 7.2.3
minimatch: 3.1.2
+ test-exclude@7.0.1:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 10.4.5
+ minimatch: 9.0.5
+
+ tinybench@2.9.0: {}
+
+ tinyexec@0.3.1: {}
+
+ tinypool@1.0.1: {}
+
+ tinyrainbow@1.2.0: {}
+
+ tinyspy@3.0.2: {}
+
tmpl@1.0.5: {}
to-regex-range@5.0.1:
@@ -3220,6 +3563,23 @@ snapshots:
'@types/istanbul-lib-coverage': 2.0.6
convert-source-map: 2.0.0
+ vite-node@2.1.4(@types/node@22.9.0):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.3.7
+ pathe: 1.1.2
+ vite: 5.4.10(@types/node@22.9.0)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
vite@5.4.10(@types/node@22.9.0):
dependencies:
esbuild: 0.21.5
@@ -3229,6 +3589,41 @@ snapshots:
'@types/node': 22.9.0
fsevents: 2.3.3
+ vitest@2.1.4(@types/node@22.9.0):
+ dependencies:
+ '@vitest/expect': 2.1.4
+ '@vitest/mocker': 2.1.4(vite@5.4.10(@types/node@22.9.0))
+ '@vitest/pretty-format': 2.1.4
+ '@vitest/runner': 2.1.4
+ '@vitest/snapshot': 2.1.4
+ '@vitest/spy': 2.1.4
+ '@vitest/utils': 2.1.4
+ chai: 5.1.2
+ debug: 4.3.7
+ expect-type: 1.1.0
+ magic-string: 0.30.12
+ pathe: 1.1.2
+ std-env: 3.8.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.1
+ tinypool: 1.0.1
+ tinyrainbow: 1.2.0
+ vite: 5.4.10(@types/node@22.9.0)
+ vite-node: 2.1.4(@types/node@22.9.0)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 22.9.0
+ transitivePeerDependencies:
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
walker@1.0.8:
dependencies:
makeerror: 1.0.12
@@ -3237,12 +3632,23 @@ snapshots:
dependencies:
isexe: 2.0.0
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+
wrappy@1.0.2: {}
write-file-atomic@4.0.2:
diff --git a/vitest.config.ts b/vitest.config.ts
new file mode 100644
index 0000000..a952d2a
--- /dev/null
+++ b/vitest.config.ts
@@ -0,0 +1,21 @@
+import { defineConfig } from 'vitest/config';
+
+export default defineConfig({
+ test: {
+ globals: true,
+ environment: 'node',
+ coverage: {
+ reporter: ['text', 'json', 'html', 'json-summary'],
+ include: ['packages/**/*.ts'],
+ exclude: [
+ 'node_modules',
+ 'build',
+ 'test',
+ 'packages/**/*.test.ts',
+ 'packages/core/src/mutate-model.ts',
+ // export only no source code
+ 'packages/utils/src/index.ts',
+ ],
+ },
+ },
+});