From caaff8ddbac714c7c4de5a56287bdb9469bd0e9a Mon Sep 17 00:00:00 2001 From: Joris Date: Mon, 10 Feb 2025 18:21:52 +0100 Subject: [PATCH] feat: automatically infer values from schema (#739) * fix(zodResolver): infer from schema * chore: update letfhook config * fix(vineResolver): infer from schema * fix(valibotResolver): infer from schema * refactor(zod): remove arrow functions * feat(typebox): automatically infer values from schema * feat(typanion): automatically infer values from schema * refactor: remove useless files * feat(superstruct): automatically infer values from schema * feat(io-ts): automatically infer values from schema * refactor: remove arrow functions * feat(effect): automatically infer values from schema * feat(computed-types): automatically infer values from schema * feat(class-validator): automatically infer values from schema * feat(arktype): automatically infer values from schema * feat(standard-schema): automatically infer values from schema * doc: add resolver comparison * doc: add jsdoc --- README.md | 33 +- ajv/src/ajv.ts | 20 + arktype/src/__tests__/Form.tsx | 38 +- arktype/src/__tests__/__fixtures__/data.ts | 2 +- arktype/src/arktype.ts | 38 +- arktype/src/index.ts | 1 - arktype/src/types.ts | 18 - bun.lock | 1593 +++++++++++++++++ bun.lockb | Bin 329083 -> 0 bytes class-validator/src/__tests__/Form.tsx | 26 + .../src/__tests__/__fixtures__/data.ts | 2 +- .../src/__tests__/class-validator.ts | 31 +- class-validator/src/class-validator.ts | 58 +- class-validator/src/index.ts | 1 - class-validator/src/types.ts | 16 - .../src/__tests__/Form-native-validation.tsx | 6 +- computed-types/src/__tests__/Form.tsx | 36 +- .../src/__tests__/__fixtures__/data.ts | 2 +- .../src/__tests__/computed-types.ts | 2 + computed-types/src/computed-types.ts | 31 +- computed-types/src/index.ts | 1 - computed-types/src/types.ts | 13 - effect-ts/src/__tests__/Form.tsx | 34 +- effect-ts/src/__tests__/__fixtures__/data.ts | 2 +- effect-ts/src/effect-ts.ts | 38 +- effect-ts/src/index.ts | 1 - effect-ts/src/types.ts | 12 - .../src/fluentvalidation-ts.ts | 27 +- .../src/__tests__/Form-native-validation.tsx | 15 +- io-ts/src/__tests__/Form.tsx | 36 +- io-ts/src/__tests__/__fixtures__/data.ts | 21 +- io-ts/src/errorsToRecord.ts | 5 +- io-ts/src/index.ts | 1 - io-ts/src/io-ts.ts | 72 +- io-ts/src/types.ts | 18 - joi/src/joi.ts | 17 + lefthook.yml | 1 + nope/src/nope.ts | 17 + package.json | 3 + standard-schema/src/__tests__/Form.tsx | 38 +- .../src/__tests__/__fixtures__/data.ts | 65 +- .../__snapshots__/standard-schema.ts.snap | 209 ++- .../src/__tests__/standard-schema.ts | 32 +- standard-schema/src/index.ts | 1 - standard-schema/src/standard-schema.ts | 65 +- standard-schema/src/types.ts | 10 - superstruct/src/__tests__/Form.tsx | 26 + .../src/__tests__/__fixtures__/data.ts | 2 +- superstruct/src/index.ts | 1 - superstruct/src/superstruct.ts | 40 +- superstruct/src/types.ts | 20 - .../src/__tests__/Form-native-validation.tsx | 20 +- typanion/src/__tests__/Form.tsx | 40 +- typanion/src/__tests__/__fixtures__/data.ts | 18 +- typanion/src/__tests__/typanion.ts | 6 +- typanion/src/index.ts | 1 - typanion/src/typanion.ts | 41 +- typanion/src/types.ts | 20 - typebox/src/__tests__/Form-compiler.tsx | 12 +- typebox/src/__tests__/Form.tsx | 38 +- typebox/src/__tests__/__fixtures__/data.ts | 2 +- typebox/src/index.ts | 1 - typebox/src/typebox.ts | 40 +- typebox/src/types.ts | 11 - typeschema/src/typeschema.ts | 17 + valibot/src/__tests__/Form.tsx | 26 + valibot/src/__tests__/__fixtures__/data.ts | 10 +- valibot/src/index.ts | 1 - valibot/src/types.ts | 34 - valibot/src/valibot.ts | 57 +- vest/src/vest.ts | 18 + vine/src/__tests__/Form-native-validation.tsx | 6 +- vine/src/__tests__/Form.tsx | 36 +- vine/src/__tests__/__fixtures__/data.ts | 2 +- vine/src/index.ts | 1 - vine/src/types.ts | 13 - vine/src/vine.ts | 46 +- yup/src/yup.ts | 31 +- zod/src/__tests__/Form.tsx | 36 +- zod/src/__tests__/__fixtures__/data.ts | 6 +- zod/src/index.ts | 1 - zod/src/types.ts | 22 - zod/src/zod.ts | 47 +- 83 files changed, 2920 insertions(+), 537 deletions(-) delete mode 100644 arktype/src/types.ts create mode 100644 bun.lock delete mode 100755 bun.lockb delete mode 100644 class-validator/src/types.ts delete mode 100644 computed-types/src/types.ts delete mode 100644 effect-ts/src/types.ts delete mode 100644 io-ts/src/types.ts delete mode 100644 standard-schema/src/types.ts delete mode 100644 superstruct/src/types.ts delete mode 100644 typanion/src/types.ts delete mode 100644 typebox/src/types.ts delete mode 100644 valibot/src/types.ts delete mode 100644 vine/src/types.ts delete mode 100644 zod/src/types.ts diff --git a/README.md b/README.md index 53a6a992..35032a48 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,37 @@ ## Install Install your preferred validation library alongside `@hookform/resolvers`. - - npm install @hookform/resolvers + + npm install @hookform/resolvers # npm + yarn add @hookform/resolvers # yarn + pnpm install @hookform/resolvers # pnpm + bun install @hookform/resolvers # bun + +
+ Resolver Comparison + +| resolver | Infer values
from schema | [criteriaMode](https://react-hook-form.com/docs/useform#criteriaMode) | +|---|---|---| +| AJV | ❌ | `firstError | all` | +| Arktype | ✅ | `firstError` | +| class-validator | ✅ | `firstError | all` | +| computed-types | ✅ | `firstError` | +| Effect | ✅ | `firstError | all` | +| fluentvalidation-ts | ❌ | `firstError` | +| io-ts | ✅ | `firstError` | +| joi | ❌ | `firstError | all` | +| Nope | ❌ | `firstError` | +| Standard Schema | ✅ | `firstError | all` | +| Superstruct | ✅ | `firstError` | +| typanion | ✅ | `firstError` | +| typebox | ✅ | `firstError | all` | +| typeschema | ❌ | `firstError | all` | +| valibot | ✅ | `firstError | all` | +| vest | ❌ | `firstError | all` | +| vine | ✅ | `firstError | all` | +| yup | ✅ | `firstError | all` | +| zod | ✅ | `firstError | all` | +
## Links diff --git a/ajv/src/ajv.ts b/ajv/src/ajv.ts index ba55d5ad..958947f0 100644 --- a/ajv/src/ajv.ts +++ b/ajv/src/ajv.ts @@ -58,6 +58,26 @@ const parseErrorSchema = ( return parsedErrors; }; +/** + * Creates a resolver for react-hook-form using Ajv schema validation + * @param {Schema} schema - The Ajv schema to validate against + * @param {Object} schemaOptions - Additional schema validation options + * @param {Object} resolverOptions - Additional resolver configuration + * @param {string} [resolverOptions.mode='async'] - Validation mode + * @returns {Resolver} A resolver function compatible with react-hook-form + * @example + * const schema = ajv.compile({ + * type: 'object', + * properties: { + * name: { type: 'string' }, + * age: { type: 'number' } + * } + * }); + * + * useForm({ + * resolver: ajvResolver(schema) + * }); + */ export const ajvResolver: Resolver = (schema, schemaOptions, resolverOptions = {}) => async (values, _, options) => { diff --git a/arktype/src/__tests__/Form.tsx b/arktype/src/__tests__/Form.tsx index 034beb0f..10a4399e 100644 --- a/arktype/src/__tests__/Form.tsx +++ b/arktype/src/__tests__/Form.tsx @@ -12,16 +12,16 @@ const schema = type({ type FormData = typeof schema.infer & { unusedProperty: string }; -interface Props { - onSubmit: (data: FormData) => void; -} - -function TestComponent({ onSubmit }: Props) { +function TestComponent({ + onSubmit, +}: { + onSubmit: (data: typeof schema.infer) => void; +}) { const { register, handleSubmit, formState: { errors }, - } = useForm({ + } = useForm({ resolver: arktypeResolver(schema), // Useful to check TypeScript regressions }); @@ -54,3 +54,29 @@ test("form's validation with arkType and TypeScript's integration", async () => ).toBeInTheDocument(); expect(handleSubmit).not.toHaveBeenCalled(); }); + +export function TestComponentManualType({ + onSubmit, +}: { + onSubmit: (data: FormData) => void; +}) { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm({ + resolver: arktypeResolver(schema), // Useful to check TypeScript regressions + }); + + return ( +
+ + {errors.username && {errors.username.message}} + + + {errors.password && {errors.password.message}} + + +
+ ); +} diff --git a/arktype/src/__tests__/__fixtures__/data.ts b/arktype/src/__tests__/__fixtures__/data.ts index 5f0495e7..a84cdddf 100644 --- a/arktype/src/__tests__/__fixtures__/data.ts +++ b/arktype/src/__tests__/__fixtures__/data.ts @@ -43,7 +43,7 @@ export const invalidData = { birthYear: 'birthYear', like: [{ id: 'z' }], url: 'abc', -}; +} as any as typeof schema.infer; export const fields: Record = { username: { diff --git a/arktype/src/arktype.ts b/arktype/src/arktype.ts index 4d90e585..2863f93e 100644 --- a/arktype/src/arktype.ts +++ b/arktype/src/arktype.ts @@ -1,9 +1,8 @@ import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers'; -import { ArkErrors } from 'arktype'; -import { FieldError, FieldErrors } from 'react-hook-form'; -import type { Resolver } from './types'; +import { ArkErrors, Type } from 'arktype'; +import { FieldError, FieldErrors, Resolver } from 'react-hook-form'; -const parseErrorSchema = (arkErrors: ArkErrors): Record => { +function parseErrorSchema(arkErrors: ArkErrors): Record { const errors = [...arkErrors]; const fieldsErrors: Record = {}; @@ -19,11 +18,31 @@ const parseErrorSchema = (arkErrors: ArkErrors): Record => { } return fieldsErrors; -}; - -export const arktypeResolver: Resolver = - (schema, _schemaOptions, resolverOptions = {}) => - (values, _, options) => { +} + +/** + * Creates a resolver for react-hook-form using Arktype schema validation + * @param {Schema} schema - The Arktype schema to validate against + * @param {Object} resolverOptions - Additional resolver configuration + * @param {string} [resolverOptions.mode='raw'] - Return the raw input values rather than the parsed values + * @returns {Resolver} A resolver function compatible with react-hook-form + * @example + * const schema = type({ + * username: 'string>2' + * }); + * + * useForm({ + * resolver: arktypeResolver(schema) + * }); + */ +export function arktypeResolver>( + schema: Schema, + _schemaOptions?: never, + resolverOptions: { + raw?: boolean; + } = {}, +): Resolver { + return (values, _, options) => { const out = schema(values); if (out instanceof ArkErrors) { @@ -40,3 +59,4 @@ export const arktypeResolver: Resolver = values: resolverOptions.raw ? Object.assign({}, values) : out, }; }; +} diff --git a/arktype/src/index.ts b/arktype/src/index.ts index e2a73f26..686e8490 100644 --- a/arktype/src/index.ts +++ b/arktype/src/index.ts @@ -1,2 +1 @@ export * from './arktype'; -export * from './types'; diff --git a/arktype/src/types.ts b/arktype/src/types.ts deleted file mode 100644 index cadf51b0..00000000 --- a/arktype/src/types.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Type } from 'arktype'; -import { FieldValues, ResolverOptions, ResolverResult } from 'react-hook-form'; - -export type Resolver = >( - schema: T, - schemaOptions?: undefined, - factoryOptions?: { - /** - * Return the raw input values rather than the parsed values. - * @default false - */ - raw?: boolean; - }, -) => ( - values: TFieldValues, - context: TContext | undefined, - options: ResolverOptions, -) => ResolverResult; diff --git a/bun.lock b/bun.lock new file mode 100644 index 00000000..b6d9c48f --- /dev/null +++ b/bun.lock @@ -0,0 +1,1593 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "@hookform/resolvers", + "dependencies": { + "caniuse-lite": "^1.0.30001698", + }, + "devDependencies": { + "@sinclair/typebox": "^0.34.15", + "@standard-schema/spec": "^1.0.0", + "@testing-library/dom": "^10.4.0", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.2.0", + "@testing-library/user-event": "^14.6.1", + "@types/node": "^22.12.0", + "@types/react": "^19.0.8", + "@typeschema/core": "^0.14.0", + "@typeschema/main": "^0.14.1", + "@typeschema/zod": "^0.14.0", + "@vinejs/vine": "^3.0.0", + "@vitejs/plugin-react": "^4.3.4", + "ajv": "^8.17.1", + "ajv-errors": "^3.0.0", + "arktype": "2.0.4", + "check-export-map": "^1.3.1", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", + "computed-types": "^1.11.2", + "cross-env": "^7.0.3", + "effect": "^3.12.7", + "fluentvalidation-ts": "^3.2.0", + "fp-ts": "^2.16.9", + "io-ts": "^2.2.22", + "io-ts-types": "^0.5.19", + "joi": "^17.13.3", + "jsdom": "^26.0.0", + "lefthook": "^1.10.10", + "microbundle": "^0.15.1", + "monocle-ts": "^2.3.13", + "newtype-ts": "^0.3.5", + "nope-validator": "^1.0.4", + "npm-run-all": "^4.1.5", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-hook-form": "^7.54.2", + "reflect-metadata": "^0.2.2", + "superstruct": "^2.0.2", + "typanion": "^3.14.0", + "typescript": "^5.7.3", + "valibot": "1.0.0-beta.12", + "vest": "^5.4.6", + "vite": "^6.0.11", + "vite-tsconfig-paths": "^5.1.4", + "vitest": "^3.0.4", + "yup": "^1.6.1", + "zod": "^3.24.1", + }, + "peerDependencies": { + "react-hook-form": "^7.0.0", + }, + }, + }, + "packages": { + "@adobe/css-tools": ["@adobe/css-tools@4.4.1", "", {}, "sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ=="], + + "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], + + "@ark/schema": ["@ark/schema@0.39.0", "", { "dependencies": { "@ark/util": "0.39.0" } }, "sha512-LQbQUb3Sj461LgklXObAyUJNtsUUCBxZlO2HqRLYvRSqpStm0xTMrXn51DwBNNxeSULvKVpXFwoxiSec9kwKww=="], + + "@ark/util": ["@ark/util@0.39.0", "", {}, "sha512-90APHVklk8BP4kku7hIh1BgrhuyKYqoZ4O7EybtFRo7cDl9mIyc/QUbGvYDg//73s0J2H0I/gW9pzroA1R4IBQ=="], + + "@asamuzakjp/css-color": ["@asamuzakjp/css-color@2.8.3", "", { "dependencies": { "@csstools/css-calc": "^2.1.1", "@csstools/css-color-parser": "^3.0.7", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "lru-cache": "^10.4.3" } }, "sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw=="], + + "@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], + + "@babel/compat-data": ["@babel/compat-data@7.26.5", "", {}, "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg=="], + + "@babel/core": ["@babel/core@7.26.7", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.5", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", "@babel/helpers": "^7.26.7", "@babel/parser": "^7.26.7", "@babel/template": "^7.25.9", "@babel/traverse": "^7.26.7", "@babel/types": "^7.26.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA=="], + + "@babel/generator": ["@babel/generator@7.26.5", "", { "dependencies": { "@babel/parser": "^7.26.5", "@babel/types": "^7.26.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw=="], + + "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.25.9", "", { "dependencies": { "@babel/types": "^7.25.9" } }, "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.26.5", "", { "dependencies": { "@babel/compat-data": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA=="], + + "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.25.9", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-member-expression-to-functions": "^7.25.9", "@babel/helper-optimise-call-expression": "^7.25.9", "@babel/helper-replace-supers": "^7.25.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", "@babel/traverse": "^7.25.9", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ=="], + + "@babel/helper-create-regexp-features-plugin": ["@babel/helper-create-regexp-features-plugin@7.26.3", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong=="], + + "@babel/helper-define-polyfill-provider": ["@babel/helper-define-polyfill-provider@0.6.3", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg=="], + + "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.25.9", "", { "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" } }, "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.25.9", "", { "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" } }, "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.26.0", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", "@babel/traverse": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw=="], + + "@babel/helper-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.25.9", "", { "dependencies": { "@babel/types": "^7.25.9" } }, "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ=="], + + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + + "@babel/helper-remap-async-to-generator": ["@babel/helper-remap-async-to-generator@7.25.9", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-wrap-function": "^7.25.9", "@babel/traverse": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw=="], + + "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.26.5", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.25.9", "@babel/helper-optimise-call-expression": "^7.25.9", "@babel/traverse": "^7.26.5" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg=="], + + "@babel/helper-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.25.9", "", { "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" } }, "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.25.9", "", {}, "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw=="], + + "@babel/helper-wrap-function": ["@babel/helper-wrap-function@7.25.9", "", { "dependencies": { "@babel/template": "^7.25.9", "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" } }, "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g=="], + + "@babel/helpers": ["@babel/helpers@7.26.7", "", { "dependencies": { "@babel/template": "^7.25.9", "@babel/types": "^7.26.7" } }, "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A=="], + + "@babel/parser": ["@babel/parser@7.26.7", "", { "dependencies": { "@babel/types": "^7.26.7" }, "bin": "./bin/babel-parser.js" }, "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w=="], + + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ["@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/traverse": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g=="], + + "@babel/plugin-bugfix-safari-class-field-initializer-scope": ["@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw=="], + + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug=="], + + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", "@babel/plugin-transform-optional-chaining": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g=="], + + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ["@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/traverse": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg=="], + + "@babel/plugin-proposal-class-properties": ["@babel/plugin-proposal-class-properties@7.12.1", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w=="], + + "@babel/plugin-proposal-private-property-in-object": ["@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w=="], + + "@babel/plugin-syntax-flow": ["@babel/plugin-syntax-flow@7.26.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg=="], + + "@babel/plugin-syntax-import-assertions": ["@babel/plugin-syntax-import-assertions@7.26.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg=="], + + "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.26.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A=="], + + "@babel/plugin-syntax-import-meta": ["@babel/plugin-syntax-import-meta@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g=="], + + "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA=="], + + "@babel/plugin-syntax-unicode-sets-regex": ["@babel/plugin-syntax-unicode-sets-regex@7.18.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg=="], + + "@babel/plugin-transform-arrow-functions": ["@babel/plugin-transform-arrow-functions@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg=="], + + "@babel/plugin-transform-async-generator-functions": ["@babel/plugin-transform-async-generator-functions@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-remap-async-to-generator": "^7.25.9", "@babel/traverse": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw=="], + + "@babel/plugin-transform-async-to-generator": ["@babel/plugin-transform-async-to-generator@7.25.9", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-remap-async-to-generator": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ=="], + + "@babel/plugin-transform-block-scoped-functions": ["@babel/plugin-transform-block-scoped-functions@7.26.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.26.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ=="], + + "@babel/plugin-transform-block-scoping": ["@babel/plugin-transform-block-scoping@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg=="], + + "@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.25.9", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q=="], + + "@babel/plugin-transform-class-static-block": ["@babel/plugin-transform-class-static-block@7.26.0", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ=="], + + "@babel/plugin-transform-classes": ["@babel/plugin-transform-classes@7.25.9", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-compilation-targets": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-replace-supers": "^7.25.9", "@babel/traverse": "^7.25.9", "globals": "^11.1.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg=="], + + "@babel/plugin-transform-computed-properties": ["@babel/plugin-transform-computed-properties@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/template": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA=="], + + "@babel/plugin-transform-destructuring": ["@babel/plugin-transform-destructuring@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ=="], + + "@babel/plugin-transform-dotall-regex": ["@babel/plugin-transform-dotall-regex@7.25.9", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA=="], + + "@babel/plugin-transform-duplicate-keys": ["@babel/plugin-transform-duplicate-keys@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw=="], + + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ["@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog=="], + + "@babel/plugin-transform-dynamic-import": ["@babel/plugin-transform-dynamic-import@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg=="], + + "@babel/plugin-transform-exponentiation-operator": ["@babel/plugin-transform-exponentiation-operator@7.26.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ=="], + + "@babel/plugin-transform-export-namespace-from": ["@babel/plugin-transform-export-namespace-from@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww=="], + + "@babel/plugin-transform-flow-strip-types": ["@babel/plugin-transform-flow-strip-types@7.26.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.26.5", "@babel/plugin-syntax-flow": "^7.26.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-eGK26RsbIkYUns3Y8qKl362juDDYK+wEdPGHGrhzUl6CewZFo55VZ7hg+CyMFU4dd5QQakBN86nBMpRsFpRvbQ=="], + + "@babel/plugin-transform-for-of": ["@babel/plugin-transform-for-of@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A=="], + + "@babel/plugin-transform-function-name": ["@babel/plugin-transform-function-name@7.25.9", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9", "@babel/traverse": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA=="], + + "@babel/plugin-transform-json-strings": ["@babel/plugin-transform-json-strings@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw=="], + + "@babel/plugin-transform-literals": ["@babel/plugin-transform-literals@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ=="], + + "@babel/plugin-transform-logical-assignment-operators": ["@babel/plugin-transform-logical-assignment-operators@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q=="], + + "@babel/plugin-transform-member-expression-literals": ["@babel/plugin-transform-member-expression-literals@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA=="], + + "@babel/plugin-transform-modules-amd": ["@babel/plugin-transform-modules-amd@7.25.9", "", { "dependencies": { "@babel/helper-module-transforms": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw=="], + + "@babel/plugin-transform-modules-commonjs": ["@babel/plugin-transform-modules-commonjs@7.26.3", "", { "dependencies": { "@babel/helper-module-transforms": "^7.26.0", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ=="], + + "@babel/plugin-transform-modules-systemjs": ["@babel/plugin-transform-modules-systemjs@7.25.9", "", { "dependencies": { "@babel/helper-module-transforms": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", "@babel/traverse": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA=="], + + "@babel/plugin-transform-modules-umd": ["@babel/plugin-transform-modules-umd@7.25.9", "", { "dependencies": { "@babel/helper-module-transforms": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw=="], + + "@babel/plugin-transform-named-capturing-groups-regex": ["@babel/plugin-transform-named-capturing-groups-regex@7.25.9", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA=="], + + "@babel/plugin-transform-new-target": ["@babel/plugin-transform-new-target@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ=="], + + "@babel/plugin-transform-nullish-coalescing-operator": ["@babel/plugin-transform-nullish-coalescing-operator@7.26.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.26.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw=="], + + "@babel/plugin-transform-numeric-separator": ["@babel/plugin-transform-numeric-separator@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q=="], + + "@babel/plugin-transform-object-rest-spread": ["@babel/plugin-transform-object-rest-spread@7.25.9", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9", "@babel/plugin-transform-parameters": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg=="], + + "@babel/plugin-transform-object-super": ["@babel/plugin-transform-object-super@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-replace-supers": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A=="], + + "@babel/plugin-transform-optional-catch-binding": ["@babel/plugin-transform-optional-catch-binding@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g=="], + + "@babel/plugin-transform-optional-chaining": ["@babel/plugin-transform-optional-chaining@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A=="], + + "@babel/plugin-transform-parameters": ["@babel/plugin-transform-parameters@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g=="], + + "@babel/plugin-transform-private-methods": ["@babel/plugin-transform-private-methods@7.25.9", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw=="], + + "@babel/plugin-transform-private-property-in-object": ["@babel/plugin-transform-private-property-in-object@7.25.9", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-create-class-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw=="], + + "@babel/plugin-transform-property-literals": ["@babel/plugin-transform-property-literals@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA=="], + + "@babel/plugin-transform-react-display-name": ["@babel/plugin-transform-react-display-name@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ=="], + + "@babel/plugin-transform-react-jsx": ["@babel/plugin-transform-react-jsx@7.25.9", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-module-imports": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9", "@babel/plugin-syntax-jsx": "^7.25.9", "@babel/types": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw=="], + + "@babel/plugin-transform-react-jsx-development": ["@babel/plugin-transform-react-jsx-development@7.25.9", "", { "dependencies": { "@babel/plugin-transform-react-jsx": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw=="], + + "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg=="], + + "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg=="], + + "@babel/plugin-transform-react-pure-annotations": ["@babel/plugin-transform-react-pure-annotations@7.25.9", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg=="], + + "@babel/plugin-transform-regenerator": ["@babel/plugin-transform-regenerator@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "regenerator-transform": "^0.15.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg=="], + + "@babel/plugin-transform-regexp-modifiers": ["@babel/plugin-transform-regexp-modifiers@7.26.0", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw=="], + + "@babel/plugin-transform-reserved-words": ["@babel/plugin-transform-reserved-words@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg=="], + + "@babel/plugin-transform-shorthand-properties": ["@babel/plugin-transform-shorthand-properties@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng=="], + + "@babel/plugin-transform-spread": ["@babel/plugin-transform-spread@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A=="], + + "@babel/plugin-transform-sticky-regex": ["@babel/plugin-transform-sticky-regex@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA=="], + + "@babel/plugin-transform-template-literals": ["@babel/plugin-transform-template-literals@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw=="], + + "@babel/plugin-transform-typeof-symbol": ["@babel/plugin-transform-typeof-symbol@7.26.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.26.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw=="], + + "@babel/plugin-transform-unicode-escapes": ["@babel/plugin-transform-unicode-escapes@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q=="], + + "@babel/plugin-transform-unicode-property-regex": ["@babel/plugin-transform-unicode-property-regex@7.25.9", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg=="], + + "@babel/plugin-transform-unicode-regex": ["@babel/plugin-transform-unicode-regex@7.25.9", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA=="], + + "@babel/plugin-transform-unicode-sets-regex": ["@babel/plugin-transform-unicode-sets-regex@7.25.9", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ=="], + + "@babel/preset-env": ["@babel/preset-env@7.26.7", "", { "dependencies": { "@babel/compat-data": "^7.26.5", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-import-assertions": "^7.26.0", "@babel/plugin-syntax-import-attributes": "^7.26.0", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.25.9", "@babel/plugin-transform-async-generator-functions": "^7.25.9", "@babel/plugin-transform-async-to-generator": "^7.25.9", "@babel/plugin-transform-block-scoped-functions": "^7.26.5", "@babel/plugin-transform-block-scoping": "^7.25.9", "@babel/plugin-transform-class-properties": "^7.25.9", "@babel/plugin-transform-class-static-block": "^7.26.0", "@babel/plugin-transform-classes": "^7.25.9", "@babel/plugin-transform-computed-properties": "^7.25.9", "@babel/plugin-transform-destructuring": "^7.25.9", "@babel/plugin-transform-dotall-regex": "^7.25.9", "@babel/plugin-transform-duplicate-keys": "^7.25.9", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-dynamic-import": "^7.25.9", "@babel/plugin-transform-exponentiation-operator": "^7.26.3", "@babel/plugin-transform-export-namespace-from": "^7.25.9", "@babel/plugin-transform-for-of": "^7.25.9", "@babel/plugin-transform-function-name": "^7.25.9", "@babel/plugin-transform-json-strings": "^7.25.9", "@babel/plugin-transform-literals": "^7.25.9", "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", "@babel/plugin-transform-member-expression-literals": "^7.25.9", "@babel/plugin-transform-modules-amd": "^7.25.9", "@babel/plugin-transform-modules-commonjs": "^7.26.3", "@babel/plugin-transform-modules-systemjs": "^7.25.9", "@babel/plugin-transform-modules-umd": "^7.25.9", "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-new-target": "^7.25.9", "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", "@babel/plugin-transform-numeric-separator": "^7.25.9", "@babel/plugin-transform-object-rest-spread": "^7.25.9", "@babel/plugin-transform-object-super": "^7.25.9", "@babel/plugin-transform-optional-catch-binding": "^7.25.9", "@babel/plugin-transform-optional-chaining": "^7.25.9", "@babel/plugin-transform-parameters": "^7.25.9", "@babel/plugin-transform-private-methods": "^7.25.9", "@babel/plugin-transform-private-property-in-object": "^7.25.9", "@babel/plugin-transform-property-literals": "^7.25.9", "@babel/plugin-transform-regenerator": "^7.25.9", "@babel/plugin-transform-regexp-modifiers": "^7.26.0", "@babel/plugin-transform-reserved-words": "^7.25.9", "@babel/plugin-transform-shorthand-properties": "^7.25.9", "@babel/plugin-transform-spread": "^7.25.9", "@babel/plugin-transform-sticky-regex": "^7.25.9", "@babel/plugin-transform-template-literals": "^7.25.9", "@babel/plugin-transform-typeof-symbol": "^7.26.7", "@babel/plugin-transform-unicode-escapes": "^7.25.9", "@babel/plugin-transform-unicode-property-regex": "^7.25.9", "@babel/plugin-transform-unicode-regex": "^7.25.9", "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.38.1", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ=="], + + "@babel/preset-flow": ["@babel/preset-flow@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-validator-option": "^7.25.9", "@babel/plugin-transform-flow-strip-types": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-EASHsAhE+SSlEzJ4bzfusnXSHiU+JfAYzj+jbw2vgQKgq5HrUr8qs+vgtiEL5dOH6sEweI+PNt2D7AqrDSHyqQ=="], + + "@babel/preset-modules": ["@babel/preset-modules@0.1.6-no-external-plugins", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA=="], + + "@babel/preset-react": ["@babel/preset-react@7.26.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", "@babel/helper-validator-option": "^7.25.9", "@babel/plugin-transform-react-display-name": "^7.25.9", "@babel/plugin-transform-react-jsx": "^7.25.9", "@babel/plugin-transform-react-jsx-development": "^7.25.9", "@babel/plugin-transform-react-pure-annotations": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw=="], + + "@babel/runtime": ["@babel/runtime@7.26.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ=="], + + "@babel/template": ["@babel/template@7.25.9", "", { "dependencies": { "@babel/code-frame": "^7.25.9", "@babel/parser": "^7.25.9", "@babel/types": "^7.25.9" } }, "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg=="], + + "@babel/traverse": ["@babel/traverse@7.26.7", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.5", "@babel/parser": "^7.26.7", "@babel/template": "^7.25.9", "@babel/types": "^7.26.7", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA=="], + + "@babel/types": ["@babel/types@7.26.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg=="], + + "@csstools/color-helpers": ["@csstools/color-helpers@5.0.1", "", {}, "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA=="], + + "@csstools/css-calc": ["@csstools/css-calc@2.1.1", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3" } }, "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag=="], + + "@csstools/css-color-parser": ["@csstools/css-color-parser@3.0.7", "", { "dependencies": { "@csstools/color-helpers": "^5.0.1", "@csstools/css-calc": "^2.1.1" }, "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3" } }, "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA=="], + + "@csstools/css-parser-algorithms": ["@csstools/css-parser-algorithms@3.0.4", "", { "peerDependencies": { "@csstools/css-tokenizer": "^3.0.3" } }, "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A=="], + + "@csstools/css-tokenizer": ["@csstools/css-tokenizer@3.0.3", "", {}, "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.24.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.24.2", "", { "os": "android", "cpu": "arm" }, "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.24.2", "", { "os": "android", "cpu": "arm64" }, "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.24.2", "", { "os": "android", "cpu": "x64" }, "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.24.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.24.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.24.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.24.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.24.2", "", { "os": "linux", "cpu": "arm" }, "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.24.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.24.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.24.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.24.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.24.2", "", { "os": "linux", "cpu": "x64" }, "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.24.2", "", { "os": "none", "cpu": "arm64" }, "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.24.2", "", { "os": "none", "cpu": "x64" }, "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.24.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.24.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.24.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.24.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.24.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.24.2", "", { "os": "win32", "cpu": "x64" }, "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg=="], + + "@hapi/hoek": ["@hapi/hoek@9.3.0", "", {}, "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ=="], + + "@hapi/topo": ["@hapi/topo@5.1.0", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="], + + "@jridgewell/source-map": ["@jridgewell/source-map@0.3.6", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + + "@poppinss/macroable": ["@poppinss/macroable@1.0.4", "", {}, "sha512-ct43jurbe7lsUX5eIrj4ijO3j/6zIPp7CDnFWXDs7UPAbw1Pu1iH3oAmFdP4jcskKJBURH5M9oTtyeiUXyHX8Q=="], + + "@rollup/plugin-alias": ["@rollup/plugin-alias@3.1.9", "", { "dependencies": { "slash": "^3.0.0" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw=="], + + "@rollup/plugin-babel": ["@rollup/plugin-babel@5.3.1", "", { "dependencies": { "@babel/helper-module-imports": "^7.10.4", "@rollup/pluginutils": "^3.1.0" }, "peerDependencies": { "@babel/core": "^7.0.0", "@types/babel__core": "^7.1.9", "rollup": "^1.20.0||^2.0.0" }, "optionalPeers": ["@types/babel__core"] }, "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q=="], + + "@rollup/plugin-commonjs": ["@rollup/plugin-commonjs@17.1.0", "", { "dependencies": { "@rollup/pluginutils": "^3.1.0", "commondir": "^1.0.1", "estree-walker": "^2.0.1", "glob": "^7.1.6", "is-reference": "^1.2.1", "magic-string": "^0.25.7", "resolve": "^1.17.0" }, "peerDependencies": { "rollup": "^2.30.0" } }, "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew=="], + + "@rollup/plugin-json": ["@rollup/plugin-json@4.1.0", "", { "dependencies": { "@rollup/pluginutils": "^3.0.8" }, "peerDependencies": { "rollup": "^1.20.0 || ^2.0.0" } }, "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw=="], + + "@rollup/plugin-node-resolve": ["@rollup/plugin-node-resolve@11.2.1", "", { "dependencies": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", "builtin-modules": "^3.1.0", "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.19.0" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg=="], + + "@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.34.5", "", { "os": "android", "cpu": "arm" }, "sha512-JXmmQcKQtpf3Z6lvA8akkrHDZ5AEfgc2hLMix1/X5BhQbezBQ0AP5GYLdU8jsQRme8qr2sscCe3wizp7UT0L9g=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.34.5", "", { "os": "android", "cpu": "arm64" }, "sha512-9/A8/ZBOprUjkrJoP9BBEq2vdSud6BPd3LChw09bJQiEZH5oN4kWIkHu90cA0Cj0cSF5cIaD76+0lA+d5KHmpQ=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.34.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-b9oCfgHKfc1AJEQ5sEpE8Kf6s7aeygj5bZAsl1hTpZc1V9cfZASFSXzzNj7o/BQNPbjmVkVxpCCLRhBfLXhJ5g=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.34.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-Gz42gKBQPoFdMYdsVqkcpttYOO/0aP7f+1CgMaeZEz0gss7dop1TsO3hT77Iroz/TV7PdPUG/RYlj9EA39L4dw=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.34.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-JPkafjkOFaupd8VQYsXfGFKC2pfMr7hwSYGkVGNwhbW0k0lHHyIdhCSNBendJ4O7YlT4yRyKXoms1TL7saO7SQ=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.34.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-j6Q8VFqyI8hZM33h1JC6DZK2w8ejkXqEMozTrtIEGfRVMpVZL3GrLOOYEUkAgUSpJ9sb2w+FEpjGj7IHRcQfdw=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.34.5", "", { "os": "linux", "cpu": "arm" }, "sha512-6jyiXKF9Xq6x9yQjct5xrRT0VghJk5VzAfed3o0hgncwacZkzOdR0TXLRNjexsEXWN8tG7jWWwsVk7WeFi//gw=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.34.5", "", { "os": "linux", "cpu": "arm" }, "sha512-cOTYe5tLcGAvGztRLIqx87LE7j/qjaAqFrrHsPFlnuhhhFO5LSr2AzvdQYuxomJMzMBrXkMRNl9bQEpDZ5bjLQ=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.34.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-KHlrd+YqmS7rriW+LBb1kQNYmd5w1sAIG3z7HEpnQOrg/skeYYv9DAcclGL9gpFdpnzmiAEkzsTT74kZWUtChQ=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.34.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-uOb6hzDqym4Sw+qw3+svS3SmwQGVUhyTdPKyHDdlYg1Z0aHjdNmjwRY7zw/90/UfBe/yD7Mv2mYKhQpOfy4RYA=="], + + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.34.5", "", { "os": "linux", "cpu": "none" }, "sha512-pARu8ZKANZH4wINLdHLKG69EPwJswM6A+Ox1a9LpiclRQoyjacFFTtXN3akKQ2ufJXDasO/pWvxKN9ZfCgEoFA=="], + + "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.34.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-crUWn12NRmCdao2YwS1GvlPCVypMBMJlexTaantaP2+dAMd2eZBErFcKG8hZYEHjSbbk2UoH1aTlyeA4iKLqSA=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.34.5", "", { "os": "linux", "cpu": "none" }, "sha512-XtD/oMhCdixi3x8rCNyDRMUsLo1Z+1UQcK+oR7AsjglGov9ETiT3TNFhUPzaGC1jH+uaMtPhxrVRUub+pnAKTg=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.34.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-V3+BvgyHb21aF7lw0sc78Tv0+xLp4lm2OM7CKFVrBuppsMvtl/9O5y2OX4tdDT0EhIsDP/ObJPqDuEg1ZoTwSQ=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.34.5", "", { "os": "linux", "cpu": "x64" }, "sha512-SkCIXLGk42yldTcH8UXh++m0snVxp9DLf4meb1mWm0lC8jzxjFBwSLGtUSeLgQDsC05iBaIhyjNX46DlByrApQ=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.34.5", "", { "os": "linux", "cpu": "x64" }, "sha512-iUcH3FBtBN2/Ce0rI84suRhD0+bB5BVEffqOwsGaX5py5TuYLOQa7S7oVBP0NKtB5rub3i9IvZtMXiD96l5v0A=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-PUbWd+h/h6rUowalDYIdc9S9LJXbQDMcJe0BjABl3oT3efYRgZ8aUe8ZZDSie7y+fz6Z+rueNfdorIbkWv5Eqg=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-3vncGhOJiAUR85fnAXJyvSp2GaDWYByIQmW68ZAr+e8kIxgvJ1VaZbfHD5BO5X6hwRQdY6Um/XfA3l5c2lV+OQ=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-Mi8yVUlQOoeBpY72n75VLATptPGvj2lHa47rQdK9kZ4MoG5Ve86aVIU+PO3tBklTCBtILtdRfXS0EvIbXgmCAg=="], + + "@sideway/address": ["@sideway/address@4.1.5", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q=="], + + "@sideway/formula": ["@sideway/formula@3.0.1", "", {}, "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg=="], + + "@sideway/pinpoint": ["@sideway/pinpoint@2.0.0", "", {}, "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="], + + "@sinclair/typebox": ["@sinclair/typebox@0.34.16", "", {}, "sha512-rIljj8VPYAfn26ANY+5pCNVBPiv6hSufuKGe46y65cJZpvx8vHvPXlU0Q/Le4OGtlNaL8Jg2FuhtvQX18lSIqA=="], + + "@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], + + "@surma/rollup-plugin-off-main-thread": ["@surma/rollup-plugin-off-main-thread@2.2.3", "", { "dependencies": { "ejs": "^3.1.6", "json5": "^2.2.0", "magic-string": "^0.25.0", "string.prototype.matchall": "^4.0.6" } }, "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ=="], + + "@testing-library/dom": ["@testing-library/dom@10.4.0", "", { "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", "aria-query": "5.3.0", "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", "lz-string": "^1.5.0", "pretty-format": "^27.0.2" } }, "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ=="], + + "@testing-library/jest-dom": ["@testing-library/jest-dom@6.6.3", "", { "dependencies": { "@adobe/css-tools": "^4.4.0", "aria-query": "^5.0.0", "chalk": "^3.0.0", "css.escape": "^1.5.1", "dom-accessibility-api": "^0.6.3", "lodash": "^4.17.21", "redent": "^3.0.0" } }, "sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA=="], + + "@testing-library/react": ["@testing-library/react@16.2.0", "", { "dependencies": { "@babel/runtime": "^7.12.5" }, "peerDependencies": { "@testing-library/dom": "^10.0.0", "@types/react": "^18.0.0 || ^19.0.0", "@types/react-dom": "^18.0.0 || ^19.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ=="], + + "@testing-library/user-event": ["@testing-library/user-event@14.6.1", "", { "peerDependencies": { "@testing-library/dom": ">=7.21.4" } }, "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw=="], + + "@trysound/sax": ["@trysound/sax@0.2.0", "", {}, "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="], + + "@types/aria-query": ["@types/aria-query@5.0.4", "", {}, "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw=="], + + "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], + + "@types/babel__generator": ["@types/babel__generator@7.6.8", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw=="], + + "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], + + "@types/babel__traverse": ["@types/babel__traverse@7.20.6", "", { "dependencies": { "@babel/types": "^7.20.7" } }, "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg=="], + + "@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="], + + "@types/node": ["@types/node@22.13.1", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew=="], + + "@types/parse-json": ["@types/parse-json@4.0.2", "", {}, "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="], + + "@types/react": ["@types/react@19.0.8", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw=="], + + "@types/resolve": ["@types/resolve@1.17.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw=="], + + "@types/validator": ["@types/validator@13.12.2", "", {}, "sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA=="], + + "@typeschema/core": ["@typeschema/core@0.14.0", "", { "peerDependencies": { "@types/json-schema": "^7.0.15" }, "optionalPeers": ["@types/json-schema"] }, "sha512-Ia6PtZHcL3KqsAWXjMi5xIyZ7XMH4aSnOQes8mfMLx+wGFGtGRNlwe6Y7cYvX+WfNK67OL0/HSe9t8QDygV0/w=="], + + "@typeschema/main": ["@typeschema/main@0.14.1", "", { "dependencies": { "@typeschema/core": "0.14.0" }, "peerDependencies": { "@typeschema/arktype": "0.14.0", "@typeschema/class-validator": "0.3.0", "@typeschema/deepkit": "0.14.0", "@typeschema/effect": "0.14.0", "@typeschema/fastest-validator": "0.2.0", "@typeschema/function": "0.14.0", "@typeschema/io-ts": "0.14.0", "@typeschema/joi": "0.14.0", "@typeschema/json": "0.14.0", "@typeschema/ow": "0.14.0", "@typeschema/runtypes": "0.14.0", "@typeschema/superstruct": "0.14.0", "@typeschema/suretype": "0.2.0", "@typeschema/typebox": "0.14.0", "@typeschema/valibot": "0.14.0", "@typeschema/valita": "0.2.0", "@typeschema/vine": "0.2.0", "@typeschema/yup": "0.14.0", "@typeschema/zod": "0.14.0" }, "optionalPeers": ["@typeschema/arktype", "@typeschema/class-validator", "@typeschema/deepkit", "@typeschema/effect", "@typeschema/fastest-validator", "@typeschema/function", "@typeschema/io-ts", "@typeschema/joi", "@typeschema/json", "@typeschema/ow", "@typeschema/runtypes", "@typeschema/superstruct", "@typeschema/suretype", "@typeschema/typebox", "@typeschema/valibot", "@typeschema/valita", "@typeschema/vine", "@typeschema/yup", "@typeschema/zod"] }, "sha512-ReYIFVmMawLn3rq6+fBhiDFH1LrolQd+kKcuglCgnMip20ou2h2YEuIcDoLJ1tQ/RQnBTPyfvs+BwEytW9YVDg=="], + + "@typeschema/zod": ["@typeschema/zod@0.14.0", "", { "dependencies": { "@typeschema/core": "0.14.0" }, "peerDependencies": { "zod": "^3.23.8", "zod-to-json-schema": "^3.23.2" }, "optionalPeers": ["zod", "zod-to-json-schema"] }, "sha512-oEX3lQFVKyGCmAV3KtVS290WpFukg/ZBXMOYpLFH/POlCaU8ojCJu5ehYvNDPZNK/f1KK9Vqlo28f7YX2g3O5w=="], + + "@vinejs/compiler": ["@vinejs/compiler@3.0.0", "", {}, "sha512-v9Lsv59nR56+bmy2p0+czjZxsLHwaibJ+SV5iK9JJfehlJMa501jUJQqqz4X/OqKXrxtE3uTQmSqjUqzF3B2mw=="], + + "@vinejs/vine": ["@vinejs/vine@3.0.0", "", { "dependencies": { "@poppinss/macroable": "^1.0.3", "@types/validator": "^13.12.2", "@vinejs/compiler": "^3.0.0", "camelcase": "^8.0.0", "dayjs": "^1.11.13", "dlv": "^1.1.3", "normalize-url": "^8.0.1", "validator": "^13.12.0" } }, "sha512-GeCAHLzKkL2kMFqatgqyiiNh+FILOSAV8x8imBDo6AWQ91w30Kaxw4FnzUDqgcd9z8aCYOBQ7RJxBBGfyr+USQ=="], + + "@vitejs/plugin-react": ["@vitejs/plugin-react@4.3.4", "", { "dependencies": { "@babel/core": "^7.26.0", "@babel/plugin-transform-react-jsx-self": "^7.25.9", "@babel/plugin-transform-react-jsx-source": "^7.25.9", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" } }, "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug=="], + + "@vitest/expect": ["@vitest/expect@3.0.5", "", { "dependencies": { "@vitest/spy": "3.0.5", "@vitest/utils": "3.0.5", "chai": "^5.1.2", "tinyrainbow": "^2.0.0" } }, "sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA=="], + + "@vitest/mocker": ["@vitest/mocker@3.0.5", "", { "dependencies": { "@vitest/spy": "3.0.5", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw=="], + + "@vitest/pretty-format": ["@vitest/pretty-format@3.0.5", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA=="], + + "@vitest/runner": ["@vitest/runner@3.0.5", "", { "dependencies": { "@vitest/utils": "3.0.5", "pathe": "^2.0.2" } }, "sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A=="], + + "@vitest/snapshot": ["@vitest/snapshot@3.0.5", "", { "dependencies": { "@vitest/pretty-format": "3.0.5", "magic-string": "^0.30.17", "pathe": "^2.0.2" } }, "sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA=="], + + "@vitest/spy": ["@vitest/spy@3.0.5", "", { "dependencies": { "tinyspy": "^3.0.2" } }, "sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg=="], + + "@vitest/utils": ["@vitest/utils@3.0.5", "", { "dependencies": { "@vitest/pretty-format": "3.0.5", "loupe": "^3.1.2", "tinyrainbow": "^2.0.0" } }, "sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg=="], + + "acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], + + "agent-base": ["agent-base@7.1.3", "", {}, "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw=="], + + "ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], + + "ajv-errors": ["ajv-errors@3.0.0", "", { "peerDependencies": { "ajv": "^8.0.1" } }, "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], + + "aria-query": ["aria-query@5.3.0", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A=="], + + "arktype": ["arktype@2.0.4", "", { "dependencies": { "@ark/schema": "0.39.0", "@ark/util": "0.39.0" } }, "sha512-S68rWVDnJauwH7/QCm8zCUM3aTe9Xk6oRihdcc3FSUAtxCo/q1Fwq46JhcwB5Ufv1YStwdQRz+00Y/URlvbhAQ=="], + + "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], + + "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], + + "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], + + "async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], + + "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], + + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + + "asyncro": ["asyncro@3.0.0", "", {}, "sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg=="], + + "autoprefixer": ["autoprefixer@10.4.20", "", { "dependencies": { "browserslist": "^4.23.3", "caniuse-lite": "^1.0.30001646", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g=="], + + "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], + + "babel-plugin-macros": ["babel-plugin-macros@3.1.0", "", { "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", "resolve": "^1.19.0" } }, "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg=="], + + "babel-plugin-polyfill-corejs2": ["babel-plugin-polyfill-corejs2@0.4.12", "", { "dependencies": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.6.3", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og=="], + + "babel-plugin-polyfill-corejs3": ["babel-plugin-polyfill-corejs3@0.10.6", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.2", "core-js-compat": "^3.38.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA=="], + + "babel-plugin-polyfill-regenerator": ["babel-plugin-polyfill-regenerator@0.6.3", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.3" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q=="], + + "babel-plugin-transform-async-to-promises": ["babel-plugin-transform-async-to-promises@0.8.18", "", {}, "sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw=="], + + "babel-plugin-transform-replace-expressions": ["babel-plugin-transform-replace-expressions@0.2.0", "", { "dependencies": { "@babel/parser": "^7.3.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], + + "brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], + + "brotli-size": ["brotli-size@4.0.0", "", { "dependencies": { "duplexer": "0.1.1" } }, "sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA=="], + + "browserslist": ["browserslist@4.24.4", "", { "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" } }, "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A=="], + + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "builtin-modules": ["builtin-modules@3.3.0", "", {}, "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw=="], + + "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], + + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g=="], + + "call-bound": ["call-bound@1.0.3", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "get-intrinsic": "^1.2.6" } }, "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA=="], + + "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], + + "camelcase": ["camelcase@8.0.0", "", {}, "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA=="], + + "caniuse-api": ["caniuse-api@3.0.0", "", { "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", "lodash.memoize": "^4.1.2", "lodash.uniq": "^4.5.0" } }, "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001698", "", {}, "sha512-xJ3km2oiG/MbNU8G6zIq6XRZ6HtAOVXsbOrP/blGazi52kc5Yy7b6sDA5O+FbROzRrV7BSTllLHuNvmawYUJjw=="], + + "chai": ["chai@5.1.2", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "check-error": ["check-error@2.1.1", "", {}, "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw=="], + + "check-export-map": ["check-export-map@1.3.1", "", { "dependencies": { "kolorist": "^1.5.0", "mri": "^1.2.0" }, "bin": { "check-export-map": "src/cli.js" } }, "sha512-HX3ZRYk8/CLBJ6kjf7B3U4RGbhcbboswAq9CVsbuEIDQ0OoRI15ms2h3z3RL7sOo6KEVgVb/BiVGw/XMdCLAJg=="], + + "class-transformer": ["class-transformer@0.5.1", "", {}, "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw=="], + + "class-validator": ["class-validator@0.14.1", "", { "dependencies": { "@types/validator": "^13.11.8", "libphonenumber-js": "^1.10.53", "validator": "^13.9.0" } }, "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ=="], + + "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + + "color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], + + "colord": ["colord@2.9.3", "", {}, "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="], + + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + + "commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + + "commondir": ["commondir@1.0.1", "", {}, "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="], + + "computed-types": ["computed-types@1.11.2", "", {}, "sha512-5KK7nQrJDtm0dByaXTY1ZnTmZchilV2cew2LqIDLQo9JGvrkSqbikfk0m+MpiEgTVTPPx3dFQmwKSkK6Iae5Jw=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "concat-with-sourcemaps": ["concat-with-sourcemaps@1.1.0", "", { "dependencies": { "source-map": "^0.6.1" } }, "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg=="], + + "context": ["context@3.0.33", "", { "dependencies": { "vest-utils": "^1.3.3" } }, "sha512-9nBbXhHVKRFLYKk3oa7W+aHt/eiGm5aIMp4Y4IwQsiAO+deRtlJ72EA8m7Cvs3v7gjjBuqKljvt2eyihVHUJoQ=="], + + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "core-js-compat": ["core-js-compat@3.40.0", "", { "dependencies": { "browserslist": "^4.24.3" } }, "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ=="], + + "cosmiconfig": ["cosmiconfig@7.1.0", "", { "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.10.0" } }, "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA=="], + + "cross-env": ["cross-env@7.0.3", "", { "dependencies": { "cross-spawn": "^7.0.1" }, "bin": { "cross-env": "src/bin/cross-env.js", "cross-env-shell": "src/bin/cross-env-shell.js" } }, "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "css-declaration-sorter": ["css-declaration-sorter@6.4.1", "", { "peerDependencies": { "postcss": "^8.0.9" } }, "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g=="], + + "css-select": ["css-select@4.3.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" } }, "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ=="], + + "css-tree": ["css-tree@1.1.3", "", { "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" } }, "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q=="], + + "css-what": ["css-what@6.1.0", "", {}, "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="], + + "css.escape": ["css.escape@1.5.1", "", {}, "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg=="], + + "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + + "cssnano": ["cssnano@5.1.15", "", { "dependencies": { "cssnano-preset-default": "^5.2.14", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw=="], + + "cssnano-preset-default": ["cssnano-preset-default@5.2.14", "", { "dependencies": { "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", "postcss-colormin": "^5.3.1", "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", "postcss-merge-longhand": "^5.1.7", "postcss-merge-rules": "^5.1.4", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", "postcss-minify-params": "^5.1.4", "postcss-minify-selectors": "^5.2.1", "postcss-normalize-charset": "^5.1.0", "postcss-normalize-display-values": "^5.1.0", "postcss-normalize-positions": "^5.1.1", "postcss-normalize-repeat-style": "^5.1.1", "postcss-normalize-string": "^5.1.0", "postcss-normalize-timing-functions": "^5.1.0", "postcss-normalize-unicode": "^5.1.1", "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", "postcss-reduce-initial": "^5.1.2", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A=="], + + "cssnano-utils": ["cssnano-utils@3.1.0", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA=="], + + "csso": ["csso@4.2.0", "", { "dependencies": { "css-tree": "^1.1.2" } }, "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA=="], + + "cssstyle": ["cssstyle@4.2.1", "", { "dependencies": { "@asamuzakjp/css-color": "^2.8.2", "rrweb-cssom": "^0.8.0" } }, "sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw=="], + + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + + "data-urls": ["data-urls@5.0.0", "", { "dependencies": { "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.0.0" } }, "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg=="], + + "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="], + + "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="], + + "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], + + "dayjs": ["dayjs@1.11.13", "", {}, "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="], + + "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + + "decimal.js": ["decimal.js@10.5.0", "", {}, "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw=="], + + "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], + + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + + "define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], + + "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + + "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + + "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], + + "dom-accessibility-api": ["dom-accessibility-api@0.5.16", "", {}, "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg=="], + + "dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], + + "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], + + "domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], + + "domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "duplexer": ["duplexer@0.1.1", "", {}, "sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q=="], + + "effect": ["effect@3.12.10", "", { "dependencies": { "fast-check": "^3.23.1" } }, "sha512-fGg3sEN+l1rffWJvXICBTqyyzpa4y1uNo3aI/JLezJDmDk0Qj/WHiy6wVe0cecdr0eFU0XkZcFu2TWpgV8kBiw=="], + + "ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.95", "", {}, "sha512-XNsZaQrgQX+BG37BRQv+E+HcOZlWhqYaDoVVNCws/WrYYdbGrkR1qCDJ2mviBF3flCs6/BTa4O7ANfFTFZk6Dg=="], + + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + + "error-ex": ["error-ex@1.3.2", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="], + + "es-abstract": ["es-abstract@1.23.9", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.3", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.0", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-regex": "^1.2.1", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.0", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.3", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.18" } }, "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-module-lexer": ["es-module-lexer@1.6.0", "", {}, "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + + "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], + + "esbuild": ["esbuild@0.24.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.24.2", "@esbuild/android-arm": "0.24.2", "@esbuild/android-arm64": "0.24.2", "@esbuild/android-x64": "0.24.2", "@esbuild/darwin-arm64": "0.24.2", "@esbuild/darwin-x64": "0.24.2", "@esbuild/freebsd-arm64": "0.24.2", "@esbuild/freebsd-x64": "0.24.2", "@esbuild/linux-arm": "0.24.2", "@esbuild/linux-arm64": "0.24.2", "@esbuild/linux-ia32": "0.24.2", "@esbuild/linux-loong64": "0.24.2", "@esbuild/linux-mips64el": "0.24.2", "@esbuild/linux-ppc64": "0.24.2", "@esbuild/linux-riscv64": "0.24.2", "@esbuild/linux-s390x": "0.24.2", "@esbuild/linux-x64": "0.24.2", "@esbuild/netbsd-arm64": "0.24.2", "@esbuild/netbsd-x64": "0.24.2", "@esbuild/openbsd-arm64": "0.24.2", "@esbuild/openbsd-x64": "0.24.2", "@esbuild/sunos-x64": "0.24.2", "@esbuild/win32-arm64": "0.24.2", "@esbuild/win32-ia32": "0.24.2", "@esbuild/win32-x64": "0.24.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], + + "expect-type": ["expect-type@1.1.0", "", {}, "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA=="], + + "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "^6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="], + + "figures": ["figures@1.7.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5", "object-assign": "^4.1.0" } }, "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ=="], + + "filelist": ["filelist@1.0.4", "", { "dependencies": { "minimatch": "^5.0.1" } }, "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q=="], + + "filesize": ["filesize@6.4.0", "", {}, "sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ=="], + + "find-cache-dir": ["find-cache-dir@3.3.2", "", { "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" } }, "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig=="], + + "find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + + "fluentvalidation-ts": ["fluentvalidation-ts@3.2.0", "", {}, "sha512-QVAiF9qhGarwM1BrL4Ao1oeCRGvhvm1boZ3DaHlerMAtKB+1a4sdMAVlFeUbEuyedq8/uGFurGmWbQhlIfLMEw=="], + + "for-each": ["for-each@0.3.4", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw=="], + + "form-data": ["form-data@4.0.1", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw=="], + + "fp-ts": ["fp-ts@2.16.9", "", {}, "sha512-+I2+FnVB+tVaxcYyQkHUq7ZdKScaBlX53A41mxQtpIccsfyv8PzdzP7fzp2AY832T4aoK6UZ5WRX/ebGd8uZuQ=="], + + "fraction.js": ["fraction.js@4.3.7", "", {}, "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="], + + "fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], + + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="], + + "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], + + "generic-names": ["generic-names@4.0.0", "", { "dependencies": { "loader-utils": "^3.2.0" } }, "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A=="], + + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + + "get-intrinsic": ["get-intrinsic@1.2.7", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", "get-proto": "^1.0.0", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], + + "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], + + "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], + + "globalyzer": ["globalyzer@0.1.0", "", {}, "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q=="], + + "globrex": ["globrex@0.1.2", "", {}, "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "gzip-size": ["gzip-size@6.0.0", "", { "dependencies": { "duplexer": "^0.1.2" } }, "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q=="], + + "has-ansi": ["has-ansi@2.0.0", "", { "dependencies": { "ansi-regex": "^2.0.0" } }, "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg=="], + + "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], + + "has-proto": ["has-proto@1.2.0", "", { "dependencies": { "dunder-proto": "^1.0.0" } }, "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], + + "html-encoding-sniffer": ["html-encoding-sniffer@4.0.0", "", { "dependencies": { "whatwg-encoding": "^3.1.1" } }, "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ=="], + + "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], + + "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "icss-replace-symbols": ["icss-replace-symbols@1.1.0", "", {}, "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg=="], + + "icss-utils": ["icss-utils@5.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA=="], + + "import-cwd": ["import-cwd@3.0.0", "", { "dependencies": { "import-from": "^3.0.0" } }, "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg=="], + + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + + "import-from": ["import-from@3.0.0", "", { "dependencies": { "resolve-from": "^5.0.0" } }, "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ=="], + + "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], + + "io-ts": ["io-ts@2.2.22", "", { "peerDependencies": { "fp-ts": "^2.5.0" } }, "sha512-FHCCztTkHoV9mdBsHpocLpdTAfh956ZQcIkWQxxS0U5HT53vtrcuYdQneEJKH6xILaLNzXVl2Cvwtoy8XNN0AA=="], + + "io-ts-types": ["io-ts-types@0.5.19", "", { "peerDependencies": { "fp-ts": "^2.0.0", "io-ts": "^2.0.0", "monocle-ts": "^2.0.0", "newtype-ts": "^0.3.2" } }, "sha512-kQOYYDZG5vKre+INIDZbLeDJe+oM+4zLpUkjXyTMyUfoCpjJNyi29ZLkuEAwcPufaYo3yu/BsemZtbdD+NtRfQ=="], + + "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], + + "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], + + "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], + + "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], + + "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], + + "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], + + "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + + "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], + + "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], + + "is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], + + "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-generator-function": ["is-generator-function@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ=="], + + "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], + + "is-module": ["is-module@1.0.0", "", {}, "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="], + + "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], + + "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], + + "is-reference": ["is-reference@1.2.1", "", { "dependencies": { "@types/estree": "*" } }, "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ=="], + + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + + "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], + + "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], + + "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], + + "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], + + "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="], + + "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], + + "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], + + "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], + + "is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + + "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "jake": ["jake@10.9.2", "", { "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", "filelist": "^1.0.4", "minimatch": "^3.1.2" }, "bin": { "jake": "bin/cli.js" } }, "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA=="], + + "jest-worker": ["jest-worker@26.6.2", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^7.0.0" } }, "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ=="], + + "joi": ["joi@17.13.3", "", { "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA=="], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "jsdom": ["jsdom@26.0.0", "", { "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", "form-data": "^4.0.1", "html-encoding-sniffer": "^4.0.0", "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.16", "parse5": "^7.2.1", "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^5.0.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.1.0", "ws": "^8.18.0", "xml-name-validator": "^5.0.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw=="], + + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "json-parse-better-errors": ["json-parse-better-errors@1.0.2", "", {}, "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="], + + "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], + + "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "jsonfile": ["jsonfile@6.1.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ=="], + + "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], + + "kolorist": ["kolorist@1.8.0", "", {}, "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ=="], + + "lefthook": ["lefthook@1.10.10", "", { "optionalDependencies": { "lefthook-darwin-arm64": "1.10.10", "lefthook-darwin-x64": "1.10.10", "lefthook-freebsd-arm64": "1.10.10", "lefthook-freebsd-x64": "1.10.10", "lefthook-linux-arm64": "1.10.10", "lefthook-linux-x64": "1.10.10", "lefthook-openbsd-arm64": "1.10.10", "lefthook-openbsd-x64": "1.10.10", "lefthook-windows-arm64": "1.10.10", "lefthook-windows-x64": "1.10.10" }, "bin": { "lefthook": "bin/index.js" } }, "sha512-YW0fTONgOXsephvXq2gIFbegCW19MHCyKYX7JDWmzVF1ZiVMnDBYUL/SP3i0RtFvlCmqENl4SgKwYYQGUMnvig=="], + + "lefthook-darwin-arm64": ["lefthook-darwin-arm64@1.10.10", "", { "os": "darwin", "cpu": "arm64" }, "sha512-hEypKdwWpmNSl4Q8eJxgmlGb2ybJj1+W5/v13Mxc+ApEmjbpNiJzPcdjC9zyaMEpPK4EybiHy8g5ZC0dLOwkpA=="], + + "lefthook-darwin-x64": ["lefthook-darwin-x64@1.10.10", "", { "os": "darwin", "cpu": "x64" }, "sha512-9xNbeE78i4Amz+uOheg9dcy7X/6X12h98SUMrYWk7fONvjW/Bp9h6nPGIGxI5krHp9iRB8rhmo33ljVDVtTlyg=="], + + "lefthook-freebsd-arm64": ["lefthook-freebsd-arm64@1.10.10", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-GT9wYxPxkvO1rtIAmctayT9xQIVII5xUIG3Pv6gZo+r6yEyle0EFTLFDbmVje7p7rQNCsvJ8XzCNdnyDrva90g=="], + + "lefthook-freebsd-x64": ["lefthook-freebsd-x64@1.10.10", "", { "os": "freebsd", "cpu": "x64" }, "sha512-2BB/HRhEb9wGpk5K38iNkHtMPnn+TjXDtFG6C/AmUPLXLNhGnNiYp+v2uhUE8quWzxJx7QzfnU7Ga+/gzJcIcw=="], + + "lefthook-linux-arm64": ["lefthook-linux-arm64@1.10.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-GJ7GALKJ1NcMnNZG9uY+zJR3yS8q7/MgcHFWSJhBl+w4KTiiD/RAdSl5ALwEK2+UX36Eo+7iQA7AXzaRdAii4w=="], + + "lefthook-linux-x64": ["lefthook-linux-x64@1.10.10", "", { "os": "linux", "cpu": "x64" }, "sha512-dWUvPM9YTIJ3+X9dB+8iOnzoVHbnNmpscmUqEOKSeizgBrvuuIYKZJGDyjEtw65Qnmn1SJ7ouSaKK93p5c7SkQ=="], + + "lefthook-openbsd-arm64": ["lefthook-openbsd-arm64@1.10.10", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-KnwDyxOvbvGSBTbEF/OxkynZRPLowd3mIXUKHtkg3ABcQ4UREalX+Sh0nWU2dNjQbINx7Eh6B42TxNC7h+qXEg=="], + + "lefthook-openbsd-x64": ["lefthook-openbsd-x64@1.10.10", "", { "os": "openbsd", "cpu": "x64" }, "sha512-49nnG886CI3WkrzVJ71D1M2KWpUYN1BP9LMKNzN11cmZ0j6dUK4hj3nbW+NcrKXxgYzzyLU3FFwrc51OVy2eKA=="], + + "lefthook-windows-arm64": ["lefthook-windows-arm64@1.10.10", "", { "os": "win32", "cpu": "arm64" }, "sha512-9ni0Tsnk+O5oL7EBfKj9C5ZctD1mrTyHCtiu1zQJBbREReJtPjIM9DwWzecfbuVfrIlpbviVQvx5mjZ44bqlWw=="], + + "lefthook-windows-x64": ["lefthook-windows-x64@1.10.10", "", { "os": "win32", "cpu": "x64" }, "sha512-gkKWYrlay4iecFfY1Ris5VcRYa0BaNJKMk0qE/wZmIpMgu4GvNg+f9BEwTMflkQIanABduT9lrECaL1lX5ClKw=="], + + "libphonenumber-js": ["libphonenumber-js@1.11.19", "", {}, "sha512-bW/Yp/9dod6fmyR+XqSUL1N5JE7QRxQ3KrBIbYS1FTv32e5i3SEtQVX+71CYNv8maWNSOgnlCoNp9X78f/cKiA=="], + + "lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], + + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + + "load-json-file": ["load-json-file@4.0.0", "", { "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" } }, "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw=="], + + "loader-utils": ["loader-utils@3.3.1", "", {}, "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg=="], + + "locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + + "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], + + "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], + + "lodash.memoize": ["lodash.memoize@4.1.2", "", {}, "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="], + + "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], + + "lodash.uniq": ["lodash.uniq@4.5.0", "", {}, "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="], + + "loupe": ["loupe@3.1.3", "", {}, "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug=="], + + "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "lz-string": ["lz-string@1.5.0", "", { "bin": { "lz-string": "bin/bin.js" } }, "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ=="], + + "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], + + "make-dir": ["make-dir@3.1.0", "", { "dependencies": { "semver": "^6.0.0" } }, "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "maxmin": ["maxmin@2.1.0", "", { "dependencies": { "chalk": "^1.0.0", "figures": "^1.0.1", "gzip-size": "^3.0.0", "pretty-bytes": "^3.0.0" } }, "sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw=="], + + "mdn-data": ["mdn-data@2.0.14", "", {}, "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow=="], + + "memorystream": ["memorystream@0.3.1", "", {}, "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw=="], + + "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], + + "microbundle": ["microbundle@0.15.1", "", { "dependencies": { "@babel/core": "^7.12.10", "@babel/plugin-proposal-class-properties": "7.12.1", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-jsx": "^7.12.1", "@babel/plugin-transform-flow-strip-types": "^7.12.10", "@babel/plugin-transform-react-jsx": "^7.12.11", "@babel/plugin-transform-regenerator": "^7.12.1", "@babel/preset-env": "^7.12.11", "@babel/preset-flow": "^7.12.1", "@babel/preset-react": "^7.12.10", "@rollup/plugin-alias": "^3.1.1", "@rollup/plugin-babel": "^5.2.2", "@rollup/plugin-commonjs": "^17.0.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^11.0.1", "@surma/rollup-plugin-off-main-thread": "^2.2.2", "asyncro": "^3.0.0", "autoprefixer": "^10.1.0", "babel-plugin-macros": "^3.0.1", "babel-plugin-transform-async-to-promises": "^0.8.18", "babel-plugin-transform-replace-expressions": "^0.2.0", "brotli-size": "^4.0.0", "builtin-modules": "^3.1.0", "camelcase": "^6.2.0", "escape-string-regexp": "^4.0.0", "filesize": "^6.1.0", "gzip-size": "^6.0.0", "kleur": "^4.1.3", "lodash.merge": "^4.6.2", "postcss": "^8.2.1", "pretty-bytes": "^5.4.1", "rollup": "^2.35.1", "rollup-plugin-bundle-size": "^1.0.3", "rollup-plugin-postcss": "^4.0.0", "rollup-plugin-terser": "^7.0.2", "rollup-plugin-typescript2": "^0.32.0", "rollup-plugin-visualizer": "^5.6.0", "sade": "^1.7.4", "terser": "^5.7.0", "tiny-glob": "^0.2.8", "tslib": "^2.0.3", "typescript": "^4.1.3" }, "bin": { "microbundle": "dist/cli.js" } }, "sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q=="], + + "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "min-indent": ["min-indent@1.0.1", "", {}, "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="], + + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "monocle-ts": ["monocle-ts@2.3.13", "", { "peerDependencies": { "fp-ts": "^2.5.0" } }, "sha512-D5Ygd3oulEoAm3KuGO0eeJIrhFf1jlQIoEVV2DYsZUMz42j4tGxgct97Aq68+F8w4w4geEnwFa8HayTS/7lpKQ=="], + + "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "n4s": ["n4s@5.0.28", "", { "dependencies": { "context": "^3.0.33", "vest-utils": "^1.3.3" } }, "sha512-64ap7Qn8Oyua2ImIZH6/pkql89qyiTZ4jJqpS2g863++0tgbM4cuv3KJvZqMpa8kY2ovZ4q3cD0/KU4SImjg5g=="], + + "nanoid": ["nanoid@3.3.8", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="], + + "newtype-ts": ["newtype-ts@0.3.5", "", { "peerDependencies": { "fp-ts": "^2.0.0", "monocle-ts": "^2.0.0" } }, "sha512-v83UEQMlVR75yf1OUdoSFssjitxzjZlqBAjiGQ4WJaML8Jdc68LJ+BaSAXUmKY4bNzp7hygkKLYTsDi14PxI2g=="], + + "nice-try": ["nice-try@1.0.5", "", {}, "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="], + + "node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="], + + "nope-validator": ["nope-validator@1.0.4", "", {}, "sha512-+ooCIlPpDJbD8H9oz+izVqe28ZO+Km6WCGYJnkm+DOLkAWunhDwxV9PyZ5J2gZ/URFeX3u1Mk+yz7kIra5wayg=="], + + "normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], + + "normalize-range": ["normalize-range@0.1.2", "", {}, "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="], + + "normalize-url": ["normalize-url@8.0.1", "", {}, "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w=="], + + "npm-run-all": ["npm-run-all@4.1.5", "", { "dependencies": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", "cross-spawn": "^6.0.5", "memorystream": "^0.3.1", "minimatch": "^3.0.4", "pidtree": "^0.3.0", "read-pkg": "^3.0.0", "shell-quote": "^1.6.1", "string.prototype.padend": "^3.0.0" }, "bin": { "run-p": "bin/run-p/index.js", "run-s": "bin/run-s/index.js", "npm-run-all": "bin/npm-run-all/index.js" } }, "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ=="], + + "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + + "number-is-nan": ["number-is-nan@1.0.1", "", {}, "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ=="], + + "nwsapi": ["nwsapi@2.2.16", "", {}, "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + + "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], + + "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], + + "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], + + "p-finally": ["p-finally@1.0.0", "", {}, "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="], + + "p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], + + "p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + + "p-queue": ["p-queue@6.6.2", "", { "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" } }, "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ=="], + + "p-timeout": ["p-timeout@3.2.0", "", { "dependencies": { "p-finally": "^1.0.0" } }, "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg=="], + + "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], + + "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], + + "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + + "parse5": ["parse5@7.2.1", "", { "dependencies": { "entities": "^4.5.0" } }, "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ=="], + + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + + "path-type": ["path-type@3.0.0", "", { "dependencies": { "pify": "^3.0.0" } }, "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg=="], + + "pathe": ["pathe@2.0.2", "", {}, "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w=="], + + "pathval": ["pathval@2.0.0", "", {}, "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + + "pidtree": ["pidtree@0.3.1", "", { "bin": { "pidtree": "bin/pidtree.js" } }, "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA=="], + + "pify": ["pify@5.0.0", "", {}, "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA=="], + + "pkg-dir": ["pkg-dir@4.2.0", "", { "dependencies": { "find-up": "^4.0.0" } }, "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ=="], + + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], + + "postcss": ["postcss@8.5.1", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ=="], + + "postcss-calc": ["postcss-calc@8.2.4", "", { "dependencies": { "postcss-selector-parser": "^6.0.9", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.2" } }, "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q=="], + + "postcss-colormin": ["postcss-colormin@5.3.1", "", { "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ=="], + + "postcss-convert-values": ["postcss-convert-values@5.1.3", "", { "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA=="], + + "postcss-discard-comments": ["postcss-discard-comments@5.1.2", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ=="], + + "postcss-discard-duplicates": ["postcss-discard-duplicates@5.1.0", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw=="], + + "postcss-discard-empty": ["postcss-discard-empty@5.1.1", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A=="], + + "postcss-discard-overridden": ["postcss-discard-overridden@5.1.0", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw=="], + + "postcss-load-config": ["postcss-load-config@3.1.4", "", { "dependencies": { "lilconfig": "^2.0.5", "yaml": "^1.10.2" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg=="], + + "postcss-merge-longhand": ["postcss-merge-longhand@5.1.7", "", { "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^5.1.1" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ=="], + + "postcss-merge-rules": ["postcss-merge-rules@5.1.4", "", { "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g=="], + + "postcss-minify-font-values": ["postcss-minify-font-values@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA=="], + + "postcss-minify-gradients": ["postcss-minify-gradients@5.1.1", "", { "dependencies": { "colord": "^2.9.1", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw=="], + + "postcss-minify-params": ["postcss-minify-params@5.1.4", "", { "dependencies": { "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw=="], + + "postcss-minify-selectors": ["postcss-minify-selectors@5.2.1", "", { "dependencies": { "postcss-selector-parser": "^6.0.5" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg=="], + + "postcss-modules": ["postcss-modules@4.3.1", "", { "dependencies": { "generic-names": "^4.0.0", "icss-replace-symbols": "^1.1.0", "lodash.camelcase": "^4.3.0", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "string-hash": "^1.1.1" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q=="], + + "postcss-modules-extract-imports": ["postcss-modules-extract-imports@3.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q=="], + + "postcss-modules-local-by-default": ["postcss-modules-local-by-default@4.2.0", "", { "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw=="], + + "postcss-modules-scope": ["postcss-modules-scope@3.2.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA=="], + + "postcss-modules-values": ["postcss-modules-values@4.0.0", "", { "dependencies": { "icss-utils": "^5.0.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ=="], + + "postcss-normalize-charset": ["postcss-normalize-charset@5.1.0", "", { "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg=="], + + "postcss-normalize-display-values": ["postcss-normalize-display-values@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA=="], + + "postcss-normalize-positions": ["postcss-normalize-positions@5.1.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg=="], + + "postcss-normalize-repeat-style": ["postcss-normalize-repeat-style@5.1.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g=="], + + "postcss-normalize-string": ["postcss-normalize-string@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w=="], + + "postcss-normalize-timing-functions": ["postcss-normalize-timing-functions@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg=="], + + "postcss-normalize-unicode": ["postcss-normalize-unicode@5.1.1", "", { "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA=="], + + "postcss-normalize-url": ["postcss-normalize-url@5.1.0", "", { "dependencies": { "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew=="], + + "postcss-normalize-whitespace": ["postcss-normalize-whitespace@5.1.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA=="], + + "postcss-ordered-values": ["postcss-ordered-values@5.1.3", "", { "dependencies": { "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ=="], + + "postcss-reduce-initial": ["postcss-reduce-initial@5.1.2", "", { "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg=="], + + "postcss-reduce-transforms": ["postcss-reduce-transforms@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ=="], + + "postcss-selector-parser": ["postcss-selector-parser@7.0.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ=="], + + "postcss-svgo": ["postcss-svgo@5.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^2.7.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA=="], + + "postcss-unique-selectors": ["postcss-unique-selectors@5.1.1", "", { "dependencies": { "postcss-selector-parser": "^6.0.5" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA=="], + + "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + + "pretty-bytes": ["pretty-bytes@5.6.0", "", {}, "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg=="], + + "pretty-format": ["pretty-format@27.5.1", "", { "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" } }, "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ=="], + + "promise.series": ["promise.series@0.2.0", "", {}, "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ=="], + + "property-expr": ["property-expr@2.0.6", "", {}, "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], + + "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], + + "react": ["react@19.0.0", "", {}, "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ=="], + + "react-dom": ["react-dom@19.0.0", "", { "dependencies": { "scheduler": "^0.25.0" }, "peerDependencies": { "react": "^19.0.0" } }, "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ=="], + + "react-hook-form": ["react-hook-form@7.54.2", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg=="], + + "react-is": ["react-is@17.0.2", "", {}, "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="], + + "react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], + + "read-pkg": ["read-pkg@3.0.0", "", { "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" } }, "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA=="], + + "redent": ["redent@3.0.0", "", { "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" } }, "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg=="], + + "reflect-metadata": ["reflect-metadata@0.2.2", "", {}, "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="], + + "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], + + "regenerate": ["regenerate@1.4.2", "", {}, "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="], + + "regenerate-unicode-properties": ["regenerate-unicode-properties@10.2.0", "", { "dependencies": { "regenerate": "^1.4.2" } }, "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA=="], + + "regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="], + + "regenerator-transform": ["regenerator-transform@0.15.2", "", { "dependencies": { "@babel/runtime": "^7.8.4" } }, "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg=="], + + "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + + "regexpu-core": ["regexpu-core@6.2.0", "", { "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.0", "regjsgen": "^0.8.0", "regjsparser": "^0.12.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" } }, "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA=="], + + "regjsgen": ["regjsgen@0.8.0", "", {}, "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q=="], + + "regjsparser": ["regjsparser@0.12.0", "", { "dependencies": { "jsesc": "~3.0.2" }, "bin": { "regjsparser": "bin/parser" } }, "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ=="], + + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + + "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], + + "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + + "rollup": ["rollup@2.79.2", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ=="], + + "rollup-plugin-bundle-size": ["rollup-plugin-bundle-size@1.0.3", "", { "dependencies": { "chalk": "^1.1.3", "maxmin": "^2.1.0" } }, "sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ=="], + + "rollup-plugin-postcss": ["rollup-plugin-postcss@4.0.2", "", { "dependencies": { "chalk": "^4.1.0", "concat-with-sourcemaps": "^1.1.0", "cssnano": "^5.0.1", "import-cwd": "^3.0.0", "p-queue": "^6.6.2", "pify": "^5.0.0", "postcss-load-config": "^3.0.0", "postcss-modules": "^4.0.0", "promise.series": "^0.2.0", "resolve": "^1.19.0", "rollup-pluginutils": "^2.8.2", "safe-identifier": "^0.4.2", "style-inject": "^0.3.0" }, "peerDependencies": { "postcss": "8.x" } }, "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w=="], + + "rollup-plugin-terser": ["rollup-plugin-terser@7.0.2", "", { "dependencies": { "@babel/code-frame": "^7.10.4", "jest-worker": "^26.2.1", "serialize-javascript": "^4.0.0", "terser": "^5.0.0" }, "peerDependencies": { "rollup": "^2.0.0" } }, "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ=="], + + "rollup-plugin-typescript2": ["rollup-plugin-typescript2@0.32.1", "", { "dependencies": { "@rollup/pluginutils": "^4.1.2", "find-cache-dir": "^3.3.2", "fs-extra": "^10.0.0", "resolve": "^1.20.0", "tslib": "^2.4.0" }, "peerDependencies": { "rollup": ">=1.26.3", "typescript": ">=2.4.0" } }, "sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw=="], + + "rollup-plugin-visualizer": ["rollup-plugin-visualizer@5.14.0", "", { "dependencies": { "open": "^8.4.0", "picomatch": "^4.0.2", "source-map": "^0.7.4", "yargs": "^17.5.1" }, "peerDependencies": { "rolldown": "1.x", "rollup": "2.x || 3.x || 4.x" }, "optionalPeers": ["rolldown", "rollup"], "bin": { "rollup-plugin-visualizer": "dist/bin/cli.js" } }, "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA=="], + + "rollup-pluginutils": ["rollup-pluginutils@2.8.2", "", { "dependencies": { "estree-walker": "^0.6.1" } }, "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ=="], + + "rrweb-cssom": ["rrweb-cssom@0.8.0", "", {}, "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw=="], + + "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], + + "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safe-identifier": ["safe-identifier@0.4.2", "", {}, "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w=="], + + "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="], + + "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="], + + "scheduler": ["scheduler@0.25.0", "", {}, "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA=="], + + "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "serialize-javascript": ["serialize-javascript@4.0.0", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw=="], + + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], + + "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], + + "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "shell-quote": ["shell-quote@1.8.2", "", {}, "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA=="], + + "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + + "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + + "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], + + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + + "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], + + "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], + + "source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + + "sourcemap-codec": ["sourcemap-codec@1.4.8", "", {}, "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="], + + "spdx-correct": ["spdx-correct@3.2.0", "", { "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA=="], + + "spdx-exceptions": ["spdx-exceptions@2.5.0", "", {}, "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="], + + "spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="], + + "spdx-license-ids": ["spdx-license-ids@3.0.21", "", {}, "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg=="], + + "stable": ["stable@0.1.8", "", {}, "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="], + + "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], + + "std-env": ["std-env@3.8.0", "", {}, "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w=="], + + "string-hash": ["string-hash@1.1.3", "", {}, "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A=="], + + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="], + + "string.prototype.padend": ["string.prototype.padend@3.1.6", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q=="], + + "string.prototype.trim": ["string.prototype.trim@1.2.10", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" } }, "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA=="], + + "string.prototype.trimend": ["string.prototype.trimend@1.0.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ=="], + + "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], + + "strip-ansi": ["strip-ansi@3.0.1", "", { "dependencies": { "ansi-regex": "^2.0.0" } }, "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg=="], + + "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + + "strip-indent": ["strip-indent@3.0.0", "", { "dependencies": { "min-indent": "^1.0.0" } }, "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ=="], + + "style-inject": ["style-inject@0.3.0", "", {}, "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw=="], + + "stylehacks": ["stylehacks@5.1.1", "", { "dependencies": { "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" }, "peerDependencies": { "postcss": "^8.2.15" } }, "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw=="], + + "superstruct": ["superstruct@2.0.2", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + + "svgo": ["svgo@2.8.0", "", { "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", "css-select": "^4.1.3", "css-tree": "^1.1.3", "csso": "^4.2.0", "picocolors": "^1.0.0", "stable": "^0.1.8" }, "bin": { "svgo": "bin/svgo" } }, "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg=="], + + "symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="], + + "terser": ["terser@5.38.1", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-GWANVlPM/ZfYzuPHjq0nxT+EbOEDDN3Jwhwdg1D8TU8oSkktp8w64Uq4auuGLxFSoNTRDncTq2hQHX1Ld9KHkA=="], + + "tiny-case": ["tiny-case@1.0.3", "", {}, "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q=="], + + "tiny-glob": ["tiny-glob@0.2.9", "", { "dependencies": { "globalyzer": "0.1.0", "globrex": "^0.1.2" } }, "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg=="], + + "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], + + "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "tinypool": ["tinypool@1.0.2", "", {}, "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA=="], + + "tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], + + "tinyspy": ["tinyspy@3.0.2", "", {}, "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q=="], + + "tldts": ["tldts@6.1.76", "", { "dependencies": { "tldts-core": "^6.1.76" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-6U2ti64/nppsDxQs9hw8ephA3nO6nSQvVVfxwRw8wLQPFtLI1cFI1a1eP22g+LUP+1TA2pKKjUTwWB+K2coqmQ=="], + + "tldts-core": ["tldts-core@6.1.76", "", {}, "sha512-uzhJ02RaMzgQR3yPoeE65DrcHI6LoM4saUqXOt/b5hmb3+mc4YWpdSeAQqVqRUlQ14q8ZuLRWyBR1ictK1dzzg=="], + + "toposort": ["toposort@2.0.2", "", {}, "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="], + + "tough-cookie": ["tough-cookie@5.1.0", "", { "dependencies": { "tldts": "^6.1.32" } }, "sha512-rvZUv+7MoBYTiDmFPBrhL7Ujx9Sk+q9wwm22x8c8T5IJaR+Wsyc7TNxbVxo84kZoRJZZMazowFLqpankBEQrGg=="], + + "tr46": ["tr46@5.0.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g=="], + + "tsconfck": ["tsconfck@3.1.5", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "tsconfck": "bin/tsconfck.js" } }, "sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "typanion": ["typanion@3.14.0", "", {}, "sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug=="], + + "type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], + + "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], + + "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="], + + "typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="], + + "typed-array-length": ["typed-array-length@1.0.7", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="], + + "typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], + + "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], + + "undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], + + "unicode-canonical-property-names-ecmascript": ["unicode-canonical-property-names-ecmascript@2.0.1", "", {}, "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg=="], + + "unicode-match-property-ecmascript": ["unicode-match-property-ecmascript@2.0.0", "", { "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" } }, "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q=="], + + "unicode-match-property-value-ecmascript": ["unicode-match-property-value-ecmascript@2.2.0", "", {}, "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg=="], + + "unicode-property-aliases-ecmascript": ["unicode-property-aliases-ecmascript@2.1.0", "", {}, "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w=="], + + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + + "update-browserslist-db": ["update-browserslist-db@1.1.2", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "valibot": ["valibot@1.0.0-beta.12", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-j3WIxJ0pmUFMfdfUECn3YnZPYOiG0yHYcFEa/+RVgo0I+MXE3ToLt7gNRLtY5pwGfgNmsmhenGZfU5suu9ijUA=="], + + "validate-npm-package-license": ["validate-npm-package-license@3.0.4", "", { "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="], + + "validator": ["validator@13.12.0", "", {}, "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg=="], + + "vast": ["vast@1.0.42", "", { "dependencies": { "vest-utils": "^1.3.3" } }, "sha512-YP3zNDRVZZRuHgUJ5xD7HAF0AFius2KWqIYSAuzA6E4ftPkL+gSQrp9agPM1HgsHS9L7XWoegYxsH81kawztuQ=="], + + "vest": ["vest@5.4.6", "", { "dependencies": { "context": "^3.0.33", "n4s": "^5.0.28", "vast": "^1.0.42", "vest-utils": "^1.3.3", "vestjs-runtime": "^1.5.1" } }, "sha512-Q3KQYluxdjnz5/HmR8coHNlXbJPLWMfrwz4wlcqMX4SaJ8qcmy5Ix9NTiQt3hTMrETdj+q+513J/kt+ahdJlLg=="], + + "vest-utils": ["vest-utils@1.3.3", "", {}, "sha512-9y+26YXjOpv89QmEXlFrTFLUMwUjAuwpimUVgb8HS3eNuBR3HEY68o4U/sPyGTh3OEvS7N502pX82WDm1zvsaA=="], + + "vestjs-runtime": ["vestjs-runtime@1.5.1", "", { "dependencies": { "context": "^3.0.33", "vest-utils": "^1.3.3" } }, "sha512-kiXuNJBS/6ZkzMArLuiEBtXe/cMr/8NE4lp6flpLuEzVwXM2nli9UfvQ26lmuvU1/ggPgjJNv/FpSnWofvHYcA=="], + + "vite": ["vite@6.1.0", "", { "dependencies": { "esbuild": "^0.24.2", "postcss": "^8.5.1", "rollup": "^4.30.1" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ=="], + + "vite-node": ["vite-node@3.0.5", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.0", "es-module-lexer": "^1.6.0", "pathe": "^2.0.2", "vite": "^5.0.0 || ^6.0.0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A=="], + + "vite-tsconfig-paths": ["vite-tsconfig-paths@5.1.4", "", { "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", "tsconfck": "^3.0.3" }, "peerDependencies": { "vite": "*" }, "optionalPeers": ["vite"] }, "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w=="], + + "vitest": ["vitest@3.0.5", "", { "dependencies": { "@vitest/expect": "3.0.5", "@vitest/mocker": "3.0.5", "@vitest/pretty-format": "^3.0.5", "@vitest/runner": "3.0.5", "@vitest/snapshot": "3.0.5", "@vitest/spy": "3.0.5", "@vitest/utils": "3.0.5", "chai": "^5.1.2", "debug": "^4.4.0", "expect-type": "^1.1.0", "magic-string": "^0.30.17", "pathe": "^2.0.2", "std-env": "^3.8.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinypool": "^1.0.2", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0", "vite-node": "3.0.5", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.0.5", "@vitest/ui": "3.0.5", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q=="], + + "w3c-xmlserializer": ["w3c-xmlserializer@5.0.0", "", { "dependencies": { "xml-name-validator": "^5.0.0" } }, "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA=="], + + "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], + + "whatwg-encoding": ["whatwg-encoding@3.1.1", "", { "dependencies": { "iconv-lite": "0.6.3" } }, "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ=="], + + "whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], + + "whatwg-url": ["whatwg-url@14.1.0", "", { "dependencies": { "tr46": "^5.0.0", "webidl-conversions": "^7.0.0" } }, "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], + + "which-builtin-type": ["which-builtin-type@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q=="], + + "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], + + "which-typed-array": ["which-typed-array@1.1.18", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.3", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA=="], + + "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], + + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], + + "xml-name-validator": ["xml-name-validator@5.0.0", "", {}, "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="], + + "xmlchars": ["xmlchars@2.2.0", "", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="], + + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + + "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + + "yaml": ["yaml@1.10.2", "", {}, "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="], + + "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + + "yup": ["yup@1.6.1", "", { "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", "toposort": "^2.0.2", "type-fest": "^2.19.0" } }, "sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA=="], + + "zod": ["zod@3.24.1", "", {}, "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A=="], + + "@asamuzakjp/css-color/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "@rollup/plugin-commonjs/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], + + "@rollup/pluginutils/@types/estree": ["@types/estree@0.0.39", "", {}, "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="], + + "@rollup/pluginutils/estree-walker": ["estree-walker@1.0.1", "", {}, "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg=="], + + "@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "@surma/rollup-plugin-off-main-thread/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], + + "@testing-library/jest-dom/aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], + + "@testing-library/jest-dom/chalk": ["chalk@3.0.0", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg=="], + + "@testing-library/jest-dom/dom-accessibility-api": ["dom-accessibility-api@0.6.3", "", {}, "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w=="], + + "@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "concat-with-sourcemaps/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "cosmiconfig/path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], + + "css-tree/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], + + "figures/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + + "filelist/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + + "gzip-size/duplexer": ["duplexer@0.1.2", "", {}, "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="], + + "has-ansi/ansi-regex": ["ansi-regex@2.1.1", "", {}, "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="], + + "import-from/resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], + + "load-json-file/parse-json": ["parse-json@4.0.0", "", { "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw=="], + + "load-json-file/pify": ["pify@3.0.0", "", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="], + + "maxmin/chalk": ["chalk@1.1.3", "", { "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } }, "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A=="], + + "maxmin/gzip-size": ["gzip-size@3.0.0", "", { "dependencies": { "duplexer": "^0.1.1" } }, "sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w=="], + + "maxmin/pretty-bytes": ["pretty-bytes@3.0.1", "", { "dependencies": { "number-is-nan": "^1.0.0" } }, "sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow=="], + + "microbundle/camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], + + "microbundle/typescript": ["typescript@4.9.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g=="], + + "normalize-package-data/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + + "npm-run-all/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], + + "npm-run-all/cross-spawn": ["cross-spawn@6.0.6", "", { "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw=="], + + "path-type/pify": ["pify@3.0.0", "", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="], + + "postcss-calc/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "postcss-merge-rules/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "postcss-minify-selectors/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "postcss-normalize-url/normalize-url": ["normalize-url@6.1.0", "", {}, "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="], + + "postcss-unique-selectors/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "regjsparser/jsesc": ["jsesc@3.0.2", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g=="], + + "rollup-plugin-bundle-size/chalk": ["chalk@1.1.3", "", { "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } }, "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A=="], + + "rollup-plugin-typescript2/@rollup/pluginutils": ["@rollup/pluginutils@4.2.1", "", { "dependencies": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" } }, "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ=="], + + "rollup-pluginutils/estree-walker": ["estree-walker@0.6.1", "", {}, "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w=="], + + "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-ansi/ansi-regex": ["ansi-regex@2.1.1", "", {}, "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="], + + "stylehacks/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "svgo/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + + "vite/rollup": ["rollup@4.34.5", "", { "dependencies": { "@types/estree": "1.0.6" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.34.5", "@rollup/rollup-android-arm64": "4.34.5", "@rollup/rollup-darwin-arm64": "4.34.5", "@rollup/rollup-darwin-x64": "4.34.5", "@rollup/rollup-freebsd-arm64": "4.34.5", "@rollup/rollup-freebsd-x64": "4.34.5", "@rollup/rollup-linux-arm-gnueabihf": "4.34.5", "@rollup/rollup-linux-arm-musleabihf": "4.34.5", "@rollup/rollup-linux-arm64-gnu": "4.34.5", "@rollup/rollup-linux-arm64-musl": "4.34.5", "@rollup/rollup-linux-loongarch64-gnu": "4.34.5", "@rollup/rollup-linux-powerpc64le-gnu": "4.34.5", "@rollup/rollup-linux-riscv64-gnu": "4.34.5", "@rollup/rollup-linux-s390x-gnu": "4.34.5", "@rollup/rollup-linux-x64-gnu": "4.34.5", "@rollup/rollup-linux-x64-musl": "4.34.5", "@rollup/rollup-win32-arm64-msvc": "4.34.5", "@rollup/rollup-win32-ia32-msvc": "4.34.5", "@rollup/rollup-win32-x64-msvc": "4.34.5", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-GyVCmpo9z/HYqFD8QWoBUnz1Q9xC22t8tPAZm/AvAcUg2U2/+DkboEvSioMwv042zE4I9N3FEhx7fiCT2YHzKQ=="], + + "wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "@testing-library/jest-dom/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "filelist/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + + "maxmin/chalk/ansi-styles": ["ansi-styles@2.2.1", "", {}, "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA=="], + + "maxmin/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + + "maxmin/chalk/supports-color": ["supports-color@2.0.0", "", {}, "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g=="], + + "maxmin/gzip-size/duplexer": ["duplexer@0.1.2", "", {}, "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="], + + "npm-run-all/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + + "npm-run-all/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + + "npm-run-all/cross-spawn/path-key": ["path-key@2.0.1", "", {}, "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw=="], + + "npm-run-all/cross-spawn/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + + "npm-run-all/cross-spawn/shebang-command": ["shebang-command@1.2.0", "", { "dependencies": { "shebang-regex": "^1.0.0" } }, "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg=="], + + "npm-run-all/cross-spawn/which": ["which@1.3.1", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "./bin/which" } }, "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ=="], + + "rollup-plugin-bundle-size/chalk/ansi-styles": ["ansi-styles@2.2.1", "", {}, "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA=="], + + "rollup-plugin-bundle-size/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + + "rollup-plugin-bundle-size/chalk/supports-color": ["supports-color@2.0.0", "", {}, "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g=="], + + "rollup-plugin-typescript2/@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "@testing-library/jest-dom/chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "npm-run-all/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + + "npm-run-all/cross-spawn/shebang-command/shebang-regex": ["shebang-regex@1.0.0", "", {}, "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ=="], + + "wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "@testing-library/jest-dom/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + } +} diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index 84b7b9bd65e70d3c80197f414543e3d7f2770697..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329083 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 z 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 tz+`wNSaQ6IE*N3Fih_!> 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 Z(CDp|>o5w-FVJfe-N0IdvHws1{a-H;Mq>Z~ diff --git a/class-validator/src/__tests__/Form.tsx b/class-validator/src/__tests__/Form.tsx index 52984f67..2055685d 100644 --- a/class-validator/src/__tests__/Form.tsx +++ b/class-validator/src/__tests__/Form.tsx @@ -51,3 +51,29 @@ test("form's validation with Class Validator and TypeScript's integration", asyn expect(screen.getByText(/password should not be empty/i)).toBeInTheDocument(); expect(handleSubmit).not.toHaveBeenCalled(); }); + +export function TestComponentManualType({ + onSubmit, +}: { + onSubmit: (data: FormData) => void; +}) { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm({ + resolver: classValidatorResolver(Schema), // Useful to check TypeScript regressions + }); + + return ( +
+ + {errors.username && {errors.username.message}} + + + {errors.password && {errors.password.message}} + + +
+ ); +} diff --git a/class-validator/src/__tests__/__fixtures__/data.ts b/class-validator/src/__tests__/__fixtures__/data.ts index 90d1dbbe..5abd5ef2 100644 --- a/class-validator/src/__tests__/__fixtures__/data.ts +++ b/class-validator/src/__tests__/__fixtures__/data.ts @@ -66,7 +66,7 @@ export const invalidData = { email: '', birthYear: 'birthYear', like: [{ id: 'z' }], -}; +} as any as Schema; export const fields: Record = { username: { diff --git a/class-validator/src/__tests__/class-validator.ts b/class-validator/src/__tests__/class-validator.ts index ad2a7c31..7e253deb 100644 --- a/class-validator/src/__tests__/class-validator.ts +++ b/class-validator/src/__tests__/class-validator.ts @@ -122,11 +122,16 @@ it('validate data with transformer option', async () => { { mode: 'sync', }, - )(invalidData, undefined, { - fields, - criteriaMode: 'all', - shouldUseNativeValidation, - }); + )( + // @ts-expect-error - Just for testing purposes + invalidData, + undefined, + { + fields, + criteriaMode: 'all', + shouldUseNativeValidation, + }, + ); expect(result).toMatchSnapshot(); }); @@ -151,11 +156,16 @@ it('validate data with validator option', async () => { { mode: 'sync', }, - )(invalidData, undefined, { - fields, - criteriaMode: 'all', - shouldUseNativeValidation, - }); + )( + // @ts-expect-error - Just for testing purposes + invalidData, + undefined, + { + fields, + criteriaMode: 'all', + shouldUseNativeValidation, + }, + ); expect(result).toMatchSnapshot(); }); @@ -174,6 +184,7 @@ it('should return from classValidatorResolver with `excludeExtraneousValues` set })( { random: 10, + // @ts-expect-error - Just for testing purposes extraneousField: true, }, undefined, diff --git a/class-validator/src/class-validator.ts b/class-validator/src/class-validator.ts index 0cc35dd2..d4dc4804 100644 --- a/class-validator/src/class-validator.ts +++ b/class-validator/src/class-validator.ts @@ -1,15 +1,23 @@ import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers'; -import { plainToClass } from 'class-transformer'; -import { ValidationError, validate, validateSync } from 'class-validator'; -import { FieldErrors } from 'react-hook-form'; -import type { Resolver } from './types'; +import { + ClassConstructor, + ClassTransformOptions, + plainToClass, +} from 'class-transformer'; +import { + ValidationError, + ValidatorOptions, + validate, + validateSync, +} from 'class-validator'; +import { FieldErrors, Resolver } from 'react-hook-form'; -const parseErrors = ( +function parseErrorSchema( errors: ValidationError[], validateAllFieldCriteria: boolean, parsedErrors: FieldErrors = {}, path = '', -) => { +) { return errors.reduce((acc, error) => { const _path = path ? `${path}.${error.property}` : error.property; @@ -27,16 +35,41 @@ const parseErrors = ( } if (error.children && error.children.length) { - parseErrors(error.children, validateAllFieldCriteria, acc, _path); + parseErrorSchema(error.children, validateAllFieldCriteria, acc, _path); } return acc; }, parsedErrors); -}; +} -export const classValidatorResolver: Resolver = - (schema, schemaOptions = {}, resolverOptions = {}) => - async (values, _, options) => { +/** + * Creates a resolver for react-hook-form using class-validator schema validation + * @param {ClassConstructor} schema - The class-validator schema to validate against + * @param {Object} schemaOptions - Additional schema validation options + * @param {Object} resolverOptions - Additional resolver configuration + * @param {string} [resolverOptions.mode='async'] - Validation mode + * @returns {Resolver} A resolver function compatible with react-hook-form + * @example + * class Schema { + * @Matches(/^\w+$/) + * @Length(3, 30) + * username: string; + * age: number + * } + * + * useForm({ + * resolver: classValidatorResolver(Schema) + * }); + */ +export function classValidatorResolver>( + schema: ClassConstructor, + schemaOptions: { + validator?: ValidatorOptions; + transformer?: ClassTransformOptions; + } = {}, + resolverOptions: { mode?: 'async' | 'sync'; raw?: boolean } = {}, +): Resolver { + return async (values, _, options) => { const { transformer, validator } = schemaOptions; const data = plainToClass(schema, values, transformer); @@ -48,7 +81,7 @@ export const classValidatorResolver: Resolver = return { values: {}, errors: toNestErrors( - parseErrors( + parseErrorSchema( rawErrors, !options.shouldUseNativeValidation && options.criteriaMode === 'all', @@ -65,3 +98,4 @@ export const classValidatorResolver: Resolver = errors: {}, }; }; +} diff --git a/class-validator/src/index.ts b/class-validator/src/index.ts index 53803f52..e1cc75cf 100644 --- a/class-validator/src/index.ts +++ b/class-validator/src/index.ts @@ -1,2 +1 @@ export * from './class-validator'; -export * from './types'; diff --git a/class-validator/src/types.ts b/class-validator/src/types.ts deleted file mode 100644 index f56bfc41..00000000 --- a/class-validator/src/types.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ClassConstructor, ClassTransformOptions } from 'class-transformer'; -import { ValidatorOptions } from 'class-validator'; -import { FieldValues, ResolverOptions, ResolverResult } from 'react-hook-form'; - -export type Resolver = ( - schema: ClassConstructor, - schemaOptions?: { - validator?: ValidatorOptions; - transformer?: ClassTransformOptions; - }, - resolverOptions?: { mode?: 'async' | 'sync'; raw?: boolean }, -) => ( - values: TFieldValues, - context: TContext | undefined, - options: ResolverOptions, -) => Promise>; diff --git a/computed-types/src/__tests__/Form-native-validation.tsx b/computed-types/src/__tests__/Form-native-validation.tsx index 75e53ecc..182adbb8 100644 --- a/computed-types/src/__tests__/Form-native-validation.tsx +++ b/computed-types/src/__tests__/Form-native-validation.tsx @@ -13,14 +13,12 @@ const schema = Schema({ password: string.min(2).error(PASSWORD_REQUIRED_MESSAGE), }); -type FormData = Type & { unusedProperty: string }; - interface Props { - onSubmit: (data: FormData) => void; + onSubmit: (data: Type) => void; } function TestComponent({ onSubmit }: Props) { - const { register, handleSubmit } = useForm({ + const { register, handleSubmit } = useForm({ resolver: computedTypesResolver(schema), shouldUseNativeValidation: true, }); diff --git a/computed-types/src/__tests__/Form.tsx b/computed-types/src/__tests__/Form.tsx index 7989e2db..aa1d9e27 100644 --- a/computed-types/src/__tests__/Form.tsx +++ b/computed-types/src/__tests__/Form.tsx @@ -15,16 +15,14 @@ const schema = Schema({ type FormData = Type & { unusedProperty: string }; -interface Props { - onSubmit: (data: FormData) => void; -} - -function TestComponent({ onSubmit }: Props) { +function TestComponent({ + onSubmit, +}: { onSubmit: (data: Type) => void }) { const { register, handleSubmit, formState: { errors }, - } = useForm({ + } = useForm({ resolver: computedTypesResolver(schema), // Useful to check TypeScript regressions }); @@ -59,3 +57,29 @@ test("form's validation with computed-types and TypeScript's integration", async expect(screen.getByText(/zipCode field is required/i)).toBeInTheDocument(); expect(handleSubmit).not.toHaveBeenCalled(); }); + +export function TestComponentManualType({ + onSubmit, +}: { + onSubmit: (data: FormData) => void; +}) { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm, undefined, FormData>({ + resolver: computedTypesResolver(schema), // Useful to check TypeScript regressions + }); + + return ( +
+ + {errors.username && {errors.username.message}} + + + {errors.password && {errors.password.message}} + + +
+ ); +} diff --git a/computed-types/src/__tests__/__fixtures__/data.ts b/computed-types/src/__tests__/__fixtures__/data.ts index 8c0b9f02..adf9791c 100644 --- a/computed-types/src/__tests__/__fixtures__/data.ts +++ b/computed-types/src/__tests__/__fixtures__/data.ts @@ -64,7 +64,7 @@ export const invalidData = { city: '', zipCode: '123', }, -}; +} as any as Type; export const fields: Record = { username: { diff --git a/computed-types/src/__tests__/computed-types.ts b/computed-types/src/__tests__/computed-types.ts index 262061e1..80463616 100644 --- a/computed-types/src/__tests__/computed-types.ts +++ b/computed-types/src/__tests__/computed-types.ts @@ -26,7 +26,9 @@ describe('computedTypesResolver', () => { const schemaWithCustomError = schema.transform(() => { throw Error('custom error'); }); + const promise = computedTypesResolver(schemaWithCustomError)( + // @ts-expect-error expect to throw validData, undefined, { diff --git a/computed-types/src/computed-types.ts b/computed-types/src/computed-types.ts index d0efa48e..7f687e11 100644 --- a/computed-types/src/computed-types.ts +++ b/computed-types/src/computed-types.ts @@ -1,12 +1,12 @@ import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers'; -import type { ValidationError } from 'computed-types'; -import type { FieldErrors } from 'react-hook-form'; -import type { Resolver } from './types'; +import { Type, ValidationError } from 'computed-types'; +import FunctionType from 'computed-types/lib/schema/FunctionType'; +import type { FieldErrors, Resolver } from 'react-hook-form'; const isValidationError = (error: any): error is ValidationError => error.errors != null; -const parseErrorSchema = (computedTypesError: ValidationError) => { +function parseErrorSchema(computedTypesError: ValidationError) { const parsedErrors: FieldErrors = {}; return (computedTypesError.errors || []).reduce((acc, error) => { acc[error.path.join('.')] = { @@ -16,10 +16,26 @@ const parseErrorSchema = (computedTypesError: ValidationError) => { return acc; }, parsedErrors); -}; +} -export const computedTypesResolver: Resolver = - (schema) => async (values, _, options) => { +/** + * Creates a resolver for react-hook-form using computed-types schema validation + * @param {Schema} schema - The computed-types schema to validate against + * @returns {Resolver>} A resolver function compatible with react-hook-form + * @example + * const schema = Schema({ + * name: string, + * age: number + * }); + * + * useForm({ + * resolver: computedTypesResolver(schema) + * }); + */ +export function computedTypesResolver>( + schema: Schema, +): Resolver> { + return async (values, _, options) => { try { const data = await schema(values); @@ -40,3 +56,4 @@ export const computedTypesResolver: Resolver = throw error; } }; +} diff --git a/computed-types/src/index.ts b/computed-types/src/index.ts index 86d15a83..e7bc7a05 100644 --- a/computed-types/src/index.ts +++ b/computed-types/src/index.ts @@ -1,2 +1 @@ export * from './computed-types'; -export * from './types'; diff --git a/computed-types/src/types.ts b/computed-types/src/types.ts deleted file mode 100644 index 2c3ff74f..00000000 --- a/computed-types/src/types.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { - FieldValues, - ResolverOptions, - ResolverResult, -} from 'react-hook-form'; - -export type Resolver = ( - schema: any, -) => ( - values: TFieldValues, - context: TContext | undefined, - options: ResolverOptions, -) => Promise>; diff --git a/effect-ts/src/__tests__/Form.tsx b/effect-ts/src/__tests__/Form.tsx index d3f6fd2f..6e5a4163 100644 --- a/effect-ts/src/__tests__/Form.tsx +++ b/effect-ts/src/__tests__/Form.tsx @@ -19,11 +19,11 @@ const schema = Schema.Struct({ type FormData = Schema.Schema.Type; -interface Props { +function TestComponent({ + onSubmit, +}: { onSubmit: (data: FormData) => void; -} - -function TestComponent({ onSubmit }: Props) { +}) { const { register, handleSubmit, @@ -57,3 +57,29 @@ test("form's validation with Zod and TypeScript's integration", async () => { expect(screen.getByText(/password field is required/i)).toBeInTheDocument(); expect(handleSubmit).not.toHaveBeenCalled(); }); + +export function TestComponentManualType({ + onSubmit, +}: { + onSubmit: (data: FormData) => void; +}) { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm, undefined, FormData>({ + resolver: effectTsResolver(schema), // Useful to check TypeScript regressions + }); + + return ( +
+ + {errors.username && {errors.username.message}} + + + {errors.password && {errors.password.message}} + + +
+ ); +} diff --git a/effect-ts/src/__tests__/__fixtures__/data.ts b/effect-ts/src/__tests__/__fixtures__/data.ts index 90368e47..cf6286e2 100644 --- a/effect-ts/src/__tests__/__fixtures__/data.ts +++ b/effect-ts/src/__tests__/__fixtures__/data.ts @@ -102,7 +102,7 @@ export const invalidData = { { type: 'car', brand: 'BMW', horsepower: 150 }, { type: 'car', brand: 'Mercedes' }, ], -}; +} as any as Schema.Schema.Type; export const fields: Record = { username: { diff --git a/effect-ts/src/effect-ts.ts b/effect-ts/src/effect-ts.ts index 91130bed..c9f9d2d8 100644 --- a/effect-ts/src/effect-ts.ts +++ b/effect-ts/src/effect-ts.ts @@ -1,16 +1,37 @@ import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers'; -import { Effect } from 'effect'; - +import { Effect, Schema } from 'effect'; import { ArrayFormatter, decodeUnknown } from 'effect/ParseResult'; -import { type FieldError, appendErrors } from 'react-hook-form'; -import type { Resolver } from './types'; +import { ParseOptions } from 'effect/SchemaAST'; +import { + type FieldError, + FieldValues, + Resolver, + appendErrors, +} from 'react-hook-form'; -export const effectTsResolver: Resolver = - (schema, config = { errors: 'all', onExcessProperty: 'ignore' }) => - (values, _, options) => { +/** + * Creates a resolver for react-hook-form using Effect.ts schema validation + * @param {Schema.Schema} schema - The Effect.ts schema to validate against + * @param {ParseOptions} [schemaOptions] - Optional Effect.ts validation options + * @returns {Resolver>} A resolver function compatible with react-hook-form + * @example + * const schema = Schema.Struct({ + * name: Schema.String, + * age: Schema.Number + * }); + * + * useForm({ + * resolver: effectTsResolver(schema) + * }); + */ +export function effectTsResolver( + schema: Schema.Schema, + schemaOptions: ParseOptions = { errors: 'all', onExcessProperty: 'ignore' }, +): Resolver> { + return (values, _, options) => { return decodeUnknown( schema, - config, + schemaOptions, )(values).pipe( Effect.catchAll((parseIssue) => Effect.flip(ArrayFormatter.formatIssue(parseIssue)), @@ -63,3 +84,4 @@ export const effectTsResolver: Resolver = Effect.runPromise, ); }; +} diff --git a/effect-ts/src/index.ts b/effect-ts/src/index.ts index 58e89bf5..fd178c75 100644 --- a/effect-ts/src/index.ts +++ b/effect-ts/src/index.ts @@ -1,2 +1 @@ export * from './effect-ts'; -export * from './types'; diff --git a/effect-ts/src/types.ts b/effect-ts/src/types.ts deleted file mode 100644 index 4be50137..00000000 --- a/effect-ts/src/types.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Schema } from 'effect'; -import { ParseOptions } from 'effect/SchemaAST'; -import { FieldValues, ResolverOptions, ResolverResult } from 'react-hook-form'; - -export type Resolver = ( - schema: Schema.Schema, - config?: ParseOptions, -) => ( - values: FieldValues, - _context: TContext | undefined, - options: ResolverOptions, -) => Promise>; diff --git a/fluentvalidation-ts/src/fluentvalidation-ts.ts b/fluentvalidation-ts/src/fluentvalidation-ts.ts index f0b794f2..fcb1d18c 100644 --- a/fluentvalidation-ts/src/fluentvalidation-ts.ts +++ b/fluentvalidation-ts/src/fluentvalidation-ts.ts @@ -30,10 +30,10 @@ function traverseObject( } } -const parseErrorSchema = ( +function parseErrorSchema( validationErrors: ValidationErrors, validateAllFieldCriteria: boolean, -) => { +) { if (validateAllFieldCriteria) { // TODO: check this but i think its always one validation error } @@ -42,8 +42,29 @@ const parseErrorSchema = ( traverseObject(validationErrors, errors); return errors; -}; +} +/** + * Creates a resolver for react-hook-form using FluentValidation schema validation + * @param {Validator} validator - The FluentValidation validator to use + * @returns {Resolver} A resolver function compatible with react-hook-form + * @example + * import { Validator } from 'fluentvalidation-ts'; + * + * class SchemaValidator extends Validator { + * constructor() { + * super(); + * this.ruleFor('username').notEmpty(); + * this.ruleFor('password').notEmpty(); + * } + * } + * + * const validator = new SchemaValidator(); + * + * useForm({ + * resolver: fluentValidationResolver(validator) + * }); + */ export function fluentValidationResolver( validator: Validator, ): Resolver { diff --git a/io-ts/src/__tests__/Form-native-validation.tsx b/io-ts/src/__tests__/Form-native-validation.tsx index bf8ce0a9..5aa7865c 100644 --- a/io-ts/src/__tests__/Form-native-validation.tsx +++ b/io-ts/src/__tests__/Form-native-validation.tsx @@ -14,17 +14,10 @@ const schema = t.type({ password: tt.withMessage(tt.NonEmptyString, () => PASSWORD_REQUIRED_MESSAGE), }); -interface FormData { - username: string; - password: string; -} - -interface Props { - onSubmit: (data: FormData) => void; -} - -function TestComponent({ onSubmit }: Props) { - const { register, handleSubmit } = useForm({ +function TestComponent({ + onSubmit, +}: { onSubmit: (data: t.OutputOf) => void }) { + const { register, handleSubmit } = useForm({ resolver: ioTsResolver(schema), shouldUseNativeValidation: true, }); diff --git a/io-ts/src/__tests__/Form.tsx b/io-ts/src/__tests__/Form.tsx index c641dfcb..bb70f60d 100644 --- a/io-ts/src/__tests__/Form.tsx +++ b/io-ts/src/__tests__/Form.tsx @@ -22,16 +22,14 @@ interface FormData { password: string; } -interface Props { - onSubmit: (data: FormData) => void; -} - -function TestComponent({ onSubmit }: Props) { +function TestComponent({ + onSubmit, +}: { onSubmit: (data: t.OutputOf) => void }) { const { register, formState: { errors }, handleSubmit, - } = useForm({ + } = useForm({ resolver: ioTsResolver(schema), criteriaMode: 'all', }); @@ -61,3 +59,29 @@ test("form's validation with io-ts and TypeScript's integration", async () => { expect(screen.getByText(/password is a required field/i)).toBeInTheDocument(); expect(handleSubmit).not.toHaveBeenCalled(); }); + +export function TestComponentManualType({ + onSubmit, +}: { + onSubmit: (data: FormData) => void; +}) { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm, undefined, FormData>({ + resolver: ioTsResolver(schema), // Useful to check TypeScript regressions + }); + + return ( +
+ + {errors.username && {errors.username.message}} + + + {errors.password && {errors.password.message}} + + +
+ ); +} diff --git a/io-ts/src/__tests__/__fixtures__/data.ts b/io-ts/src/__tests__/__fixtures__/data.ts index 7e845a34..ccf661e4 100644 --- a/io-ts/src/__tests__/__fixtures__/data.ts +++ b/io-ts/src/__tests__/__fixtures__/data.ts @@ -50,24 +50,7 @@ export const schema = t.intersection([ }), ]); -interface Data { - username: string; - password: string; - accessToken: string; - birthYear?: number; - luckyNumbers: number[]; - email?: string; - animal: string | number; - tags: { name: string }[]; - enabled: boolean; - like: { id: number; name: string }[]; - vehicles: Array< - | { type: 'car'; brand: string; horsepower: number } - | { type: 'bike'; speed: number } - >; -} - -export const validData: Data = { +export const validData: t.OutputOf = { username: 'Doe', password: 'Password123', accessToken: 'c2883927-5178-4ad1-bbee-07ba33a5de19', @@ -107,7 +90,7 @@ export const invalidData = { { type: 'car', brand: 'BMW', horsepower: 150 }, { type: 'car', brand: 'Mercedes' }, ], -}; +} as any as t.OutputOf; export const fields: Record = { username: { diff --git a/io-ts/src/errorsToRecord.ts b/io-ts/src/errorsToRecord.ts index 1828cd00..d01f7c34 100644 --- a/io-ts/src/errorsToRecord.ts +++ b/io-ts/src/errorsToRecord.ts @@ -13,8 +13,11 @@ import { UnionType, ValidationError, } from 'io-ts'; +import { FieldError } from 'react-hook-form'; import arrayToPath from './arrayToPath'; -import { ErrorObject, FieldErrorWithPath } from './types'; + +export type ErrorObject = Record; +export type FieldErrorWithPath = FieldError & { path: string }; const INSTANCE_TYPES_TO_FILTER = [ TaggedUnionType, diff --git a/io-ts/src/index.ts b/io-ts/src/index.ts index a0489c71..7069193a 100644 --- a/io-ts/src/index.ts +++ b/io-ts/src/index.ts @@ -1,2 +1 @@ export * from './io-ts'; -export * from './types'; diff --git a/io-ts/src/io-ts.ts b/io-ts/src/io-ts.ts index 02ddb8e1..6a4d0856 100644 --- a/io-ts/src/io-ts.ts +++ b/io-ts/src/io-ts.ts @@ -1,32 +1,54 @@ import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers'; import * as Either from 'fp-ts/Either'; import { pipe } from 'fp-ts/function'; +import * as t from 'io-ts'; +import { FieldValues, Resolver } from 'react-hook-form'; import errorsToRecord from './errorsToRecord'; -import { Resolver } from './types'; -export const ioTsResolver: Resolver = (codec) => (values, _context, options) => - pipe( - values, - codec.decode, - Either.mapLeft( - errorsToRecord( - !options.shouldUseNativeValidation && options.criteriaMode === 'all', +/** + * Creates a resolver for react-hook-form using io-ts schema validation + * @param {t.Type} schema - The io-ts schema to validate against + * @param {Object} options - Additional resolver configuration + * @param {string} [options.mode='async'] - Validation mode + * @returns {Resolver>} A resolver function compatible with react-hook-form + * @example + * const schema = t.type({ + * name: t.string, + * age: t.number + * }); + * + * useForm({ + * resolver: ioTsResolver(schema) + * }); + */ +export function ioTsResolver< + T extends Record, + TFieldValues extends FieldValues, +>(schema: t.Type): Resolver> { + return (values, _context, options) => + pipe( + values, + schema.decode, + Either.mapLeft( + errorsToRecord( + !options.shouldUseNativeValidation && options.criteriaMode === 'all', + ), ), - ), - Either.mapLeft((errors) => toNestErrors(errors, options)), - Either.fold( - (errors) => ({ - values: {}, - errors, - }), - (values) => { - options.shouldUseNativeValidation && - validateFieldsNatively({}, options); + Either.mapLeft((errors) => toNestErrors(errors, options)), + Either.fold( + (errors) => ({ + values: {}, + errors, + }), + (values) => { + options.shouldUseNativeValidation && + validateFieldsNatively({}, options); - return { - values, - errors: {}, - } as any; - }, - ), - ); + return { + values, + errors: {}, + }; + }, + ), + ); +} diff --git a/io-ts/src/types.ts b/io-ts/src/types.ts deleted file mode 100644 index d9fdda48..00000000 --- a/io-ts/src/types.ts +++ /dev/null @@ -1,18 +0,0 @@ -import * as t from 'io-ts'; -import { - FieldError, - FieldValues, - ResolverOptions, - ResolverResult, -} from 'react-hook-form'; - -export type Resolver = ( - codec: t.Decoder, -) => ( - values: TFieldValues, - _context: TContext | undefined, - options: ResolverOptions, -) => ResolverResult; - -export type ErrorObject = Record; -export type FieldErrorWithPath = FieldError & { path: string }; diff --git a/joi/src/joi.ts b/joi/src/joi.ts index bdcd73d0..cd08f5c1 100644 --- a/joi/src/joi.ts +++ b/joi/src/joi.ts @@ -34,6 +34,23 @@ const parseErrorSchema = ( }, {}) : {}; +/** + * Creates a resolver for react-hook-form using Joi schema validation + * @param {Joi.ObjectSchema} schema - The Joi schema to validate against + * @param {Joi.ValidationOptions} [schemaOptions] - Optional Joi validation options + * @param {Object} resolverOptions - Additional resolver configuration + * @param {string} [resolverOptions.mode='async'] - Validation mode + * @returns {Resolver} A resolver function compatible with react-hook-form + * @example + * const schema = Joi.object({ + * name: Joi.string().required(), + * age: Joi.number().required() + * }); + * + * useForm({ + * resolver: joiResolver(schema) + * }); + */ export const joiResolver: Resolver = ( schema, diff --git a/lefthook.yml b/lefthook.yml index 2675a95c..8f7ce96d 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -18,6 +18,7 @@ pre-commit: lint: glob: '*.{js,ts,jsx,tsx}' run: bun lint {staged_files} + stage_fixed: true typescript: glob: '*.{ts,tsx}' run: bun tsc --noEmit diff --git a/nope/src/nope.ts b/nope/src/nope.ts index dd082b9c..60392964 100644 --- a/nope/src/nope.ts +++ b/nope/src/nope.ts @@ -24,6 +24,23 @@ const parseErrors = ( }, parsedErrors); }; +/** + * Creates a resolver for react-hook-form using Nope schema validation + * @param {NopeSchema} schema - The Nope schema to validate against + * @param {NopeSchemaOptions} [schemaOptions] - Optional Nope validation options + * @param {Object} resolverOptions - Additional resolver configuration + * @param {string} [resolverOptions.mode='async'] - Validation mode + * @returns {Resolver} A resolver function compatible with react-hook-form + * @example + * const schema = nope.object({ + * name: nope.string().required(), + * age: nope.number().required() + * }); + * + * useForm({ + * resolver: nopeResolver(schema) + * }); + */ export const nopeResolver: Resolver = ( schema, diff --git a/package.json b/package.json index b7f8352c..55b9500d 100644 --- a/package.json +++ b/package.json @@ -318,5 +318,8 @@ }, "peerDependencies": { "react-hook-form": "^7.0.0" + }, + "dependencies": { + "caniuse-lite": "^1.0.30001698" } } diff --git a/standard-schema/src/__tests__/Form.tsx b/standard-schema/src/__tests__/Form.tsx index 500a46d1..93dc5a64 100644 --- a/standard-schema/src/__tests__/Form.tsx +++ b/standard-schema/src/__tests__/Form.tsx @@ -12,16 +12,16 @@ const schema = type({ type FormData = typeof schema.infer & { unusedProperty: string }; -interface Props { - onSubmit: (data: FormData) => void; -} - -function TestComponent({ onSubmit }: Props) { +function TestComponent({ + onSubmit, +}: { + onSubmit: (data: typeof schema.infer) => void; +}) { const { register, handleSubmit, formState: { errors }, - } = useForm({ + } = useForm({ resolver: standardSchemaResolver(schema), // Useful to check TypeScript regressions }); @@ -54,3 +54,29 @@ test("form's validation with arkType and TypeScript's integration", async () => ).toBeInTheDocument(); expect(handleSubmit).not.toHaveBeenCalled(); }); + +export function TestComponentManualType({ + onSubmit, +}: { + onSubmit: (data: FormData) => void; +}) { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm({ + resolver: standardSchemaResolver(schema), // Useful to check TypeScript regressions + }); + + return ( +
+ + {errors.username && {errors.username.message}} + + + {errors.password && {errors.password.message}} + + +
+ ); +} diff --git a/standard-schema/src/__tests__/__fixtures__/data.ts b/standard-schema/src/__tests__/__fixtures__/data.ts index 5f0495e7..e37f5213 100644 --- a/standard-schema/src/__tests__/__fixtures__/data.ts +++ b/standard-schema/src/__tests__/__fixtures__/data.ts @@ -1,24 +1,47 @@ -import { type } from 'arktype'; import { Field, InternalFieldName } from 'react-hook-form'; +import { z } from 'zod'; -export const schema = type({ - username: 'string>2', - password: '/.*[A-Za-z].*/>8|/.*\\d.*/', - repeatPassword: 'string>1', - accessToken: 'string|number', - birthYear: '19001', - 'like?': type({ - id: 'number', - name: 'string>3', - }).array(), - dateStr: 'Date', -}); +export const schema = z + .object({ + username: z.string().regex(/^\w+$/).min(3).max(30), + password: z + .string() + .regex(new RegExp('.*[A-Z].*'), 'One uppercase character') + .regex(new RegExp('.*[a-z].*'), 'One lowercase character') + .regex(new RegExp('.*\\d.*'), 'One number') + .regex( + new RegExp('.*[`~<>?,./!@#$%^&*()\\-_+="\'|{}\\[\\];:\\\\].*'), + 'One special character', + ) + .min(8, 'Must be at least 8 characters in length'), + repeatPassword: z.string(), + accessToken: z.union([z.string(), z.number()]), + birthYear: z.number().min(1900).max(2013).optional(), + email: z.string().email().optional(), + tags: z.array(z.string()), + enabled: z.boolean(), + url: z.string().url('Custom error url').or(z.literal('')), + like: z + .array( + z.object({ + id: z.number(), + name: z.string().length(4), + }), + ) + .optional(), + dateStr: z + .string() + .transform((value) => new Date(value)) + .refine((value) => !isNaN(value.getTime()), { + message: 'Invalid date', + }), + }) + .refine((obj) => obj.password === obj.repeatPassword, { + message: 'Passwords do not match', + path: ['confirm'], + }); -export const validData: typeof schema.infer = { +export const validData = { username: 'Doe', password: 'Password123_', repeatPassword: 'Password123_', @@ -34,8 +57,8 @@ export const validData: typeof schema.infer = { name: 'name', }, ], - dateStr: new Date('2020-01-01'), -}; + dateStr: '2020-01-01T00:00:00.000Z', +} as any as z.infer; export const invalidData = { password: '___', @@ -43,7 +66,7 @@ export const invalidData = { birthYear: 'birthYear', like: [{ id: 'z' }], url: 'abc', -}; +} as any as z.infer; export const fields: Record = { username: { diff --git a/standard-schema/src/__tests__/__snapshots__/standard-schema.ts.snap b/standard-schema/src/__tests__/__snapshots__/standard-schema.ts.snap index 5000df6c..f8a68ff7 100644 --- a/standard-schema/src/__tests__/__snapshots__/standard-schema.ts.snap +++ b/standard-schema/src/__tests__/__snapshots__/standard-schema.ts.snap @@ -4,60 +4,247 @@ exports[`standardSchemaResolver > should return a single error from standardSche { "errors": { "accessToken": { - "message": "accessToken must be a number or a string (was missing)", + "message": "Invalid input", "ref": undefined, + "type": "", }, "birthYear": { - "message": "birthYear must be a number (was a string)", + "message": "Expected number, received string", "ref": undefined, + "type": "", }, "dateStr": { - "message": "dateStr must be a Date (was missing)", + "message": "Required", "ref": undefined, + "type": "", }, "email": { - "message": "email must be an email address (was "")", + "message": "Invalid email", "ref": { "name": "email", }, + "type": "", }, "enabled": { - "message": "enabled must be boolean (was missing)", + "message": "Required", "ref": undefined, + "type": "", }, "like": [ { "id": { - "message": "like[0].id must be a number (was a string)", + "message": "Expected number, received string", "ref": undefined, + "type": "", }, "name": { - "message": "like[0].name must be a string (was missing)", + "message": "Required", "ref": undefined, + "type": "", }, }, ], "password": { - "message": "password must be matched by .*[A-Za-z].* or matched by .*\\d.* (was "___")", + "message": "One uppercase character", "ref": { "name": "password", }, + "type": "", }, "repeatPassword": { - "message": "repeatPassword must be a string (was missing)", + "message": "Required", "ref": undefined, + "type": "", }, "tags": { - "message": "tags must be an array (was missing)", + "message": "Required", "ref": undefined, + "type": "", + }, + "url": { + "message": "Custom error url", + "ref": undefined, + "type": "", + }, + "username": { + "message": "Required", + "ref": { + "name": "username", + }, + "type": "", + }, + }, + "values": {}, +} +`; + +exports[`standardSchemaResolver > should return all the errors from standardSchemaResolver when validation fails with \`validateAllFieldCriteria\` set to true 1`] = ` +{ + "errors": { + "accessToken": { + "message": "Invalid input", + "ref": undefined, + "type": "", + "types": { + "0": "Invalid input", + }, + }, + "birthYear": { + "message": "Expected number, received string", + "ref": undefined, + "type": "", + "types": { + "0": "Expected number, received string", + }, + }, + "dateStr": { + "message": "Required", + "ref": undefined, + "type": "", + "types": { + "0": "Required", + }, + }, + "email": { + "message": "Invalid email", + "ref": { + "name": "email", + }, + "type": "", + "types": { + "0": "Invalid email", + }, + }, + "enabled": { + "message": "Required", + "ref": undefined, + "type": "", + "types": { + "0": "Required", + }, + }, + "like": [ + { + "id": { + "message": "Expected number, received string", + "ref": undefined, + "type": "", + "types": { + "0": "Expected number, received string", + }, + }, + "name": { + "message": "Required", + "ref": undefined, + "type": "", + "types": { + "0": "Required", + }, + }, + }, + ], + "password": { + "message": "One uppercase character", + "ref": { + "name": "password", + }, + "type": "", + "types": { + "0": "One uppercase character", + "1": "One lowercase character", + "2": "One number", + "3": "Must be at least 8 characters in length", + }, + }, + "repeatPassword": { + "message": "Required", + "ref": undefined, + "type": "", + "types": { + "0": "Required", + }, + }, + "tags": { + "message": "Required", + "ref": undefined, + "type": "", + "types": { + "0": "Required", + }, + }, + "url": { + "message": "Custom error url", + "ref": undefined, + "type": "", + "types": { + "0": "Custom error url", + }, }, "username": { - "message": "username must be a string (was missing)", + "message": "Required", "ref": { "name": "username", }, + "type": "", + "types": { + "0": "Required", + }, }, }, "values": {}, } `; + +exports[`standardSchemaResolver > should return values from standardSchemaResolver when validation pass & raw=true 1`] = ` +{ + "errors": {}, + "values": { + "accessToken": "accessToken", + "birthYear": 2000, + "dateStr": "2020-01-01T00:00:00.000Z", + "email": "john@doe.com", + "enabled": true, + "like": [ + { + "id": 1, + "name": "name", + }, + ], + "password": "Password123_", + "repeatPassword": "Password123_", + "tags": [ + "tag1", + "tag2", + ], + "url": "https://react-hook-form.com/", + "username": "Doe", + }, +} +`; + +exports[`standardSchemaResolver > should return values from standardSchemaResolver when validation pass 1`] = ` +{ + "errors": {}, + "values": { + "accessToken": "accessToken", + "birthYear": 2000, + "dateStr": 2020-01-01T00:00:00.000Z, + "email": "john@doe.com", + "enabled": true, + "like": [ + { + "id": 1, + "name": "name", + }, + ], + "password": "Password123_", + "repeatPassword": "Password123_", + "tags": [ + "tag1", + "tag2", + ], + "url": "https://react-hook-form.com/", + "username": "Doe", + }, +} +`; diff --git a/standard-schema/src/__tests__/standard-schema.ts b/standard-schema/src/__tests__/standard-schema.ts index 638d5d0d..b99bfc1c 100644 --- a/standard-schema/src/__tests__/standard-schema.ts +++ b/standard-schema/src/__tests__/standard-schema.ts @@ -4,13 +4,13 @@ import { fields, invalidData, schema, validData } from './__fixtures__/data'; const shouldUseNativeValidation = false; describe('standardSchemaResolver', () => { - it('should return values from standardSchemaResolver when validation pass & raw=true', async () => { + it('should return values from standardSchemaResolver when validation pass', async () => { const result = await standardSchemaResolver(schema)(validData, undefined, { fields, shouldUseNativeValidation, }); - expect(result).toEqual({ errors: {}, values: validData }); + expect(result).toMatchSnapshot(); }); it('should return a single error from standardSchemaResolver when validation fails', async () => { @@ -25,4 +25,32 @@ describe('standardSchemaResolver', () => { expect(result).toMatchSnapshot(); }); + + it('should return all the errors from standardSchemaResolver when validation fails with `validateAllFieldCriteria` set to true', async () => { + const result = await standardSchemaResolver(schema)( + invalidData, + undefined, + { + fields, + criteriaMode: 'all', + shouldUseNativeValidation, + }, + ); + + expect(result).toMatchSnapshot(); + }); + + it('should return values from standardSchemaResolver when validation pass & raw=true', async () => { + const validateSpy = vi.spyOn(schema['~standard'], 'validate'); + + const result = await standardSchemaResolver(schema, { + raw: true, + })(validData, undefined, { + fields, + shouldUseNativeValidation, + }); + + expect(validateSpy).toHaveBeenCalledTimes(1); + expect(result).toMatchSnapshot(); + }); }); diff --git a/standard-schema/src/index.ts b/standard-schema/src/index.ts index 5ee0d3cf..ef117ca6 100644 --- a/standard-schema/src/index.ts +++ b/standard-schema/src/index.ts @@ -1,2 +1 @@ export * from './standard-schema'; -export * from './types'; diff --git a/standard-schema/src/standard-schema.ts b/standard-schema/src/standard-schema.ts index 12d9a9a1..979f6408 100644 --- a/standard-schema/src/standard-schema.ts +++ b/standard-schema/src/standard-schema.ts @@ -1,34 +1,76 @@ import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers'; import { StandardSchemaV1 } from '@standard-schema/spec'; -import { FieldError } from 'react-hook-form'; -import type { Resolver } from './types'; +import { FieldError, FieldValues, Resolver } from 'react-hook-form'; -const parseIssues = (issues: readonly StandardSchemaV1.Issue[]) => { +function parseIssues( + issues: readonly StandardSchemaV1.Issue[], + validateAllFieldCriteria: boolean, +) { const errors: Record = {}; for (let i = 0; i < issues.length; i++) { - const issue = issues[i]; - const path = issue.path?.join('.') ?? ''; + const error = issues[i]; + const path = error.path?.join('.'); if (path) { if (!errors[path]) { - errors[path] = { message: issue.message } as FieldError; + errors[path] = { message: error.message, type: '' }; + } + + if (validateAllFieldCriteria) { + const types = errors[path].types || {}; + + errors[path].types = { + ...types, + [Object.keys(types).length]: error.message, + }; } } } return errors; -}; +} -export const standardSchemaResolver: Resolver = - (schema) => async (values, _, options) => { +/** + * Creates a resolver for react-hook-form that validates data using a Standard Schema. + * + * @param {Schema} schema - The Standard Schema to validate against + * @param {Object} resolverOptions - Options for the resolver + * @param {boolean} [resolverOptions.raw=false] - Whether to return raw input values instead of parsed values + * @returns {Resolver} A resolver function compatible with react-hook-form + * + * @example + * ```ts + * const schema = z.object({ + * name: z.string().min(2), + * age: z.number().min(18) + * }); + * + * useForm({ + * resolver: standardSchemaResolver(schema) + * }); + * ``` + */ +export function standardSchemaResolver< + TFieldValues extends FieldValues, + Schema extends StandardSchemaV1, +>( + schema: Schema, + resolverOptions: { + raw?: boolean; + } = {}, +): Resolver['output']> { + return async (values: TFieldValues, _, options) => { let result = schema['~standard'].validate(values); if (result instanceof Promise) { result = await result; } if (result.issues) { - const errors = parseIssues(result.issues); + const errors = parseIssues( + result.issues, + !options.shouldUseNativeValidation && options.criteriaMode === 'all', + ); return { values: {}, @@ -39,7 +81,8 @@ export const standardSchemaResolver: Resolver = options.shouldUseNativeValidation && validateFieldsNatively({}, options); return { - values: values, + values: resolverOptions.raw ? Object.assign({}, values) : result.value, errors: {}, }; }; +} diff --git a/standard-schema/src/types.ts b/standard-schema/src/types.ts deleted file mode 100644 index c1b8d51e..00000000 --- a/standard-schema/src/types.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { StandardSchemaV1 } from '@standard-schema/spec'; -import { FieldValues, ResolverOptions, ResolverResult } from 'react-hook-form'; - -export type Resolver = >( - schema: T, -) => ( - values: TFieldValues, - context: TContext | undefined, - options: ResolverOptions, -) => Promise>; diff --git a/superstruct/src/__tests__/Form.tsx b/superstruct/src/__tests__/Form.tsx index 6ff8e24a..9798c699 100644 --- a/superstruct/src/__tests__/Form.tsx +++ b/superstruct/src/__tests__/Form.tsx @@ -58,3 +58,29 @@ test("form's validation with Superstruct and TypeScript's integration", async () ).toBeInTheDocument(); expect(handleSubmit).not.toHaveBeenCalled(); }); + +export function TestComponentManualType({ + onSubmit, +}: { + onSubmit: (data: FormData) => void; +}) { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm, undefined, FormData>({ + resolver: superstructResolver(schema), // Useful to check TypeScript regressions + }); + + return ( +
+ + {errors.username && {errors.username.message}} + + + {errors.password && {errors.password.message}} + + +
+ ); +} diff --git a/superstruct/src/__tests__/__fixtures__/data.ts b/superstruct/src/__tests__/__fixtures__/data.ts index d5cc6e7d..8f30ef91 100644 --- a/superstruct/src/__tests__/__fixtures__/data.ts +++ b/superstruct/src/__tests__/__fixtures__/data.ts @@ -53,7 +53,7 @@ export const invalidData = { email: '', birthYear: 'birthYear', like: [{ id: 'z' }], -}; +} as any as Infer; export const fields: Record = { username: { diff --git a/superstruct/src/index.ts b/superstruct/src/index.ts index d45b047a..2acaa550 100644 --- a/superstruct/src/index.ts +++ b/superstruct/src/index.ts @@ -1,2 +1 @@ export * from './superstruct'; -export * from './types'; diff --git a/superstruct/src/superstruct.ts b/superstruct/src/superstruct.ts index 1bd58a1b..9954f524 100644 --- a/superstruct/src/superstruct.ts +++ b/superstruct/src/superstruct.ts @@ -1,11 +1,9 @@ import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers'; -import { FieldError } from 'react-hook-form'; +import { FieldError, FieldValues, Resolver } from 'react-hook-form'; +import { Infer, Struct, StructError, validate } from 'superstruct'; -import { StructError, validate } from 'superstruct'; -import { Resolver } from './types'; - -const parseErrorSchema = (error: StructError) => - error.failures().reduce>( +function parseErrorSchema(error: StructError) { + return error.failures().reduce>( (previous, error) => (previous[error.path.join('.')] = { message: error.message, @@ -13,10 +11,33 @@ const parseErrorSchema = (error: StructError) => }) && previous, {}, ); +} -export const superstructResolver: Resolver = - (schema, schemaOptions, resolverOptions = {}) => - (values, _, options) => { +/** + * Creates a resolver for react-hook-form using Superstruct schema validation + * @param {Struct} schema - The Superstruct schema to validate against + * @param {Parameters[2]} [schemaOptions] - Optional Superstruct validation options + * @param {Object} resolverOptions - Additional resolver configuration + * @param {boolean} [resolverOptions.raw=false] - If true, returns raw values rather than validated results + * @returns {Resolver>} A resolver function compatible with react-hook-form + * @example + * const schema = struct({ + * name: string(), + * age: number() + * }); + * + * useForm({ + * resolver: superstructResolver(schema) + * }); + */ +export function superstructResolver( + schema: Struct, + schemaOptions?: Parameters[2], + resolverOptions: { + raw?: boolean; + } = {}, +): Resolver> { + return (values, _, options) => { const result = validate(values, schema, schemaOptions); if (result[0]) { @@ -33,3 +54,4 @@ export const superstructResolver: Resolver = errors: {}, }; }; +} diff --git a/superstruct/src/types.ts b/superstruct/src/types.ts deleted file mode 100644 index 5e29da91..00000000 --- a/superstruct/src/types.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { FieldValues, ResolverOptions, ResolverResult } from 'react-hook-form'; -import { Struct, validate } from 'superstruct'; - -type Options = Parameters[2]; - -export type Resolver = >( - schema: T, - options?: Options, - factoryOptions?: { - /** - * Return the raw input values rather than the parsed values. - * @default false - */ - raw?: boolean; - }, -) => ( - values: TFieldValues, - context: TContext | undefined, - options: ResolverOptions, -) => ResolverResult; diff --git a/typanion/src/__tests__/Form-native-validation.tsx b/typanion/src/__tests__/Form-native-validation.tsx index 1a734725..b0765763 100644 --- a/typanion/src/__tests__/Form-native-validation.tsx +++ b/typanion/src/__tests__/Form-native-validation.tsx @@ -9,22 +9,14 @@ const ERROR_MESSAGE = 'Expected to have a length of at least 1 elements (got 0)'; const schema = t.isObject({ - username: t.applyCascade(t.isString(), [t.hasMinLength(1)]), - password: t.applyCascade(t.isString(), [t.hasMinLength(1)]), + username: t.cascade(t.isString(), [t.hasMinLength(1)]), + password: t.cascade(t.isString(), [t.hasMinLength(1)]), }); -interface FormData { - unusedProperty: string; - username: string; - password: string; -} - -interface Props { - onSubmit: (data: FormData) => void; -} - -function TestComponent({ onSubmit }: Props) { - const { register, handleSubmit } = useForm({ +function TestComponent({ + onSubmit, +}: { onSubmit: (data: t.InferType) => void }) { + const { register, handleSubmit } = useForm({ resolver: typanionResolver(schema), shouldUseNativeValidation: true, }); diff --git a/typanion/src/__tests__/Form.tsx b/typanion/src/__tests__/Form.tsx index 339439ab..04c5e499 100644 --- a/typanion/src/__tests__/Form.tsx +++ b/typanion/src/__tests__/Form.tsx @@ -6,8 +6,8 @@ import * as t from 'typanion'; import { typanionResolver } from '..'; const schema = t.isObject({ - username: t.applyCascade(t.isString(), [t.hasMinLength(1)]), - password: t.applyCascade(t.isString(), [t.hasMinLength(1)]), + username: t.cascade(t.isString(), [t.hasMinLength(1)]), + password: t.cascade(t.isString(), [t.hasMinLength(1)]), }); interface FormData { @@ -16,16 +16,14 @@ interface FormData { password: string; } -interface Props { - onSubmit: (data: FormData) => void; -} - -function TestComponent({ onSubmit }: Props) { +function TestComponent({ + onSubmit, +}: { onSubmit: (data: t.InferType) => void }) { const { register, formState: { errors }, handleSubmit, - } = useForm({ + } = useForm({ resolver: typanionResolver(schema), // Useful to check TypeScript regressions }); @@ -57,3 +55,29 @@ test("form's validation with Typanion and TypeScript's integration", async () => ).toHaveLength(2); expect(handleSubmit).not.toHaveBeenCalled(); }); + +export function TestComponentManualType({ + onSubmit, +}: { + onSubmit: (data: FormData) => void; +}) { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm, undefined, FormData>({ + resolver: typanionResolver(schema), // Useful to check TypeScript regressions + }); + + return ( +
+ + {errors.username && {errors.username.message}} + + + {errors.password && {errors.password.message}} + + +
+ ); +} diff --git a/typanion/src/__tests__/__fixtures__/data.ts b/typanion/src/__tests__/__fixtures__/data.ts index ccb6f89f..513c3c71 100644 --- a/typanion/src/__tests__/__fixtures__/data.ts +++ b/typanion/src/__tests__/__fixtures__/data.ts @@ -1,13 +1,13 @@ import { Field, InternalFieldName } from 'react-hook-form'; import * as t from 'typanion'; -export const isSchema = t.isObject({ - username: t.applyCascade(t.isString(), [ +export const schema = t.isObject({ + username: t.cascade(t.isString(), [ t.matchesRegExp(/^\w+$/), t.hasMinLength(2), t.hasMaxLength(30), ]), - password: t.applyCascade(t.isString(), [ + password: t.cascade(t.isString(), [ t.matchesRegExp(new RegExp('.*[A-Z].*')), // one uppercase character t.matchesRegExp(new RegExp('.*[a-z].*')), // one lowercase character t.matchesRegExp(new RegExp('.*\\d.*')), // one number @@ -16,7 +16,7 @@ export const isSchema = t.isObject({ ), // one special character t.hasMinLength(8), // Must be at least 8 characters in length ]), - repeatPassword: t.applyCascade(t.isString(), [ + repeatPassword: t.cascade(t.isString(), [ t.matchesRegExp(new RegExp('.*[A-Z].*')), // one uppercase character t.matchesRegExp(new RegExp('.*[a-z].*')), // one lowercase character t.matchesRegExp(new RegExp('.*\\d.*')), // one number @@ -26,16 +26,16 @@ export const isSchema = t.isObject({ t.hasMinLength(8), // Must be at least 8 characters in length ]), accessToken: t.isString(), - birthYear: t.applyCascade(t.isNumber(), [ + birthYear: t.cascade(t.isNumber(), [ t.isInteger(), t.isInInclusiveRange(1900, 2013), ]), - email: t.applyCascade(t.isString(), [t.matchesRegExp(/^\S+@\S+$/)]), + email: t.cascade(t.isString(), [t.matchesRegExp(/^\S+@\S+$/)]), tags: t.isArray(t.isString()), enabled: t.isBoolean(), like: t.isObject({ - id: t.applyCascade(t.isNumber(), [t.isInteger(), t.isPositive()]), - name: t.applyCascade(t.isString(), [t.hasMinLength(4)]), + id: t.cascade(t.isNumber(), [t.isInteger(), t.isPositive()]), + name: t.cascade(t.isString(), [t.hasMinLength(4)]), }), }); @@ -60,7 +60,7 @@ export const invalidData = { birthYear: 'birthYear', like: { id: 'z' }, tags: [1, 2, 3], -}; +} as any as t.InferType; export const fields: Record = { username: { diff --git a/typanion/src/__tests__/typanion.ts b/typanion/src/__tests__/typanion.ts index ff55961c..2b6bc615 100644 --- a/typanion/src/__tests__/typanion.ts +++ b/typanion/src/__tests__/typanion.ts @@ -1,8 +1,8 @@ import { typanionResolver } from '..'; -import { fields, invalidData, isSchema, validData } from './__fixtures__/data'; +import { fields, invalidData, schema, validData } from './__fixtures__/data'; const tmpObj = { - validate: isSchema, + validate: schema, }; const shouldUseNativeValidation = false; @@ -25,7 +25,7 @@ describe('typanionResolver', () => { }); it('should return a single error from typanionResolver when validation fails', async () => { - const result = await typanionResolver(isSchema)(invalidData, undefined, { + const result = await typanionResolver(schema)(invalidData, undefined, { fields, shouldUseNativeValidation, }); diff --git a/typanion/src/index.ts b/typanion/src/index.ts index 492ec467..11df6dcb 100644 --- a/typanion/src/index.ts +++ b/typanion/src/index.ts @@ -1,2 +1 @@ export * from './typanion'; -export * from './types'; diff --git a/typanion/src/typanion.ts b/typanion/src/typanion.ts index 12906305..deac3bd4 100644 --- a/typanion/src/typanion.ts +++ b/typanion/src/typanion.ts @@ -1,8 +1,13 @@ import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers'; -import type { FieldError, FieldErrors } from 'react-hook-form'; -import type { Resolver } from './types'; +import type { + FieldError, + FieldErrors, + FieldValues, + Resolver, +} from 'react-hook-form'; +import * as t from 'typanion'; -const parseErrors = (errors: string[], parsedErrors: FieldErrors = {}) => { +function parseErrors(errors: string[], parsedErrors: FieldErrors = {}) { return errors.reduce((acc, error) => { const fieldIndex = error.indexOf(':'); @@ -15,20 +20,37 @@ const parseErrors = (errors: string[], parsedErrors: FieldErrors = {}) => { return acc; }, parsedErrors); -}; +} -export const typanionResolver: Resolver = - (validator, validatorOptions = {}) => - (values, _, options) => { +/** + * Creates a resolver for react-hook-form using Typanion schema validation + * @param {t.StrictValidator} schema - The Typanion schema to validate against + * @param {Pick} [schemaOptions] - Optional Typanion validation options + * @returns {Resolver>} A resolver function compatible with react-hook-form + * @example + * const schema = t.isObject({ + * name: t.isString(), + * age: t.isInteger() + * }); + * + * useForm({ + * resolver: typanionResolver(schema) + * }); + */ +export function typanionResolver( + schema: t.StrictValidator, + schemaOptions: Pick = {}, +): Resolver> { + return (values, _, options) => { const rawErrors: string[] = []; - const isValid = validator( + const isValid = schema( values, Object.assign( {}, { errors: rawErrors, }, - validatorOptions, + schemaOptions, ), ); const parsedErrors = parseErrors(rawErrors); @@ -42,3 +64,4 @@ export const typanionResolver: Resolver = return { values: {}, errors: toNestErrors(parsedErrors, options) }; }; +} diff --git a/typanion/src/types.ts b/typanion/src/types.ts deleted file mode 100644 index f767586f..00000000 --- a/typanion/src/types.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { - FieldValues, - ResolverOptions, - ResolverResult, -} from 'react-hook-form'; -import { AnyStrictValidator, ValidationState } from 'typanion'; - -type ValidateOptions = Pick; - -type RHFResolver = ( - values: TFieldValues, - context: TContext | undefined, - options: ResolverOptions, -) => ResolverResult; - -export type Resolver = ( - validator: UnknownValidator, - validatorOptions?: ValidateOptions, - resolverOptions?: { mode?: 'async' | 'sync'; rawValues?: boolean }, -) => RHFResolver; diff --git a/typebox/src/__tests__/Form-compiler.tsx b/typebox/src/__tests__/Form-compiler.tsx index 15363831..ef3ca70a 100644 --- a/typebox/src/__tests__/Form-compiler.tsx +++ b/typebox/src/__tests__/Form-compiler.tsx @@ -13,18 +13,14 @@ const schema = Type.Object({ const typecheck = TypeCompiler.Compile(schema); -type FormData = Static & { unusedProperty: string }; - -interface Props { - onSubmit: (data: FormData) => void; -} - -function TestComponent({ onSubmit }: Props) { +function TestComponent({ + onSubmit, +}: { onSubmit: (data: Static) => void }) { const { register, handleSubmit, formState: { errors }, - } = useForm({ + } = useForm({ resolver: typeboxResolver(typecheck), // Useful to check TypeScript regressions }); diff --git a/typebox/src/__tests__/Form.tsx b/typebox/src/__tests__/Form.tsx index c4919aa8..0b80abb4 100644 --- a/typebox/src/__tests__/Form.tsx +++ b/typebox/src/__tests__/Form.tsx @@ -12,16 +12,16 @@ const schema = Type.Object({ type FormData = Static & { unusedProperty: string }; -interface Props { - onSubmit: (data: FormData) => void; -} - -function TestComponent({ onSubmit }: Props) { +function TestComponent({ + onSubmit, +}: { + onSubmit: (data: Static) => void; +}) { const { register, handleSubmit, formState: { errors }, - } = useForm({ + } = useForm({ resolver: typeboxResolver(schema), // Useful to check TypeScript regressions }); @@ -52,3 +52,29 @@ test("form's validation with Typebox and TypeScript's integration", async () => expect(handleSubmit).not.toHaveBeenCalled(); }); + +export function TestComponentManualType({ + onSubmit, +}: { + onSubmit: (data: FormData) => void; +}) { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm, undefined, FormData>({ + resolver: typeboxResolver(schema), // Useful to check TypeScript regressions + }); + + return ( +
+ + {errors.username && {errors.username.message}} + + + {errors.password && {errors.password.message}} + + +
+ ); +} diff --git a/typebox/src/__tests__/__fixtures__/data.ts b/typebox/src/__tests__/__fixtures__/data.ts index 113c8064..fc6153d4 100644 --- a/typebox/src/__tests__/__fixtures__/data.ts +++ b/typebox/src/__tests__/__fixtures__/data.ts @@ -61,7 +61,7 @@ export const invalidData = { birthYear: 'birthYear', like: [{ id: 'z' }], url: 'abc', -}; +} as any as Static; export const fields: Record = { username: { diff --git a/typebox/src/index.ts b/typebox/src/index.ts index 7e3350ad..f7dfd500 100644 --- a/typebox/src/index.ts +++ b/typebox/src/index.ts @@ -1,2 +1 @@ export * from './typebox'; -export * from './types'; diff --git a/typebox/src/typebox.ts b/typebox/src/typebox.ts index 367b2e65..86f01529 100644 --- a/typebox/src/typebox.ts +++ b/typebox/src/typebox.ts @@ -1,13 +1,19 @@ import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers'; +import { Static, Type } from '@sinclair/typebox'; import { TypeCheck } from '@sinclair/typebox/compiler'; import { Value, type ValueError } from '@sinclair/typebox/value'; -import { FieldError, FieldErrors, appendErrors } from 'react-hook-form'; -import type { Resolver } from './types'; +import { + FieldError, + FieldErrors, + FieldValues, + Resolver, + appendErrors, +} from 'react-hook-form'; -const parseErrorSchema = ( +function parseErrorSchema( _errors: ValueError[], validateAllFieldCriteria: boolean, -) => { +) { const errors: Record = {}; for (; _errors.length; ) { const error = _errors[0]; @@ -37,10 +43,29 @@ const parseErrorSchema = ( } return errors; -}; +} -export const typeboxResolver: Resolver = - (schema) => async (values, _, options) => { +/** + * Creates a resolver for react-hook-form using Typebox schema validation + * @param {Schema | TypeCheck} schema - The Typebox schema to validate against + * @param {Object} options - Additional resolver configuration + * @param {string} [options.mode='async'] - Validation mode + * @returns {Resolver>} A resolver function compatible with react-hook-form + * @example + * const schema = Type.Object({ + * name: Type.String(), + * age: Type.Number() + * }); + * + * useForm({ + * resolver: typeboxResolver(schema) + * }); + */ +export function typeboxResolver< + TFieldValues extends FieldValues, + Schema extends ReturnType>, +>(schema: Schema | TypeCheck): Resolver> { + return async (values, _, options) => { const errors = Array.from( schema instanceof TypeCheck ? schema.Errors(values) @@ -67,3 +92,4 @@ export const typeboxResolver: Resolver = ), }; }; +} diff --git a/typebox/src/types.ts b/typebox/src/types.ts deleted file mode 100644 index 8bb580b6..00000000 --- a/typebox/src/types.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Type } from '@sinclair/typebox'; -import type { TypeCheck } from '@sinclair/typebox/compiler'; -import { FieldValues, ResolverOptions, ResolverResult } from 'react-hook-form'; - -export type Resolver = >( - schema: T | TypeCheck, -) => ( - values: TFieldValues, - context: TContext | undefined, - options: ResolverOptions, -) => Promise>; diff --git a/typeschema/src/typeschema.ts b/typeschema/src/typeschema.ts index 12fb40a0..92678052 100644 --- a/typeschema/src/typeschema.ts +++ b/typeschema/src/typeschema.ts @@ -43,6 +43,23 @@ const parseErrorSchema = ( return errors; }; +/** + * Creates a resolver for react-hook-form using TypeSchema validation + * @param {any} schema - The TypeSchema to validate against + * @param {any} _ - Unused parameter + * @param {Object} resolverOptions - Additional resolver configuration + * @param {string} [resolverOptions.mode='async'] - Validation mode + * @returns {Resolver} A resolver function compatible with react-hook-form + * @example + * const schema = z.object({ + * name: z.string().required(), + * age: z.number().required(), + * }); + * + * useForm({ + * resolver: typeschemaResolver(schema) + * }); + */ export const typeschemaResolver: Resolver = (schema, _, resolverOptions = {}) => async (values, _, options) => { diff --git a/valibot/src/__tests__/Form.tsx b/valibot/src/__tests__/Form.tsx index 34dcaaae..44bc9bbe 100644 --- a/valibot/src/__tests__/Form.tsx +++ b/valibot/src/__tests__/Form.tsx @@ -59,3 +59,29 @@ test("form's validation with Valibot and TypeScript's integration", async () => expect(screen.getByText(/password field is required/i)).toBeInTheDocument(); expect(handleSubmit).not.toHaveBeenCalled(); }); + +export function TestComponentManualType({ + onSubmit, +}: { + onSubmit: (data: FormData) => void; +}) { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm, undefined, FormData>({ + resolver: valibotResolver(schema), // Useful to check TypeScript regressions + }); + + return ( +
+ + {errors.username && {errors.username.message}} + + + {errors.password && {errors.password.message}} + + +
+ ); +} diff --git a/valibot/src/__tests__/__fixtures__/data.ts b/valibot/src/__tests__/__fixtures__/data.ts index 7d99d6a4..21691c70 100644 --- a/valibot/src/__tests__/__fixtures__/data.ts +++ b/valibot/src/__tests__/__fixtures__/data.ts @@ -49,8 +49,12 @@ export const schemaError = v.variant('type', [ v.object({ type: v.literal('b') }), ]); -export const validSchemaErrorData = { type: 'a' }; -export const invalidSchemaErrorData = { type: 'c' }; +export const validSchemaErrorData = { type: 'a' } as v.InferOutput< + typeof schemaError +>; +export const invalidSchemaErrorData = { type: 'c' } as any as v.InferOutput< + typeof schemaError +>; export const validData = { username: 'Doe', @@ -73,7 +77,7 @@ export const invalidData = { birthYear: 'birthYear', like: { id: 'z' }, tags: [1, 2, 3], -}; +} as any as v.InferOutput; export const fields: Record = { username: { diff --git a/valibot/src/index.ts b/valibot/src/index.ts index ce0aecae..097f317f 100644 --- a/valibot/src/index.ts +++ b/valibot/src/index.ts @@ -1,2 +1 @@ export * from './valibot'; -export * from './types'; diff --git a/valibot/src/types.ts b/valibot/src/types.ts deleted file mode 100644 index be1442c7..00000000 --- a/valibot/src/types.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { FieldValues, ResolverOptions, ResolverResult } from 'react-hook-form'; -import { - BaseIssue, - BaseSchema, - BaseSchemaAsync, - Config, - InferIssue, -} from 'valibot'; - -export type Resolver = < - T extends - | BaseSchema> - | BaseSchemaAsync>, ->( - schema: T, - schemaOptions?: Partial< - Omit>, 'abortPipeEarly' | 'skipPipe'> - >, - resolverOptions?: { - /** - * @default async - */ - mode?: 'sync' | 'async'; - /** - * Return the raw input values rather than the parsed values. - * @default false - */ - raw?: boolean; - }, -) => ( - values: TFieldValues, - context: TContext | undefined, - options: ResolverOptions, -) => Promise>; diff --git a/valibot/src/valibot.ts b/valibot/src/valibot.ts index 27434efc..70d44ff2 100644 --- a/valibot/src/valibot.ts +++ b/valibot/src/valibot.ts @@ -1,11 +1,57 @@ import { toNestErrors } from '@hookform/resolvers'; -import { FieldError, FieldValues, appendErrors } from 'react-hook-form'; +import { + FieldError, + FieldValues, + Resolver, + appendErrors, +} from 'react-hook-form'; import { getDotPath, safeParseAsync } from 'valibot'; -import type { Resolver } from './types'; +import { + BaseSchema, + BaseSchemaAsync, + Config, + InferIssue, + InferOutput, +} from 'valibot'; -export const valibotResolver: Resolver = - (schema, schemaOptions, resolverOptions = {}) => - async (values, _, options) => { +/** + * Creates a resolver for react-hook-form using Valibot schema validation + * @param {BaseSchema | BaseSchemaAsync} schema - The Valibot schema to validate against + * @param {Partial>, 'abortPipeEarly' | 'skipPipe'>>} [schemaOptions] - Optional Valibot validation options + * @param {Object} resolverOptions - Additional resolver configuration + * @param {('sync' | 'async')} [resolverOptions.mode] - Validation mode + * @param {boolean} [resolverOptions.raw] - If true, returns raw values rather than validated results + * @returns {Resolver>} A resolver function compatible with react-hook-form + * @example + * const schema = valibot.object({ + * name: valibot.string().minLength(2), + * age: valibot.number().min(18) + * }); + * + * useForm({ + * resolver: valibotResolver(schema) + * }); + */ +export function valibotResolver( + schema: + | BaseSchema + | BaseSchemaAsync, + schemaOptions?: Partial< + Omit>, 'abortPipeEarly' | 'skipPipe'> + >, + resolverOptions: { + /** + * @default async + */ + mode?: 'sync' | 'async'; + /** + * Return the raw input values rather than the parsed values. + * @default false + */ + raw?: boolean; + } = {}, +): Resolver> { + return async (values, _, options) => { // Check if we should validate all field criteria const validateAllFieldCriteria = !options.shouldUseNativeValidation && options.criteriaMode === 'all'; @@ -73,3 +119,4 @@ export const valibotResolver: Resolver = errors: {}, }; }; +} diff --git a/vest/src/vest.ts b/vest/src/vest.ts index 58e64a43..7e098bf1 100644 --- a/vest/src/vest.ts +++ b/vest/src/vest.ts @@ -23,6 +23,24 @@ const parseErrorSchema = ( return errors; }; +/** + * Creates a resolver for react-hook-form using Vest validation + * @param {Function} schema - The Vest validation schema + * @param {Object} _ - Unused parameter + * @param {Object} resolverOptions - Additional resolver configuration + * @param {string} [resolverOptions.mode='async'] - Validation mode + * @returns {Resolver} A resolver function compatible with react-hook-form + * @example + * const schema = vest.create((data) => { + * if (!data.name) { + * return 'Name is required'; + * } + * }); + * + * useForm({ + * resolver: vestResolver(schema) + * }); + */ export const vestResolver: Resolver = (schema, _, resolverOptions = {}) => async (values, context, options) => { diff --git a/vine/src/__tests__/Form-native-validation.tsx b/vine/src/__tests__/Form-native-validation.tsx index 999ce735..fd569e5d 100644 --- a/vine/src/__tests__/Form-native-validation.tsx +++ b/vine/src/__tests__/Form-native-validation.tsx @@ -13,14 +13,12 @@ const schema = vine.compile( }), ); -type FormData = Infer & { unusedProperty: string }; - interface Props { - onSubmit: (data: FormData) => void; + onSubmit: (data: Infer) => void; } function TestComponent({ onSubmit }: Props) { - const { register, handleSubmit } = useForm({ + const { register, handleSubmit } = useForm({ resolver: vineResolver(schema), shouldUseNativeValidation: true, }); diff --git a/vine/src/__tests__/Form.tsx b/vine/src/__tests__/Form.tsx index de664beb..023a6f7f 100644 --- a/vine/src/__tests__/Form.tsx +++ b/vine/src/__tests__/Form.tsx @@ -15,16 +15,14 @@ const schema = vine.compile( type FormData = Infer & { unusedProperty: string }; -interface Props { - onSubmit: (data: FormData) => void; -} - -function TestComponent({ onSubmit }: Props) { +function TestComponent({ + onSubmit, +}: { onSubmit: (data: Infer) => void }) { const { register, handleSubmit, formState: { errors }, - } = useForm({ + } = useForm({ resolver: vineResolver(schema), // Useful to check TypeScript regressions }); @@ -57,3 +55,29 @@ test("form's validation with Vine and TypeScript's integration", async () => { ).toBeInTheDocument(); expect(handleSubmit).not.toHaveBeenCalled(); }); + +export function TestComponentManualType({ + onSubmit, +}: { + onSubmit: (data: FormData) => void; +}) { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm, undefined, FormData>({ + resolver: vineResolver(schema), // Useful to check TypeScript regressions + }); + + return ( +
+ + {errors.username && {errors.username.message}} + + + {errors.password && {errors.password.message}} + + +
+ ); +} diff --git a/vine/src/__tests__/__fixtures__/data.ts b/vine/src/__tests__/__fixtures__/data.ts index f4078574..3d27708a 100644 --- a/vine/src/__tests__/__fixtures__/data.ts +++ b/vine/src/__tests__/__fixtures__/data.ts @@ -54,7 +54,7 @@ export const invalidData = { email: '', birthYear: 'birthYear', like: [{ id: 'z' }], -}; +} as any as Infer; export const fields: Record = { username: { diff --git a/vine/src/index.ts b/vine/src/index.ts index 6266c98e..ddc3de18 100644 --- a/vine/src/index.ts +++ b/vine/src/index.ts @@ -1,2 +1 @@ export * from './vine'; -export * from './types'; diff --git a/vine/src/types.ts b/vine/src/types.ts deleted file mode 100644 index 59ed349d..00000000 --- a/vine/src/types.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { VineValidator } from '@vinejs/vine'; -import { ValidationOptions } from '@vinejs/vine/build/src/types'; -import { FieldValues, ResolverOptions, ResolverResult } from 'react-hook-form'; - -export type Resolver = >( - schema: T, - schemaOptions?: ValidationOptions, - resolverOptions?: { raw?: boolean }, -) => ( - values: TFieldValues, - context: TContext | undefined, - options: ResolverOptions, -) => Promise>; diff --git a/vine/src/vine.ts b/vine/src/vine.ts index 97574218..4d1ec0ea 100644 --- a/vine/src/vine.ts +++ b/vine/src/vine.ts @@ -1,12 +1,17 @@ import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers'; -import { SimpleErrorReporter, errors } from '@vinejs/vine'; -import { FieldError, FieldErrors, appendErrors } from 'react-hook-form'; -import type { Resolver } from './types'; +import { SimpleErrorReporter, VineValidator, errors } from '@vinejs/vine'; +import { Infer, ValidationOptions } from '@vinejs/vine/build/src/types'; +import { + FieldError, + FieldErrors, + Resolver, + appendErrors, +} from 'react-hook-form'; -const parseErrorSchema = ( +function parseErrorSchema( vineErrors: SimpleErrorReporter['errors'], validateAllFieldCriteria: boolean, -) => { +) { const schemaErrors: Record = {}; for (; vineErrors.length; ) { @@ -34,11 +39,33 @@ const parseErrorSchema = ( } return schemaErrors; -}; +} -export const vineResolver: Resolver = - (schema, schemaOptions, resolverOptions = {}) => - async (values, _, options) => { +/** + * Creates a resolver for react-hook-form using VineJS schema validation + * @param {T} schema - The VineJS schema to validate against + * @param {ValidationOptions} [schemaOptions] - Optional VineJS validation options + * @param {Object} [resolverOptions] - Optional resolver configuration + * @param {boolean} [resolverOptions.raw=false] - If true, returns raw values instead of validated results + * @returns {Resolver>} A resolver function compatible with react-hook-form + * @example + * const schema = vine.compile( + * vine.object({ + * name: vine.string().minLength(2), + * age: vine.number().min(18) + * }) + * ); + * + * useForm({ + * resolver: vineResolver(schema) + * }); + */ +export function vineResolver>( + schema: T, + schemaOptions?: ValidationOptions, + resolverOptions: { raw?: boolean } = {}, +): Resolver> { + return async (values, _, options) => { try { const data = await schema.validate(values, schemaOptions); @@ -66,3 +93,4 @@ export const vineResolver: Resolver = throw error; } }; +} diff --git a/yup/src/yup.ts b/yup/src/yup.ts index b67726e2..1ac91027 100644 --- a/yup/src/yup.ts +++ b/yup/src/yup.ts @@ -11,10 +11,10 @@ import * as Yup from 'yup'; * Why `path!` ? because it could be `undefined` in some case * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string */ -const parseErrorSchema = ( +function parseErrorSchema( error: Yup.ValidationError, validateAllFieldCriteria: boolean, -) => { +) { return (error.inner || []).reduce>( (previous, error) => { if (!previous[error.path!]) { @@ -40,22 +40,33 @@ const parseErrorSchema = ( }, {}, ); -}; +} +/** + * Creates a resolver for react-hook-form using Yup schema validation + * @param {Yup.ObjectSchema | ReturnType>>} schema - Yup validation schema + * @param {Parameters<(typeof schema)['validate']>[1]} schemaOptions - Options to pass to Yup's validate/validateSync + * @param {Object} resolverOptions - Additional resolver configuration + * @param {('async' | 'sync')} [resolverOptions.mode] - Validation mode + * @param {boolean} [resolverOptions.raw] - If true, returns raw values instead of validated results + * @returns {Resolver>} A resolver function compatible with react-hook-form + * @example + * const schema = Yup.object({ + * name: Yup.string().required(), + * age: Yup.number().required(), + * }); + * + * useForm({ + * resolver: yupResolver(schema) + * }); + */ export function yupResolver( schema: | Yup.ObjectSchema | ReturnType>>, schemaOptions: Parameters<(typeof schema)['validate']>[1] = {}, resolverOptions: { - /** - * @default async - */ mode?: 'async' | 'sync'; - /** - * Return the raw input values rather than the parsed values. - * @default false - */ raw?: boolean; } = {}, ): Resolver> { diff --git a/zod/src/__tests__/Form.tsx b/zod/src/__tests__/Form.tsx index 8b792c79..5971c7df 100644 --- a/zod/src/__tests__/Form.tsx +++ b/zod/src/__tests__/Form.tsx @@ -12,16 +12,14 @@ const schema = z.object({ type FormData = z.infer & { unusedProperty: string }; -interface Props { - onSubmit: (data: FormData) => void; -} - -function TestComponent({ onSubmit }: Props) { +function TestComponent({ + onSubmit, +}: { onSubmit: (data: z.infer) => void }) { const { register, handleSubmit, formState: { errors }, - } = useForm({ + } = useForm({ resolver: zodResolver(schema), // Useful to check TypeScript regressions }); @@ -50,3 +48,29 @@ test("form's validation with Zod and TypeScript's integration", async () => { expect(screen.getByText(/password field is required/i)).toBeInTheDocument(); expect(handleSubmit).not.toHaveBeenCalled(); }); + +export function TestComponentManualType({ + onSubmit, +}: { + onSubmit: (data: FormData) => void; +}) { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm, undefined, FormData>({ + resolver: zodResolver(schema), // Useful to check TypeScript regressions + }); + + return ( +
+ + {errors.username && {errors.username.message}} + + + {errors.password && {errors.password.message}} + + +
+ ); +} diff --git a/zod/src/__tests__/__fixtures__/data.ts b/zod/src/__tests__/__fixtures__/data.ts index 01923b40..25fa0dd0 100644 --- a/zod/src/__tests__/__fixtures__/data.ts +++ b/zod/src/__tests__/__fixtures__/data.ts @@ -41,7 +41,7 @@ export const schema = z path: ['confirm'], }); -export const validData: z.input = { +export const validData = { username: 'Doe', password: 'Password123_', repeatPassword: 'Password123_', @@ -58,7 +58,7 @@ export const validData: z.input = { }, ], dateStr: '2020-01-01', -}; +} as any as z.infer; export const invalidData = { password: '___', @@ -66,7 +66,7 @@ export const invalidData = { birthYear: 'birthYear', like: [{ id: 'z' }], url: 'abc', -}; +} as any as z.infer; export const fields: Record = { username: { diff --git a/zod/src/index.ts b/zod/src/index.ts index a60a00eb..6748f26c 100644 --- a/zod/src/index.ts +++ b/zod/src/index.ts @@ -1,2 +1 @@ export * from './zod'; -export * from './types'; diff --git a/zod/src/types.ts b/zod/src/types.ts deleted file mode 100644 index 162e649d..00000000 --- a/zod/src/types.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { FieldValues, ResolverOptions, ResolverResult } from 'react-hook-form'; -import { z } from 'zod'; - -export type Resolver = >( - schema: T, - schemaOptions?: Partial, - factoryOptions?: { - /** - * @default async - */ - mode?: 'async' | 'sync'; - /** - * Return the raw input values rather than the parsed values. - * @default false - */ - raw?: boolean; - }, -) => ( - values: TFieldValues, - context: TContext | undefined, - options: ResolverOptions, -) => Promise>; diff --git a/zod/src/zod.ts b/zod/src/zod.ts index 1f1f5153..8ac45412 100644 --- a/zod/src/zod.ts +++ b/zod/src/zod.ts @@ -1,15 +1,20 @@ import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers'; -import { FieldError, FieldErrors, appendErrors } from 'react-hook-form'; +import { + FieldError, + FieldErrors, + FieldValues, + Resolver, + appendErrors, +} from 'react-hook-form'; import { ZodError, z } from 'zod'; -import type { Resolver } from './types'; const isZodError = (error: any): error is ZodError => Array.isArray(error?.errors); -const parseErrorSchema = ( +function parseErrorSchema( zodErrors: z.ZodIssue[], validateAllFieldCriteria: boolean, -) => { +) { const errors: Record = {}; for (; zodErrors.length; ) { const error = zodErrors[0]; @@ -54,11 +59,36 @@ const parseErrorSchema = ( } return errors; -}; +} -export const zodResolver: Resolver = - (schema, schemaOptions, resolverOptions = {}) => - async (values, _, options) => { +/** + * Creates a resolver function for react-hook-form that validates form data using a Zod schema + * @param {z.ZodSchema} schema - The Zod schema used to validate the form data + * @param {Partial} [schemaOptions] - Optional configuration options for Zod parsing + * @param {Object} [resolverOptions] - Optional resolver-specific configuration + * @param {('async'|'sync')} [resolverOptions.mode='async'] - Validation mode. Use 'sync' for synchronous validation + * @param {boolean} [resolverOptions.raw=false] - If true, returns the raw form values instead of the parsed data + * @returns {Resolver>} A resolver function compatible with react-hook-form + * @throws {Error} Throws if validation fails with a non-Zod error + * @example + * const schema = z.object({ + * name: z.string().min(2), + * age: z.number().min(18) + * }); + * + * useForm({ + * resolver: zodResolver(schema) + * }); + */ +export function zodResolver( + schema: z.ZodSchema, + schemaOptions?: Partial, + resolverOptions: { + mode?: 'async' | 'sync'; + raw?: boolean; + } = {}, +): Resolver> { + return async (values, _, options) => { try { const data = await schema[ resolverOptions.mode === 'sync' ? 'parse' : 'parseAsync' @@ -88,3 +118,4 @@ export const zodResolver: Resolver = throw error; } }; +}