From 26b29dcbc7da9479b6cdd4fecaa05647eb06e5d5 Mon Sep 17 00:00:00 2001 From: Jonas Lagoni Date: Tue, 17 Oct 2023 21:10:45 +0200 Subject: [PATCH] feat!: release version 2 (#1112) * fix!: use preferred ids over anonymous ids (#1099) * chore(release): v2.0.0-next.1 (#1113) * fix!: adds union type when operation.message.oneOf is set (#1136) * chore(release): v2.0.0-next.2 (#1144) * chore(release): v2.0.0-next.3 (#1146) * fix!: additionalItems being applied for regular arrays (#1140) * chore(release): v2.0.0-next.4 (#1151) * test: upgrades eslint and adds eslint-plugin-jest (#1166) * fix!: fixes required properties when if/then/else is used (#1149) * chore(release): v2.0.0-next.5 (#1184) * chore: update snapshot and packagelock * chore: update snapshot of example * feat: force release (#1221) * chore(release): v2.0.0-next.6 (#1222) * feat!: handle const and discriminator (#1169) * feat: handle const * feat: handle const * feat: handle const * feat: handle const * feat: handle const * feat: handle const * feat: handle const * fixes bug when using oneOf in channel by not adding models to input model if they have already been scanned * feat: handle const * feat: handle const * feat: handle const * feat: handle const * feat: handle const * feat: handle const * feat: handle const * feat: set correct java quotes * remove discriminator from CommonModel because we don't need it * remove discriminator from CommonModel because we don't need it * fixes review comments * adds constant constrainers * adds constant constrainers * adds constant constrainers * adds constant constrainers * remove unused var * chore(release): v2.0.0-next.7 (#1242) * fix!: should not carry over options from metaModel to constrainedModel (#1243) * chore(release): v2.0.0-next.8 (#1247) * docs: fixes constant constraints documentation (#1241) * refactor: adds discriminator in CommonModel and interpreters (#1269) * refactor: adds discriminator in CommonModel and interpreters * refactor: adds discriminator in CommonModel and interpreters * refactor: adds discriminator in MetaModel and ConstrainedMetaModel (#1270) * refactor: adds discriminator in CommonModel and interpreters * refactor: adds discriminator in MetaModel and ConstrainedMetaModel * refactor: adds discriminator in MetaModel and ConstrainedMetaModel * refactor: adds discriminator in MetaModel and ConstrainedMetaModel * fix test * review fix * fix!: update default Kotlin renderer to make non-required properties nullable (#1277) * chore(release): v2.0.0-next.9 (#1278) * feat!: adds interface for oneOf objects for Java (#1271) * refactor: adds discriminator in CommonModel and interpreters * refactor: adds discriminator in MetaModel and ConstrainedMetaModel * feat: adds interface for oneOf objects for Java * refactor: adds discriminator in MetaModel and ConstrainedMetaModel * update snapshot * refactor: adds discriminator in MetaModel and ConstrainedMetaModel * fix test * feat: adds interface for oneOf objects for Java * Revert "feat: adds interface for oneOf objects for Java" This reverts commit e7bd8fbd160e9f6d34020a2146f7c42f3c2dd279. * review fix * merge fix * adds tests * adds documentation * fixes docs * Update docs/migrations/version-1-to-2.md Co-authored-by: Daniel KJ * adds test for union without jackson preset * fixes docs * fixes docs * fixes docs --------- Co-authored-by: Daniel KJ * chore(release): v2.0.0-next.10 (#1279) * chore: update Rust union render to use ConstrainedMetaModelOptionsDiscriminator (#1282) Update Rust union render to use `ConstrainedMetaModelOptionsDiscriminator` Co-authored-by: Daniel Kenyon-Jones * fix wrong import * Revert "fix wrong import" This reverts commit b6c5be6e1b9939e02601e7eb4a503ae085fbf100. * fix: wrong import for Java preset (#1283) fix: wrong import * chore(release): v2.0.0-next.11 (#1286) * feat!: add discriminator support for OpenAPI v3 and Swagger v2 (#1281) Co-authored-by: Daniel Kenyon-Jones * chore(release): v2.0.0-next.12 (#1287) * feat!: use EXISTING_PROPERTY as JsonTypeInfo.As annotation to avoid duplicates when serializing (#1290) * chore(release): v2.0.0-next.13 (#1291) * chore: blackbox tests (#1303) Co-authored-by: Daniel Kenyon-Jones * feat!: enable nullable models (#1141) * chore(release): v2.0.0-next.14 (#1313) * chore: update new generators with next syntax * chore: fix linting problem * feat!: add java oneOf union support for properties of models (#1296) Co-authored-by: Daniel Kenyon-Jones * chore: update dependency * feat: update dependencies * feat: update dependencies * feat: update dependencies * feat: trigger release and update dependencies (#1428) * ci: temporarily enable release for next (#1430) * fix: ts/js unmarshalling function bug (#1429) * fix!: support java nullable double type (#1439) Co-authored-by: Daniel Kenyon-Jones * feat: update release configuration and trigger release (#1467) * chore(release): v2.0.0-next.15 (#1468) * feat: make discriminator property visible to deserializer from Java Jackson preset (#1469) Co-authored-by: Daniel Kenyon-Jones * chore(release): v2.0.0-next.16 (#1470) * fix: typescript interface variable assignment (#1472) Co-authored-by: Kristupas Narkeliunas * chore(release): v2.0.0-next.17 (#1473) * feat!: upgrade to node 18 (#1422) * upgrade to v18 * adapt rest of workflows * update readme * recommit packagelock * feat!: supports optional properties in java (#1485) * chore(release): v2.0.0-next.18 (#1487) * chore: add next integration example (#1488) * fix: adds format in options instead of using original input (#1486) * chore(release): v2.0.0-next.19 (#1492) * feat!: generate models for OpenAPI parameters (#1498) Co-authored-by: Daniel Kenyon-Jones * chore(release): v2.0.0-next.20 (#1500) * fix: fixes java jackson discriminator when property is not camel case (#1502) * chore(release): v2.0.0-next.21 (#1504) * fix: fixes performance issues in java when calling parent unions (#1501) * chore(release): v2.0.0-next.22 (#1506) * feat!: refactors generators to use the same arg types (#1505) * chore(release): v2.0.0-next.23 (#1507) * fix: escape java string literals used for regex patterns and string constants (#1509) Co-authored-by: Daniel Kenyon-Jones * chore(release): v2.0.0-next.24 (#1558) * chore: update linting and dev dependency versions * chore: update migration guide (#1560) * chore(release): v2.0.0-next.25 (#1571) --------- Co-authored-by: Kenneth Aasan Co-authored-by: asyncapi-bot Co-authored-by: Cyprian Gracz Co-authored-by: Daniel KJ Co-authored-by: Daniel Kenyon-Jones Co-authored-by: Kristupas <53404771+Ksisa@users.noreply.github.com> Co-authored-by: Kristupas Narkeliunas Co-authored-by: Daniel Kenyon-Jones --- .eslintignore | 1 + .eslintrc | 85 +- .github/workflows/blackbox-testing.yml | 11 +- .github/workflows/coverall.yml | 12 +- .github/workflows/if-nodejs-release.yml | 1 + .../workflows/runtime-cplusplus-testing.yml | 11 +- .github/workflows/runtime-java-testing.yml | 11 +- .github/workflows/runtime-kotlin-testing.yml | 11 +- .github/workflows/runtime-php-testing.yml | 8 +- .github/workflows/runtime-rust-testing.yml | 13 +- .../workflows/runtime-typescript-testing.yml | 13 +- .github/workflows/website-pr-testing.yml | 12 +- .nvmrc | 2 +- .releaserc | 2 + README.md | 2 +- docs/constraints/CSharp.md | 3 + docs/constraints/Dart.md | 3 + docs/constraints/Go.md | 3 + docs/constraints/Java.md | 3 + docs/constraints/JavaScript.md | 3 + docs/constraints/Rust.md | 3 + docs/constraints/TypeScript.md | 3 + docs/integration.md | 28 +- docs/migrations/version-1-to-2.md | 377 + examples/README.md | 1 + .../__snapshots__/index.spec.ts.snap | 2 +- .../adapting-input-and-output/index.spec.ts | 2 +- .../__snapshots__/index.spec.ts.snap | 8 +- .../__snapshots__/index.spec.ts.snap | 2 +- .../__snapshots__/index.spec.ts.snap | 4 +- .../__snapshots__/index.spec.ts.snap | 4 +- .../__snapshots__/index.spec.ts.snap | 2 +- .../index.spec.ts | 2 +- .../__snapshots__/index.spec.ts.snap | 2 +- .../index.spec.ts | 2 +- .../__snapshots__/index.spec.ts.snap | 2 +- .../index.spec.ts | 10 - .../__snapshots__/index.spec.ts.snap | 2 +- examples/generate-csharp-models/index.spec.ts | 2 +- .../__snapshots__/index.spec.ts.snap | 6 +- examples/generate-to-files/index.spec.ts | 7 - examples/integrate-with-next/.babelrc | 3 + examples/integrate-with-next/.gitignore | 36 + examples/integrate-with-next/README.md | 17 + examples/integrate-with-next/jest.config.js | 37 + examples/integrate-with-next/jest.setup.js | 1 + .../integrate-with-next/package-lock.json | 10665 +++++++++ examples/integrate-with-next/package.json | 34 + .../integrate-with-next/public/favicon.ico | Bin 0 -> 25931 bytes examples/integrate-with-next/src/modelina.ts | 86 + .../integrate-with-next/src/pages/_app.tsx | 6 + .../src/pages/_document.tsx | 13 + .../integrate-with-next/src/pages/index.tsx | 86 + .../src/styles/Home.module.css | 142 + .../src/styles/globals.css | 107 + .../tests/__snapshots__/index.test.tsx.snap | 109 + .../integrate-with-next/tests/index.test.tsx | 16 + examples/integrate-with-next/tsconfig.json | 25 + examples/integrate-with-react/README.md | 4 +- examples/integrate-with-react/package.json | 2 +- .../__snapshots__/index.spec.ts.snap | 12 +- .../__snapshots__/index.spec.ts.snap | 3 + .../__snapshots__/index.spec.ts.snap | 12 +- .../__snapshots__/index.spec.ts.snap | 2 +- .../__snapshots__/index.spec.ts.snap | 8 +- .../__snapshots__/index.spec.ts.snap | 8 +- examples/meta-model/index.ts | 4 +- .../__snapshots__/index.spec.ts.snap | 36 +- modelina-website/scripts/build-examples.js | 4 +- package-lock.json | 19252 ++++------------ package.json | 35 +- src/generators/AbstractGenerator.ts | 188 +- .../cplusplus/CplusplusConstrainer.ts | 4 +- .../cplusplus/CplusplusDependencyManager.ts | 5 +- .../cplusplus/CplusplusGenerator.ts | 55 +- .../constrainer/ConstantConstrainer.ts | 7 + src/generators/csharp/CSharpConstrainer.ts | 7 +- .../csharp/CSharpDependencyManager.ts | 5 +- src/generators/csharp/CSharpGenerator.ts | 49 +- .../csharp/constrainer/ConstantConstrainer.ts | 7 + src/generators/dart/DartConstrainer.ts | 7 +- src/generators/dart/DartDependencyManager.ts | 5 +- src/generators/dart/DartGenerator.ts | 42 +- .../dart/constrainer/ConstantConstrainer.ts | 7 + src/generators/go/GoConstrainer.ts | 4 +- src/generators/go/GoDependencyManager.ts | 5 +- src/generators/go/GoGenerator.ts | 45 +- .../go/constrainer/ConstantConstrainer.ts | 7 + src/generators/java/JavaConstrainer.ts | 147 +- src/generators/java/JavaDependencyManager.ts | 32 +- src/generators/java/JavaGenerator.ts | 108 +- src/generators/java/JavaPreset.ts | 22 +- src/generators/java/JavaRenderer.ts | 15 + .../java/constrainer/ConstantConstrainer.ts | 54 + .../java/presets/ConstraintsPreset.ts | 4 +- src/generators/java/presets/JacksonPreset.ts | 119 +- .../java/renderers/ClassRenderer.ts | 48 +- .../java/renderers/UnionRenderer.ts | 53 + .../javascript/JavaScriptConstrainer.ts | 4 +- .../javascript/JavaScriptDependencyManager.ts | 5 +- .../javascript/JavaScriptGenerator.ts | 37 +- .../constrainer/ConstantConstrainer.ts | 7 + .../javascript/presets/CommonPreset.ts | 4 +- src/generators/kotlin/KotlinConstrainer.ts | 34 +- .../kotlin/KotlinDependencyManager.ts | 5 +- src/generators/kotlin/KotlinGenerator.ts | 44 +- .../kotlin/constrainer/ConstantConstrainer.ts | 7 + .../kotlin/renderers/ClassRenderer.ts | 4 +- src/generators/php/PhpConstrainer.ts | 4 +- src/generators/php/PhpDependencyManager.ts | 5 +- src/generators/php/PhpGenerator.ts | 39 +- .../php/constrainer/ConstantConstrainer.ts | 7 + src/generators/python/PythonConstrainer.ts | 7 +- .../python/PythonDependencyManager.ts | 5 +- src/generators/python/PythonGenerator.ts | 52 +- .../python/constrainer/ConstantConstrainer.ts | 7 + src/generators/rust/RustConstrainer.ts | 43 +- src/generators/rust/RustDependencyManager.ts | 5 +- src/generators/rust/RustGenerator.ts | 57 +- .../rust/constrainer/ConstantConstrainer.ts | 7 + .../rust/renderers/UnionRenderer.ts | 4 +- .../template/TemplateConstrainer.ts | 8 +- .../template/TemplateDependencyManager.ts | 5 +- src/generators/template/TemplateGenerator.ts | 44 +- .../constrainer/ConstantConstrainer.ts | 7 + .../typescript/TypeScriptConstrainer.ts | 60 +- .../typescript/TypeScriptDependencyManager.ts | 5 +- .../typescript/TypeScriptGenerator.ts | 61 +- .../typescript/TypeScriptObjectRenderer.ts | 14 +- .../constrainer/ConstantConstrainer.ts | 53 + .../typescript/presets/CommonPreset.ts | 17 +- .../typescript/renderers/ClassRenderer.ts | 32 +- src/helpers/CommonModelToMetaModel.ts | 225 +- src/helpers/ConstrainHelpers.ts | 102 +- src/helpers/Splitter.ts | 7 +- src/interpreter/InterpretAllOf.ts | 15 +- src/interpreter/InterpretConst.ts | 32 +- src/interpreter/InterpretOneOf.ts | 15 +- src/interpreter/InterpretOneOfWithAllOf.ts | 13 +- .../InterpretOneOfWithProperties.ts | 9 +- src/interpreter/InterpretProperties.ts | 17 +- src/interpreter/InterpretThenElse.ts | 65 + src/interpreter/Interpreter.ts | 68 +- src/models/CommonModel.ts | 112 +- src/models/ConstrainedMetaModel.ts | 81 +- src/models/MetaModel.ts | 71 +- src/processors/AsyncAPIInputProcessor.ts | 123 +- src/processors/JsonSchemaInputProcessor.ts | 1 + src/processors/OpenAPIInputProcessor.ts | 41 +- test/TestUtils/TestConstrainer.ts | 6 +- test/TestUtils/TestGenerator.ts | 25 +- test/blackbox/BlackBoxTestFiles.ts | 2 +- test/blackbox/blackbox-csharp.spec.ts | 2 +- test/blackbox/blackbox-go.spec.ts | 2 +- test/blackbox/blackbox-java.spec.ts | 6 +- test/blackbox/blackbox-javascript.spec.ts | 2 +- test/blackbox/blackbox-kotlin.spec.ts | 6 +- test/blackbox/blackbox-python.spec.ts | 2 +- test/blackbox/blackbox-rust.spec.ts | 3 +- test/blackbox/blackbox-typescript.spec.ts | 2 +- test/generators/AbstractGenerator.spec.ts | 25 +- .../cplusplus/CplusplusConstrainer.spec.ts | 35 +- .../csharp/CSharpConstrainer.spec.ts | 74 +- .../CSharpGenerator.spec.ts.snap | 10 +- .../constrainer/EnumConstrainer.spec.ts | 5 +- .../PropertyKeyConstrainer.spec.ts | 6 +- test/generators/dart/DartConstrainer.spec.ts | 36 +- .../dart/constrainer/EnumConstrainer.spec.ts | 5 +- .../PropertyKeyConstrainer.spec.ts | 6 +- .../dart/presets/JsonPreset.spec.ts | 6 +- test/generators/go/GoConstrainer.spec.ts | 32 +- .../go/__snapshots__/GoGenerator.spec.ts.snap | 2 +- .../go/constrainer/EnumConstrainer.spec.ts | 5 +- .../PropertyKeyConstrainer.spec.ts | 6 +- test/generators/java/JavaConstrainer.spec.ts | 375 +- .../java/JavaDependencyManager.spec.ts | 18 + test/generators/java/JavaGenerator.spec.ts | 555 +- test/generators/java/JavaRenderer.spec.ts | 12 + .../__snapshots__/JavaGenerator.spec.ts.snap | 880 +- .../constrainer/ConstantConstrainer.spec.ts | 75 + .../java/constrainer/EnumConstrainer.spec.ts | 5 +- .../PropertyKeyConstrainer.spec.ts | 6 +- .../java/presets/ConstraintsPreset.spec.ts | 6 +- .../java/presets/JacksonPreset.spec.ts | 184 +- .../__snapshots__/CommonPreset.spec.ts.snap | 98 +- .../ConstraintsPreset.spec.ts.snap | 14 +- .../__snapshots__/JacksonPreset.spec.ts.snap | 188 +- .../javascript/JavaScriptConstrainer.spec.ts | 32 +- .../constrainer/EnumConstrainer.spec.ts | 5 +- .../PropertyKeyConstrainer.spec.ts | 6 +- .../MarshallingPreset.spec.ts.snap | 2 +- .../preset/utils/ExampleFunctions.spec.ts | 38 +- .../kotlin/KotlinConstrainer.spec.ts | 264 +- .../KotlinGenerator.spec.ts.snap | 30 +- .../constrainer/EnumConstrainer.spec.ts | 5 +- .../PropertyKeyConstrainer.spec.ts | 6 +- .../ConstraintsPreset.spec.ts.snap | 6 +- .../DescriptionPreset.spec.ts.snap | 4 +- test/generators/php/PhpConstrainer.spec.ts | 60 +- test/generators/php/PhpRenderer.spec.ts | 2 +- .../python/PythonConstrainer.spec.ts | 78 +- test/generators/rust/RustConstrainer.spec.ts | 618 +- test/generators/rust/RustGenerator.spec.ts | 4 +- test/generators/rust/RustRenderer.spec.ts | 582 +- .../__snapshots__/RustGenerator.spec.ts.snap | 54 +- .../rust/constrainer/EnumConstrainer.spec.ts | 5 +- .../PropertyKeyConstrainer.spec.ts | 6 +- .../rust/presets/CommonPreset.spec.ts | 3 +- .../__snapshots__/CommonPreset.spec.ts.snap | 140 +- .../template/TemplateConstrainer.spec.ts | 102 +- .../typescript/TypeScriptConstrainer.spec.ts | 121 +- .../typescript/TypeScriptGenerator.spec.ts | 304 +- .../TypeScriptGenerator.spec.ts.snap | 314 +- .../constrainer/ConstantConstrainer.spec.ts | 75 + .../constrainer/EnumConstrainer.spec.ts | 17 +- .../PropertyKeyConstrainer.spec.ts | 6 +- .../MarshallingPreset.spec.ts.snap | 2 +- .../preset/utils/ExampleFunctions.spec.ts | 35 +- test/helpers/CommonModelToMetaModel.spec.ts | 125 +- test/helpers/ConstrainHelpers.spec.ts | 196 +- test/helpers/Constraints.spec.ts | 212 +- test/helpers/DependencyHelpers.spec.ts | 18 +- test/helpers/Splitter.spec.ts | 96 +- test/interpreter/unit/InterpretAllOf.spec.ts | 27 + test/interpreter/unit/InterpretConst.spec.ts | 14 +- test/interpreter/unit/InterpretOneOf.spec.ts | 47 + .../unit/InterpretOneOfWithAllOf.spec.ts | 9 +- .../unit/InterpretProperties.spec.ts | 24 + .../unit/InterpretThenElse.spec.ts | 110 + test/interpreter/unit/Interpreter.spec.ts | 65 +- .../unit/interpretOneOfWithProperties.spec.ts | 9 +- test/models/CommonModel.spec.ts | 107 +- test/models/ConstrainedMetaModel.spec.ts | 328 +- test/models/Draft7Schema.spec.ts | 2 +- .../processors/AsyncAPIInputProcessor.spec.ts | 44 +- .../operation_oneof1.json | 99 + .../operation_oneof2.json | 98 + .../JsonSchemaInputProcessor.spec.ts | 27 +- test/processors/OpenAPIInputProcessor.spec.ts | 54 +- .../OpenAPIInputProcessor/basic.json | 11 + .../TypeScriptInputProcessor.spec.ts | 2 +- .../AsyncAPIInputProcessor.spec.ts.snap | 4069 +++- .../OpenAPIInputProcessor.spec.ts.snap | 24 + test/runtime/runtime-java.spec.ts | 2 +- .../com/mycompany/app/generic/AddressTest.kt | 45 + test/utils/LoggingInterface.spec.ts | 1 + test/utils/Partials.spec.ts | 2 +- 247 files changed, 28368 insertions(+), 17345 deletions(-) create mode 100644 docs/migrations/version-1-to-2.md create mode 100644 examples/integrate-with-next/.babelrc create mode 100644 examples/integrate-with-next/.gitignore create mode 100644 examples/integrate-with-next/README.md create mode 100644 examples/integrate-with-next/jest.config.js create mode 100644 examples/integrate-with-next/jest.setup.js create mode 100644 examples/integrate-with-next/package-lock.json create mode 100644 examples/integrate-with-next/package.json create mode 100644 examples/integrate-with-next/public/favicon.ico create mode 100644 examples/integrate-with-next/src/modelina.ts create mode 100644 examples/integrate-with-next/src/pages/_app.tsx create mode 100644 examples/integrate-with-next/src/pages/_document.tsx create mode 100644 examples/integrate-with-next/src/pages/index.tsx create mode 100644 examples/integrate-with-next/src/styles/Home.module.css create mode 100644 examples/integrate-with-next/src/styles/globals.css create mode 100644 examples/integrate-with-next/tests/__snapshots__/index.test.tsx.snap create mode 100644 examples/integrate-with-next/tests/index.test.tsx create mode 100644 examples/integrate-with-next/tsconfig.json create mode 100644 src/generators/cplusplus/constrainer/ConstantConstrainer.ts create mode 100644 src/generators/csharp/constrainer/ConstantConstrainer.ts create mode 100644 src/generators/dart/constrainer/ConstantConstrainer.ts create mode 100644 src/generators/go/constrainer/ConstantConstrainer.ts create mode 100644 src/generators/java/constrainer/ConstantConstrainer.ts create mode 100644 src/generators/java/renderers/UnionRenderer.ts create mode 100644 src/generators/javascript/constrainer/ConstantConstrainer.ts create mode 100644 src/generators/kotlin/constrainer/ConstantConstrainer.ts create mode 100644 src/generators/php/constrainer/ConstantConstrainer.ts create mode 100644 src/generators/python/constrainer/ConstantConstrainer.ts create mode 100644 src/generators/rust/constrainer/ConstantConstrainer.ts create mode 100644 src/generators/template/constrainer/ConstantConstrainer.ts create mode 100644 src/generators/typescript/constrainer/ConstantConstrainer.ts create mode 100644 src/interpreter/InterpretThenElse.ts create mode 100644 test/generators/java/JavaDependencyManager.spec.ts create mode 100644 test/generators/java/constrainer/ConstantConstrainer.spec.ts create mode 100644 test/generators/typescript/constrainer/ConstantConstrainer.spec.ts create mode 100644 test/interpreter/unit/InterpretThenElse.spec.ts create mode 100644 test/processors/AsyncAPIInputProcessor/operation_oneof1.json create mode 100644 test/processors/AsyncAPIInputProcessor/operation_oneof2.json create mode 100644 test/runtime/runtime-kotlin/bin/test/com/mycompany/app/generic/AddressTest.kt diff --git a/.eslintignore b/.eslintignore index de87d997ef..5ea878327f 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,6 +4,7 @@ lib output src/generators/template test/generators/template +examples/integrate-with-next examples/integrate-with-react src/processors/TemplateInputProcessor.ts test/processors/TemplateInputProcessor.spec.ts diff --git a/.eslintrc b/.eslintrc index 5efde8c889..52996b74bd 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,6 +5,7 @@ "sonarjs", "security", "github", + "jest", "prettier" ], "extends": [ @@ -13,15 +14,22 @@ "plugin:@typescript-eslint/recommended", "plugin:sonarjs/recommended", "plugin:security/recommended", + "plugin:jest/recommended", "prettier" ], + "env": { + "jest/globals": true + }, "rules": { "strict": 0, "github/array-foreach": 2, "eol-last": ["error", "always"], "@typescript-eslint/no-explicit-any": 0, "require-await": "error", - "@typescript-eslint/explicit-module-boundary-types": ["error", {"allowArgumentsExplicitlyTypedAsAny": true}], + "@typescript-eslint/explicit-module-boundary-types": [ + "error", + { "allowArgumentsExplicitlyTypedAsAny": true } + ], "sonarjs/no-small-switch": "off", "no-underscore-dangle": "error", "no-process-exit": "error", @@ -30,10 +38,7 @@ "curly": ["error"], "no-multi-spaces": "error", "consistent-return": 0, - "consistent-this": [ - 0, - "self" - ], + "consistent-this": [0, "self"], "func-style": 0, "max-nested-callbacks": ["error", 3], "camelcase": 0, @@ -60,15 +65,8 @@ "no-throw-literal": 2, "no-void": 2, "radix": 2, - "wrap-iife": [ - 2, - "outside" - ], + "wrap-iife": [2, "outside"], "no-shadow": 0, - "no-use-before-define": [ - 2, - "nofunc" - ], "no-path-concat": 2, "valid-jsdoc": [ 0, @@ -89,10 +87,7 @@ ], "no-lonely-if": 2, "no-floating-decimal": 2, - "comma-style": [ - 2, - "last" - ], + "comma-style": [2, "last"], "no-multiple-empty-lines": [ 2, { @@ -100,18 +95,9 @@ } ], "no-nested-ternary": 2, - "operator-assignment": [ - 2, - "always" - ], - "padded-blocks": [ - 2, - "never" - ], - "quote-props": [ - 2, - "as-needed" - ], + "operator-assignment": [2, "always"], + "padded-blocks": [2, "never"], + "quote-props": [2, "as-needed"], "keyword-spacing": [ 2, { @@ -120,22 +106,10 @@ "overrides": {} } ], - "space-before-blocks": [ - 2, - "always" - ], - "array-bracket-spacing": [ - 2, - "never" - ], - "computed-property-spacing": [ - 2, - "never" - ], - "space-in-parens": [ - 2, - "never" - ], + "space-before-blocks": [2, "always"], + "array-bracket-spacing": [2, "never"], + "computed-property-spacing": [2, "never"], + "space-in-parens": [2, "never"], "space-unary-ops": [ 2, { @@ -147,10 +121,7 @@ "wrap-regex": 2, //"linebreak-style": ["error", "unix"], "linebreak-style": 0, - "semi": [ - 2, - "always" - ], + "semi": [2, "always"], "arrow-spacing": [ 2, { @@ -162,17 +133,21 @@ "no-const-assign": 2, "no-this-before-super": 2, "no-var": 2, - "object-shorthand": [ - 2, - "always" - ], + "object-shorthand": [2, "always"], "prefer-arrow-callback": 2, "prefer-const": 2, "prefer-spread": 2, "prefer-template": 2, "@typescript-eslint/no-unused-vars": 2, "prettier/prettier": 2, - "sonarjs/no-identical-functions": "off" + "sonarjs/no-identical-functions": "off", + "sonarjs/prefer-single-boolean-return": "off", + "jest/valid-title": [ + 2, + { + "ignoreTypeOfDescribeName": true + } + ] }, "overrides": [ { @@ -203,4 +178,4 @@ } } ] -} \ No newline at end of file +} diff --git a/.github/workflows/blackbox-testing.yml b/.github/workflows/blackbox-testing.yml index 5e8d87790e..807ba92da0 100644 --- a/.github/workflows/blackbox-testing.yml +++ b/.github/workflows/blackbox-testing.yml @@ -13,11 +13,16 @@ jobs: os: [ubuntu-latest] steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 + - name: Check package-lock version + uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master + id: lockversion - name: Setup Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 with: - node-version: 14 + node-version: "${{ steps.lockversion.outputs.version }}" + cache: 'npm' + cache-dependency-path: '**/package-lock.json' - name: Build library run: npm install && npm run build - uses: actions/setup-java@v2 diff --git a/.github/workflows/coverall.yml b/.github/workflows/coverall.yml index 392481c179..785d6bce10 100644 --- a/.github/workflows/coverall.yml +++ b/.github/workflows/coverall.yml @@ -11,11 +11,17 @@ jobs: name: Build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - name: Checkout repository + uses: actions/checkout@v3 + - name: Check package-lock version + uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master + id: lockversion - name: Setup Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 with: - node-version: 14 + node-version: "${{ steps.lockversion.outputs.version }}" + cache: 'npm' + cache-dependency-path: '**/package-lock.json' - name: npm install, run test run: | npm install diff --git a/.github/workflows/if-nodejs-release.yml b/.github/workflows/if-nodejs-release.yml index 4938a37dad..fead498928 100644 --- a/.github/workflows/if-nodejs-release.yml +++ b/.github/workflows/if-nodejs-release.yml @@ -15,6 +15,7 @@ on: - next-major-spec - beta - alpha + - next jobs: diff --git a/.github/workflows/runtime-cplusplus-testing.yml b/.github/workflows/runtime-cplusplus-testing.yml index a65225d7a9..48734f68aa 100644 --- a/.github/workflows/runtime-cplusplus-testing.yml +++ b/.github/workflows/runtime-cplusplus-testing.yml @@ -15,11 +15,16 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 + - name: Check package-lock version + uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master + id: lockversion - name: Setup Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 with: - node-version: 14 + node-version: "${{ steps.lockversion.outputs.version }}" + cache: 'npm' + cache-dependency-path: '**/package-lock.json' - name: Build library run: npm install && npm run build:prod - name: Setup Cpp (C++ / C) diff --git a/.github/workflows/runtime-java-testing.yml b/.github/workflows/runtime-java-testing.yml index 0b23168236..bd869f9cb4 100644 --- a/.github/workflows/runtime-java-testing.yml +++ b/.github/workflows/runtime-java-testing.yml @@ -15,11 +15,16 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 + - name: Check package-lock version + uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master + id: lockversion - name: Setup Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 with: - node-version: 14 + node-version: "${{ steps.lockversion.outputs.version }}" + cache: 'npm' + cache-dependency-path: '**/package-lock.json' - name: Build library run: npm install && npm run build:prod - uses: actions/setup-java@v2 diff --git a/.github/workflows/runtime-kotlin-testing.yml b/.github/workflows/runtime-kotlin-testing.yml index a7dfac7512..6a723a15ac 100644 --- a/.github/workflows/runtime-kotlin-testing.yml +++ b/.github/workflows/runtime-kotlin-testing.yml @@ -15,11 +15,16 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 + - name: Check package-lock version + uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master + id: lockversion - name: Setup Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 with: - node-version: 14 + node-version: "${{ steps.lockversion.outputs.version }}" + cache: 'npm' + cache-dependency-path: '**/package-lock.json' - name: Build library run: npm install && npm run build:prod - name: Setup Java diff --git a/.github/workflows/runtime-php-testing.yml b/.github/workflows/runtime-php-testing.yml index 0a90f66d42..38be4f7eb1 100644 --- a/.github/workflows/runtime-php-testing.yml +++ b/.github/workflows/runtime-php-testing.yml @@ -23,10 +23,16 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 + - name: Check package-lock version + uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master + id: lockversion + - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: 14 + node-version: "${{ steps.lockversion.outputs.version }}" + cache: 'npm' + cache-dependency-path: '**/package-lock.json' - name: Build library run: npm install && npm run build:prod diff --git a/.github/workflows/runtime-rust-testing.yml b/.github/workflows/runtime-rust-testing.yml index 48215ae878..8a8a0ea380 100644 --- a/.github/workflows/runtime-rust-testing.yml +++ b/.github/workflows/runtime-rust-testing.yml @@ -14,12 +14,17 @@ jobs: if: "github.event.pull_request.draft == false &&!((github.actor == 'asyncapi-bot' && startsWith(github.event.pull_request.title, 'ci: update global workflows')) || (github.actor == 'asyncapi-bot' && startsWith(github.event.pull_request.title, 'chore(release):')) || (github.actor == 'allcontributors' && startsWith(github.event.pull_request.title, 'docs: add')))" runs-on: ubuntu-latest steps: - - name: Checkout Repository - uses: actions/checkout@v2 + - name: Checkout repository + uses: actions/checkout@v3 + - name: Check package-lock version + uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master + id: lockversion - name: Setup Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 with: - node-version: 14 + node-version: "${{ steps.lockversion.outputs.version }}" + cache: 'npm' + cache-dependency-path: '**/package-lock.json' - name: Build library run: npm install && npm run build:prod - name: Install Rust diff --git a/.github/workflows/runtime-typescript-testing.yml b/.github/workflows/runtime-typescript-testing.yml index 6e17e95165..d1cadcab37 100644 --- a/.github/workflows/runtime-typescript-testing.yml +++ b/.github/workflows/runtime-typescript-testing.yml @@ -18,12 +18,17 @@ jobs: if: "github.event.pull_request.draft == false &&!((github.actor == 'asyncapi-bot' && startsWith(github.event.pull_request.title, 'ci: update global workflows')) || (github.actor == 'asyncapi-bot' && startsWith(github.event.pull_request.title, 'chore(release):')) || (github.actor == 'allcontributors' && startsWith(github.event.pull_request.title, 'docs: add')))" runs-on: ubuntu-latest steps: - - name: Checkout Repository - uses: actions/checkout@v2 + - name: Checkout repository + uses: actions/checkout@v3 + - name: Check package-lock version + uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master + id: lockversion - name: Setup Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 with: - node-version: 14 + node-version: "${{ steps.lockversion.outputs.version }}" + cache: 'npm' + cache-dependency-path: '**/package-lock.json' - name: Build library run: npm install && npm run build:prod - name: Generate TypeScript models diff --git a/.github/workflows/website-pr-testing.yml b/.github/workflows/website-pr-testing.yml index 64924c0230..44c4017a4f 100644 --- a/.github/workflows/website-pr-testing.yml +++ b/.github/workflows/website-pr-testing.yml @@ -15,15 +15,17 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - + - name: Checkout repository + uses: actions/checkout@v3 + - name: Check package-lock version + uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master + id: lockversion - name: Setup Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: - node-version: 14 + node-version: "${{ steps.lockversion.outputs.version }}" cache: 'npm' cache-dependency-path: '**/package-lock.json' - - name: Modelina Core Install dependencies id: first-installation-core run: npm install --loglevel verbose diff --git a/.nvmrc b/.nvmrc index 958b5a36e1..3f430af82b 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v14 +v18 diff --git a/.releaserc b/.releaserc index bc27e35000..1ac05cb151 100644 --- a/.releaserc +++ b/.releaserc @@ -13,6 +13,8 @@ branches: prerelease: true - name: alpha prerelease: true +- name: next + prerelease: true plugins: - - "@semantic-release/commit-analyzer" - preset: conventionalcommits diff --git a/README.md b/README.md index 7aabbbd78e..3731bf868f 100644 --- a/README.md +++ b/README.md @@ -276,7 +276,7 @@ This is the roadmap that is currently in focus by the [CODEOWNERS](./CODEOWNERS) ## Requirements The following are a requirement in order to use Modelina. -- [NodeJS](https://nodejs.org/en/) >= 14 +- [NodeJS](https://nodejs.org/en/) >= 18 ## Documentation A feature in Modelina cannot exists without an example and documentation for it. You can find all the [documentation here](./docs/README.md). diff --git a/docs/constraints/CSharp.md b/docs/constraints/CSharp.md index aff6525b7b..32ca6904d7 100644 --- a/docs/constraints/CSharp.md +++ b/docs/constraints/CSharp.md @@ -36,3 +36,6 @@ These are the constraints that is applied to enum keys. The `Rule key` is what y |NO_RESERVED_KEYWORDS|No reserved keywords|C# has a list of reserved keywords ([see the full list here](../../src/generators/csharp/Constants.ts))| |NAMING_FORMATTER|Must be formatted equally|Model name is formatted using pascal case| |NO_DUPLICATE_KEYS|No duplicate enum keys|If any of the above constraints changes the enum key, we must make sure that no duplicates exist within the same enum. If any is encountered `reserved_` is pre-pended. This is done recursively until no duplicates are found.| + +## Constant +Constant constraints are currently not supported for CSharp. diff --git a/docs/constraints/Dart.md b/docs/constraints/Dart.md index 235ebc7b99..dbd317ba41 100644 --- a/docs/constraints/Dart.md +++ b/docs/constraints/Dart.md @@ -36,3 +36,6 @@ These are the constraints that is applied to enum keys. The `Rule key` is what y |NO_RESERVED_KEYWORDS|No reserved keywords|Dart has a list of reserved keywords ([see the full list here](../../src/generators/dart/Constants.ts))| |NAMING_FORMATTER|Must be formatted equally|Model name is formatted using pascal case| |NO_DUPLICATE_KEYS|No duplicate enum keys|If any of the above constraints changes the enum key, we must make sure that no duplicates exist within the same enum. If any is encountered `reserved_` is pre-pended. This is done recursively until no duplicates are found.| + +## Constant +Constant constraints are currently not supported for Dart. diff --git a/docs/constraints/Go.md b/docs/constraints/Go.md index ad89332bc6..9c819fe526 100644 --- a/docs/constraints/Go.md +++ b/docs/constraints/Go.md @@ -36,3 +36,6 @@ These are the constraints that is applied to enum keys. The `Rule key` is what y |NO_RESERVED_KEYWORDS|No reserved keywords|Go has a list of reserved keywords ([see the full list here](../../src/generators/go/Constants.ts))| |NAMING_FORMATTER|Must be formatted equally|Model name is formatted using pascal case| |NO_DUPLICATE_KEYS|No duplicate enum keys|If any of the above constraints changes the enum key, we must make sure that no duplicates exist within the same enum. If any is encountered `reserved_` is pre-pended. This is done recursively until no duplicates are found.| + +## Constant +Constant constraints are currently not supported for Go. diff --git a/docs/constraints/Java.md b/docs/constraints/Java.md index 545918abea..1a3072f9f4 100644 --- a/docs/constraints/Java.md +++ b/docs/constraints/Java.md @@ -36,3 +36,6 @@ These are the constraints that is applied to enum keys. The `Rule key` is what y |NO_RESERVED_KEYWORDS|No reserved keywords|Java has a list of reserved keywords ([see the full list here](../../src/generators/java/Constants.ts))| |NAMING_FORMATTER|Must be formatted equally|Model name is formatted using pascal case| |NO_DUPLICATE_KEYS|No duplicate enum keys|If any of the above constraints changes the enum key, we must make sure that no duplicates exist within the same enum. If any is encountered `reserved_` is pre-pended. This is done recursively until no duplicates are found.| + +## Constant +These are the constraints that are applied to constants. Currently, there are no hooks one can overwrite inside it. diff --git a/docs/constraints/JavaScript.md b/docs/constraints/JavaScript.md index 06adfda051..ce3c090fbe 100644 --- a/docs/constraints/JavaScript.md +++ b/docs/constraints/JavaScript.md @@ -36,3 +36,6 @@ These are the constraints that is applied to enum keys. The `Rule key` is what y |NO_RESERVED_KEYWORDS|No reserved keywords|JavaScript has a list of reserved keywords ([see the full list here](../../src/generators/javascript/Constants.ts))| |NAMING_FORMATTER|Must be formatted equally|Model name is formatted using pascal case| |NO_DUPLICATE_KEYS|No duplicate enum keys|If any of the above constraints changes the enum key, we must make sure that no duplicates exist within the same enum. If any is encountered `reserved_` is pre-pended. This is done recursively until no duplicates are found.| + +## Constant +Constant constraints are currently not supported for JavaScript. diff --git a/docs/constraints/Rust.md b/docs/constraints/Rust.md index a7173be728..e30e88effe 100644 --- a/docs/constraints/Rust.md +++ b/docs/constraints/Rust.md @@ -35,3 +35,6 @@ These are the constraints that is applied to enum keys. The `Rule key` is what y |NO_RESERVED_KEYWORDS|No reserved keywords|Rust has a list of reserved keywords ([see the full list here](../../src/generators/rust/Constants.ts))| |NAMING_FORMATTER|Must be formatted equally|Model name is formatted using pascal case| |NO_DUPLICATE_KEYS|No duplicate enum keys|If any of the above constraints changes the enum key, we must make sure that no duplicates exist within the same enum. If any is encountered `reserved_` is pre-pended. This is done recursively until no duplicates are found.| + +## Constant +Constant constraints are currently not supported for Rust. diff --git a/docs/constraints/TypeScript.md b/docs/constraints/TypeScript.md index 993b02d94c..3cc175fa0b 100644 --- a/docs/constraints/TypeScript.md +++ b/docs/constraints/TypeScript.md @@ -36,3 +36,6 @@ These are the constraints that is applied to enum keys. The `Rule key` is what y |NO_RESERVED_KEYWORDS|No reserved keywords|TypeScript has a list of reserved keywords ([see the full list here](../../src/generators/typescript/Constants.ts))| |NAMING_FORMATTER|Must be formatted equally|Model name is formatted using pascal case| |NO_DUPLICATE_KEYS|No duplicate enum keys|If any of the above constraints changes the enum key, we must make sure that no duplicates exist within the same enum. If any is encountered `reserved_` is pre-pended. This is done recursively until no duplicates are found.| + +## Constant +These are the constraints that are applied to constants. Currently, there are no hooks one can overwrite inside it. diff --git a/docs/integration.md b/docs/integration.md index a26f66bd91..480ee25b47 100644 --- a/docs/integration.md +++ b/docs/integration.md @@ -6,6 +6,8 @@ This readme file goes into details how to integrate Modelina into various enviro - [Integrate Modelina in a browser](#integrate-modelina-in-a-browser) + * [FAQ](#faq) + + [TypeScript and Jest](#typescript-and-jest) * [Security NOTICE](#security-notice) - [Integrate Modelina in an AsyncAPI generator template](#integrate-modelina-in-an-asyncapi-generator-template) @@ -16,10 +18,34 @@ This readme file goes into details how to integrate Modelina into various enviro Integrating Modelina into websites is is one of the core features, and each framework is different, so here are some of examples: - [Using Modelina in React](../examples/integrate-with-react/) +- [Using Modelina in Next](../examples/integrate-with-next/) +- +> NOTICE: Modelina only works server side and not on the client side. In the React example its always rendered on the server side, and with Next you have to utilize [data fetching techniques](https://nextjs.org/docs/basic-features/data-fetching/overview) to retrieve the generated code from the server. There are a few exceptions to the features Modelina support in a website environment. Those are listed here below: -- You cannot use the [file generator](./advanced.md#generate-models-to-separate-files) to write to the client's disk. +- You cannot use the [file generator](./advanced.md#generate-models-to-separate-files) to write to the client's disk, instead utilize the `generateCompleteModels` function, that gives you the same generated output in memory instead of writing it to files. + +### FAQ + +#### TypeScript and Jest +If you ever encounter `Jest encountered an unexpected token` and something along the lines of: + +``` +Details: + /Users/lagoni/Documents/github/generator-model-sdk/node_modules/@stoplight/spectral-core/node_modules/jsonpath-plus/dist/index-browser-esm.js:1103 + export { JSONPath }; + ^^^^^^ + SyntaxError: Unexpected token 'export' +``` + +Make sure your Jest configuration contains the following: + +``` +transformIgnorePatterns = [ + '/node_modules/@stoplight/spectral-core/node_modules/(!?jsonpath-plus)', +]; +``` ### Security NOTICE Do NOT enable users to write their own option callbacks. This includes but not limits to preset hooks and constrain rules. The reason for this is that in some cases it will enable arbitrary code execution on your webserver (which you most probably don't want!). diff --git a/docs/migrations/version-1-to-2.md b/docs/migrations/version-1-to-2.md new file mode 100644 index 0000000000..fba429ffd0 --- /dev/null +++ b/docs/migrations/version-1-to-2.md @@ -0,0 +1,377 @@ +# Migration from v1 to v2 + +This document contains all the breaking changes and migration guidelines for adapting your code to the new version. + +## Using preferred IDs over anonymous IDs + +If you use _allOf_, and properties need to be merged, Modelina is now using preferred IDs over anonymous IDs. That means if a property has an id/title other than _anonymous_schema_ in one of the schemas in a _allOf_, it will use the non-anonymous id/title. + +Example: + +```yaml +channels: + pet: + publish: + message: + oneOf: + - $ref: '#/components/messages/Dog' + - $ref: '#/components/messages/Cat' +components: + messages: + Dog: + payload: + title: Dog + allOf: + - $ref: '#/components/schemas/CloudEvent' + - type: object + properties: + type: + title: DogType + const: Dog + Cat: + payload: + title: Cat + allOf: + - $ref: '#/components/schemas/CloudEvent' + - type: object + properties: + type: + title: CatType + const: Cat + schemas: + CloudEvent: + type: object + properties: + type: + type: string + required: + - type +``` + +The _type_ property in the _CloudEvent_ schema will in this case have an _anonymous_schema_ id. If another schema in the _allOf_ list has the same property and an id other than _anonymous_schema_, it will now use that id. Meaning, in this example, it will be _DogType_ and _CatType_. + +## Accurate array types + +For JSON Schema inputs (indirectly for AsyncAPI and OpenAPI), `additionalItems` was applied to regular array types, when it should only be applied for tuples. + +This means that a schema such as: + +``` + "tags": { + "type": "array", + "items": { + "$ref": "http://asyncapi.com/definitions/2.6.0/tag.json" + }, + "additionalItems": true + }, +``` + +Would generate a type such as, in TypeScript: + +``` +private _tags?: (Tag | any)[]; +``` + +Where it now generates: + +``` +private _tags?: Tag[]; +``` + +## Creates union type for operation message oneOf + +In the example above, where `operation.message.oneOf` is set, Modelina will now generate a union type for it. Previously, Modelina ignored this union type, and only generated models for the content of `operation.message.oneOf`. In the example above, that meant models for `Dog` and `Cat`. Now, Modelina will generate a union type of `Pet` in addition to `Dog` and `Cat`. + +## Constraining models with then and else + +In v1, `required` properties defined within `then` or `else` (in JSON Schema input variants) would be directly applied to the encapsulating model, meaning it would be as if the `if` section is always true or false, depending on whether it's defined within `then` or `else` respectfully. + +In v2, `required` properties are no longer applied, but the rest of the structure is still. + +## Constant values + +(Constant values)[https://json-schema.org/understanding-json-schema/reference/generic.html#constant-values] are now supported. + +```yaml +type: object +properties: + country: + const: 'United States of America' +``` + +The `country` property will not have a setter and will automatically be initialized. + +## Discriminator + +(Discriminator)[https://www.asyncapi.com/docs/reference/specification/v2.6.0#schemaComposition] is now supported. + +```yaml +schemas: + Pet: + type: object + discriminator: petType + properties: + petType: + type: string + name: + type: string + required: + - petType + - name + Cat: + allOf: + - $ref: '#/components/schemas/Pet' + - type: object + properties: + petType: + const: Cat + Dog: + allOf: + - $ref: '#/components/schemas/Pet' + - type: object + properties: + petType: + const: Dog +``` + +This example will generate a model for `Cat` and `Dog` where `PetType` is a shared enum that contains two values (`Cat` and `Dog`). `PetType` will not have a setter, and will automatically be initialized. + +## Optional properties in Kotlin + +In Kotlin, if the property is not `required` in JSON Schema, it will be nullable with the default value `null`. + +```yaml +Response: + type: object + properties: + result: + type: string + message: + type: string + required: + - result + additionalProperties: false +``` + +will generate: + +```kotlin +data class Response( + val result: String, + val message: String? = null +) +``` + +## Optional properties in Java +In Java, if the property is not `required` in JSON Schema, it should use nullable types instead of primitive. + +```yaml +Response: + type: object + properties: + result: + type: number + message: + type: number + required: + - result + additionalProperties: false + +``` + +Will now generate: + +```java +public class Response { + private double result; + private Double message; + + public double getResult() { return this.result; } + public void setResult(double result) { this.result = result; } + + public Double getMessage() { return this.message; } + public void setMessage(Double message) { this.message = message; } +} +``` + +## Interface for objects in oneOf for Java + +In Java, if a oneOf includes objects, there will be created an interface. All the classes that are part of the oneOf, implements the interface. The Jackson preset includes support for unions by setting @JsonTypeInfo and @JsonSubTypes annotations. + +```yaml +components: + messages: + Vehicle: + payload: + title: Vehicle + type: object + discriminator: vehicleType + properties: + vehicleType: + title: VehicleType + type: string + required: + - vehicleType + oneOf: + - $ref: '#/components/schemas/Car' + - $ref: '#/components/schemas/Truck' + schemas: + Car: + type: object + properties: + vehicleType: + const: Car + Truck: + type: object + properties: + vehicleType: + const: Truck +``` + +will generate + +```java +@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.EXISTING_PROPERTY, property="vehicleType") +@JsonSubTypes({ + @JsonSubTypes.Type(value = Car.class, name = "Car"), + @JsonSubTypes.Type(value = Truck.class, name = "Truck") +}) +/** + * Vehicle represents a union of types: Car, Truck + */ +public interface Vehicle { + VehicleType getVehicleType(); +} + +public class Car implements Vehicle { + @NotNull + @JsonProperty(\\"vehicleType\\") + private final VehicleType vehicleType = VehicleType.CAR; + private Map additionalProperties; + + public VehicleType getVehicleType() { return this.vehicleType; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } +} + +public enum VehicleType { + CAR((String)"Car"), TRUCK((String)"Truck"); + + private String value; + + VehicleType(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @JsonCreator + public static VehicleType fromValue(String value) { + for (VehicleType e : VehicleType.values()) { + if (e.value.equals(value)) { + return e; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + + @Override + public String toString() { + return String.valueOf(value); + } +} + +public class Truck implements Vehicle { + @NotNull + @JsonProperty("vehicleType") + private final VehicleType vehicleType = VehicleType.TRUCK; + private Map additionalProperties; + + public VehicleType getVehicleType() { return this.vehicleType; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } +} +``` +# OpenAPI inputs now generate parameters as models +For a given OpenAPI input, it now generates [parameter models on top of the payload models](https://github.com/asyncapi/modelina/pull/1498) as the default behavior. + +# `renderCompleteModel` and `render` now use object arguments +As parameters grow, regular arguments become cumbersome, so we are starting to [switch over to using object arguments](https://github.com/asyncapi/modelina/pull/1505). + +This means that the following functions are going to change from: + +```ts +generator.renderCompleteModel( + constrainedModel, + inputModel, + completeOptions, + options +); + +generator.render( + constrainedModel, + inputModel, + options +); +``` + +To +```ts +generator.renderCompleteModel({ + constrainedModel, + inputModel, + completeOptions, + options +}); + +generator.render({ + constrainedModel, + inputModel, + options +}); +``` + +# Nullable models + +Each [meta model](../internal-model.md) up until now was not able to be marked as nullable, but now they can be through `isNullable`. Here are the different outputs and how they now apply nullable types. + +## TypeScript + +Across all models, if they are nullable they will get the union `x | null`. + +## JavaScript +Is not affected by this change. + +## C# +Is not affected by this change. + +## Java +With this update, Float, Integer, and Boolean meta models are rendered between their primitive types (for example `float`) and wrapper classes (for example `Float`) for nullable. + +[`Double` now also respects being nullable](https://github.com/asyncapi/modelina/pull/1439). + +## Kotlin +Is not affected by this change. + +## Rust +Is not affected by this change. + +## Python +Is not affected by this change. + +## Go +Is not affected by this change. + +## Dart +Is not affected by this change. + +## C++ +Is not affected by this change. + +# Upgrading to Node v18 +[As Node v14 is unmaintained we have upgraded to use Node v18.](https://github.com/asyncapi/modelina/pull/1422) diff --git a/examples/README.md b/examples/README.md index df3003ef3b..45d0e1f845 100644 --- a/examples/README.md +++ b/examples/README.md @@ -69,6 +69,7 @@ These are all the basic generator examples that shows a bare minimal example of ## Integrations These are examples of how you can integrate Modelina into a specific scenario: - [integrate with React](./integrate-with-react) - A basic example that shows how you can integrate Modelina with React. +- [integrate-with-next](./integrate-with-next) - A basic example that shows how you can integrate Modelina with Next. ## Python These are all specific examples only relevant to the Python generator: diff --git a/examples/adapting-input-and-output/__snapshots__/index.spec.ts.snap b/examples/adapting-input-and-output/__snapshots__/index.spec.ts.snap index 0086d145d8..9401a7d635 100644 --- a/examples/adapting-input-and-output/__snapshots__/index.spec.ts.snap +++ b/examples/adapting-input-and-output/__snapshots__/index.spec.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Should be able to generate a model with custom input and output and should log expected output to console 1`] = ` +exports[`Should be able to generate a model with custom input and output and should log expected output to console 1`] = ` Array [ "public class Address { diff --git a/examples/adapting-input-and-output/index.spec.ts b/examples/adapting-input-and-output/index.spec.ts index 8ea9d9cdd4..e00a432593 100644 --- a/examples/adapting-input-and-output/index.spec.ts +++ b/examples/adapting-input-and-output/index.spec.ts @@ -3,7 +3,7 @@ const spy = jest.spyOn(global.console, 'log').mockImplementation(() => { }); import { generate } from './index'; -describe('Should be able to generate a model with custom input and output ', () => { +describe('Should be able to generate a model with custom input and output', () => { afterAll(() => { jest.restoreAllMocks(); }); diff --git a/examples/asyncapi-openapi-schema/__snapshots__/index.spec.ts.snap b/examples/asyncapi-openapi-schema/__snapshots__/index.spec.ts.snap index f5a1982993..c611aae8e0 100644 --- a/examples/asyncapi-openapi-schema/__snapshots__/index.spec.ts.snap +++ b/examples/asyncapi-openapi-schema/__snapshots__/index.spec.ts.snap @@ -3,12 +3,12 @@ exports[`Should be able to process an AsyncAPI object with OpenAPI schema type and should log expected output to console 1`] = ` Array [ "class AnonymousSchema_1 { - private _title?: string; + private _title?: string | null; private _author?: string; private _additionalProperties?: Map; constructor(input: { - title?: string, + title?: string | null, author?: string, additionalProperties?: Map, }) { @@ -17,8 +17,8 @@ Array [ this._additionalProperties = input.additionalProperties; } - get title(): string | undefined { return this._title; } - set title(title: string | undefined) { this._title = title; } + get title(): string | null | undefined { return this._title; } + set title(title: string | null | undefined) { this._title = title; } get author(): string | undefined { return this._author; } set author(author: string | undefined) { this._author = author; } diff --git a/examples/csharp-auto-implemented-properties/__snapshots__/index.spec.ts.snap b/examples/csharp-auto-implemented-properties/__snapshots__/index.spec.ts.snap index 0ffc62e3a2..a6154eb8e7 100644 --- a/examples/csharp-auto-implemented-properties/__snapshots__/index.spec.ts.snap +++ b/examples/csharp-auto-implemented-properties/__snapshots__/index.spec.ts.snap @@ -4,7 +4,7 @@ exports[`Should be able to render auto-implemented properties in CSharp and shou Array [ "public class Root { - public dynamic[]? Emails { get; set; } + public string[]? Emails { get; set; } public string? StringProp { get; set; } public double? NumberProp { get; set; } }", diff --git a/examples/csharp-change-collection-type/__snapshots__/index.spec.ts.snap b/examples/csharp-change-collection-type/__snapshots__/index.spec.ts.snap index ad8bad831d..6072b1ae29 100644 --- a/examples/csharp-change-collection-type/__snapshots__/index.spec.ts.snap +++ b/examples/csharp-change-collection-type/__snapshots__/index.spec.ts.snap @@ -4,9 +4,9 @@ exports[`Should be able to render collections in C# as IEnumerable and should lo Array [ "public class Root { - private IEnumerable? email; + private IEnumerable? email; - public IEnumerable? Email + public IEnumerable? Email { get { return email; } set { email = value; } diff --git a/examples/csharp-generate-handle-nullable/__snapshots__/index.spec.ts.snap b/examples/csharp-generate-handle-nullable/__snapshots__/index.spec.ts.snap index fbe40d9bd5..6919a603cb 100644 --- a/examples/csharp-generate-handle-nullable/__snapshots__/index.spec.ts.snap +++ b/examples/csharp-generate-handle-nullable/__snapshots__/index.spec.ts.snap @@ -7,8 +7,8 @@ Array [ public string? Email { get; set; } public string Name { get; set; } = null!; public int Age { get; set; } - public dynamic[]? NullableFoos { get; set; } - public dynamic[] MandatoryFoos { get; set; } = null!; + public Dictionary[]? NullableFoos { get; set; } + public Dictionary[] MandatoryFoos { get; set; } = null!; }", ] `; diff --git a/examples/csharp-generate-json-serializer/__snapshots__/index.spec.ts.snap b/examples/csharp-generate-json-serializer/__snapshots__/index.spec.ts.snap index ba6cd1f148..bf11b6f1b9 100644 --- a/examples/csharp-generate-json-serializer/__snapshots__/index.spec.ts.snap +++ b/examples/csharp-generate-json-serializer/__snapshots__/index.spec.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Should be able to generate a model with functions to serialize the data model into JSON and should log expected output to console 1`] = ` +exports[`Should be able to generate a model with functions to serialize the data model into JSON and should log expected output to console 1`] = ` Array [ "[JsonConverter(typeof(RootConverter))] public class Root diff --git a/examples/csharp-generate-json-serializer/index.spec.ts b/examples/csharp-generate-json-serializer/index.spec.ts index c171e8b97e..5df0e5bf59 100644 --- a/examples/csharp-generate-json-serializer/index.spec.ts +++ b/examples/csharp-generate-json-serializer/index.spec.ts @@ -3,7 +3,7 @@ const spy = jest.spyOn(global.console, 'log').mockImplementation(() => { }); import { generate } from './index'; -describe('Should be able to generate a model with functions to serialize the data model into JSON ', () => { +describe('Should be able to generate a model with functions to serialize the data model into JSON', () => { afterAll(() => { jest.restoreAllMocks(); }); diff --git a/examples/csharp-generate-newtonsoft-serializer/__snapshots__/index.spec.ts.snap b/examples/csharp-generate-newtonsoft-serializer/__snapshots__/index.spec.ts.snap index 8bb4825153..ef23b85121 100644 --- a/examples/csharp-generate-newtonsoft-serializer/__snapshots__/index.spec.ts.snap +++ b/examples/csharp-generate-newtonsoft-serializer/__snapshots__/index.spec.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Should be able to generate a model with functions to serialize the data model into JSON and should log expected output to console 1`] = ` +exports[`Should be able to generate a model with functions to serialize the data model into JSON and should log expected output to console 1`] = ` Array [ "[JsonConverter(typeof(RootConverter))] public class Root diff --git a/examples/csharp-generate-newtonsoft-serializer/index.spec.ts b/examples/csharp-generate-newtonsoft-serializer/index.spec.ts index c171e8b97e..5df0e5bf59 100644 --- a/examples/csharp-generate-newtonsoft-serializer/index.spec.ts +++ b/examples/csharp-generate-newtonsoft-serializer/index.spec.ts @@ -3,7 +3,7 @@ const spy = jest.spyOn(global.console, 'log').mockImplementation(() => { }); import { generate } from './index'; -describe('Should be able to generate a model with functions to serialize the data model into JSON ', () => { +describe('Should be able to generate a model with functions to serialize the data model into JSON', () => { afterAll(() => { jest.restoreAllMocks(); }); diff --git a/examples/csharp-generate-records/__snapshots__/index.spec.ts.snap b/examples/csharp-generate-records/__snapshots__/index.spec.ts.snap index 6cdc875889..18b2fa46fb 100644 --- a/examples/csharp-generate-records/__snapshots__/index.spec.ts.snap +++ b/examples/csharp-generate-records/__snapshots__/index.spec.ts.snap @@ -4,7 +4,7 @@ exports[`Should be able to render a C# record instead of a class using the model Array [ "public record Root { - public IEnumerable? Email { get; init; } + public IEnumerable? Email { get; init; } public required string Name { get; init; } }", ] diff --git a/examples/generate-all-models-within-the-same-file/index.spec.ts b/examples/generate-all-models-within-the-same-file/index.spec.ts index 895fc6fb46..bfe3e18c13 100644 --- a/examples/generate-all-models-within-the-same-file/index.spec.ts +++ b/examples/generate-all-models-within-the-same-file/index.spec.ts @@ -2,23 +2,13 @@ const spy = jest.spyOn(global.console, 'log').mockImplementation(() => { return; }); import { generate } from './index'; -import * as fs from 'fs'; -import * as path from 'path'; describe('Should be able to generate models to files', () => { afterAll(() => { jest.restoreAllMocks(); }); test('and should log expected output to console', async () => { - const expectedRootDir = __dirname.includes('examples') - ? __dirname - : path.resolve( - __dirname, - './examples/generate-all-models-within-the-same-file/output' - ); - const expectedFilePath = path.resolve(expectedRootDir, 'Root.java'); await generate(); expect(spy.mock.calls.length).toBeGreaterThanOrEqual(1); expect(spy.mock.calls[spy.mock.calls.length - 1]).toMatchSnapshot(); - expect(fs.existsSync(expectedFilePath)); }); }); diff --git a/examples/generate-csharp-models/__snapshots__/index.spec.ts.snap b/examples/generate-csharp-models/__snapshots__/index.spec.ts.snap index 139c309014..8f4d5cb935 100644 --- a/examples/generate-csharp-models/__snapshots__/index.spec.ts.snap +++ b/examples/generate-csharp-models/__snapshots__/index.spec.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Should be able to render C# models and should log expected output to console 1`] = ` +exports[`Should be able to render C# models and should log expected output to console 1`] = ` Array [ "public class Root { diff --git a/examples/generate-csharp-models/index.spec.ts b/examples/generate-csharp-models/index.spec.ts index 88d1f66312..80c29fc3a0 100644 --- a/examples/generate-csharp-models/index.spec.ts +++ b/examples/generate-csharp-models/index.spec.ts @@ -3,7 +3,7 @@ const spy = jest.spyOn(global.console, 'log').mockImplementation(() => { }); import { generate } from './index'; -describe('Should be able to render C# models ', () => { +describe('Should be able to render C# models', () => { afterAll(() => { jest.restoreAllMocks(); }); diff --git a/examples/generate-kotlin-models/__snapshots__/index.spec.ts.snap b/examples/generate-kotlin-models/__snapshots__/index.spec.ts.snap index d7ee6408d7..46552aee35 100644 --- a/examples/generate-kotlin-models/__snapshots__/index.spec.ts.snap +++ b/examples/generate-kotlin-models/__snapshots__/index.spec.ts.snap @@ -3,9 +3,9 @@ exports[`Should be able to render Kotlin Models and should log expected output to console 1`] = ` Array [ "data class Root( - val email: String, - val cache: Int, - val website: Website, + val email: String? = null, + val cache: Int? = null, + val website: Website? = null, )", ] `; diff --git a/examples/generate-to-files/index.spec.ts b/examples/generate-to-files/index.spec.ts index 315715f07d..bfe3e18c13 100644 --- a/examples/generate-to-files/index.spec.ts +++ b/examples/generate-to-files/index.spec.ts @@ -2,20 +2,13 @@ const spy = jest.spyOn(global.console, 'log').mockImplementation(() => { return; }); import { generate } from './index'; -import * as fs from 'fs'; -import * as path from 'path'; describe('Should be able to generate models to files', () => { afterAll(() => { jest.restoreAllMocks(); }); test('and should log expected output to console', async () => { - const expectedRootDir = __dirname.includes('examples') - ? __dirname - : path.resolve(__dirname, './examples/generate-to-files'); - const expectedFilePath = path.resolve(expectedRootDir, 'Root.java'); await generate(); expect(spy.mock.calls.length).toBeGreaterThanOrEqual(1); expect(spy.mock.calls[spy.mock.calls.length - 1]).toMatchSnapshot(); - expect(fs.existsSync(expectedFilePath)); }); }); diff --git a/examples/integrate-with-next/.babelrc b/examples/integrate-with-next/.babelrc new file mode 100644 index 0000000000..e49a7e6569 --- /dev/null +++ b/examples/integrate-with-next/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["next/babel"] +} \ No newline at end of file diff --git a/examples/integrate-with-next/.gitignore b/examples/integrate-with-next/.gitignore new file mode 100644 index 0000000000..c87c9b392c --- /dev/null +++ b/examples/integrate-with-next/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/integrate-with-next/README.md b/examples/integrate-with-next/README.md new file mode 100644 index 0000000000..1f96eb8699 --- /dev/null +++ b/examples/integrate-with-next/README.md @@ -0,0 +1,17 @@ +# Integrate with Next + +A basic example of how to integrate Modelina into Next. This particular example is with Jest and TypeScript. + +## How to run this example + +Run this example using: + +```sh +npm i && npm run start +``` + +If you are on Windows, use the `start:windows` script instead: + +```sh +npm i && npm run start:windows +``` diff --git a/examples/integrate-with-next/jest.config.js b/examples/integrate-with-next/jest.config.js new file mode 100644 index 0000000000..9cc667d9a8 --- /dev/null +++ b/examples/integrate-with-next/jest.config.js @@ -0,0 +1,37 @@ +const nextJest = require('next/jest') + +const createNextJestConfig = nextJest({ + // Provide the path to your Next.js app to load next.config.js and .env files in your test environment + dir: './', +}); + +async function createCustomJestConfig() { + // Add any custom config to be passed to Jest + /** @type {import('jest').Config} */ + const customJestConfig = { + moduleNameMapper: { + // Handle module aliases (this will be automatically configured for you soon) + '^@/components/(.*)$': '/components/$1', + '^@/pages/(.*)$': '/src/pages/$1', + '^@/styles/(.*)$': '/src/styles/$1' + }, + testEnvironment: 'jest-environment-jsdom', + setupFilesAfterEnv: ['/jest.setup.js'] + }; + /** + * NextJest adds and overwrite a lot of configurations + */ + let fullConfig = await createNextJestConfig(customJestConfig)(); + + // We have to configure Jest to transform a specific + fullConfig.transformIgnorePatterns = [ + '^.+\\.module\\.(css|sass|scss)$', + // Ignore all but this + '../../../node_modules/@stoplight/spectral-core/node_modules/(!?jsonpath-plus)', + ]; + + return fullConfig; +} + +// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async +module.exports = createCustomJestConfig; \ No newline at end of file diff --git a/examples/integrate-with-next/jest.setup.js b/examples/integrate-with-next/jest.setup.js new file mode 100644 index 0000000000..7b0828bfa8 --- /dev/null +++ b/examples/integrate-with-next/jest.setup.js @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; diff --git a/examples/integrate-with-next/package-lock.json b/examples/integrate-with-next/package-lock.json new file mode 100644 index 0000000000..27e7f2e598 --- /dev/null +++ b/examples/integrate-with-next/package-lock.json @@ -0,0 +1,10665 @@ +{ + "name": "integrate-with-next", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "integrate-with-next", + "version": "0.1.0", + "hasInstallScript": true, + "dependencies": { + "@babel/plugin-transform-modules-commonjs": "^7.20.11", + "@babel/preset-env": "^7.20.2", + "@next/font": "13.1.5", + "@testing-library/dom": "^8.20.0", + "@testing-library/jest-dom": "^5.16.4", + "@testing-library/react": "^13.2.0", + "@testing-library/user-event": "^14.2.0", + "@types/jest": "^29.4.0", + "@types/node": "18.11.18", + "@types/react": "18.0.27", + "@types/react-dom": "18.0.10", + "@types/testing-library__jest-dom": "5.14.5", + "babel-jest": "^29.4.2", + "jest": "^28.1.0", + "jest-environment-jsdom": "28.1.0", + "next": "13.1.5", + "react": "18.2.0", + "react-dom": "18.2.0", + "typescript": "4.9.4" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz", + "integrity": "sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==" + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "dependencies": { + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", + "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.10", + "@babel/parser": "^7.22.10", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "dependencies": { + "@babel/types": "^7.22.10", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", + "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "dependencies": { + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz", + "integrity": "sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "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" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", + "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", + "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", + "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz", + "integrity": "sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", + "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", + "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz", + "integrity": "sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", + "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.10", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.10", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.10", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.10", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.22.10", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "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" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, + "node_modules/@babel/runtime": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", + "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", + "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", + "dependencies": { + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.10", + "@babel/types": "^7.22.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", + "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/console/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/console/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/console/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/console/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/console/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/console/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", + "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/reporters": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.1.3", + "jest-config": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-resolve-dependencies": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "jest-watcher": "^28.1.3", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core/node_modules/@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/@jest/core/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", + "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "dependencies": { + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@jest/environment/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/environment/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/environment/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/environment/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/environment/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "dependencies": { + "expect": "^28.1.3", + "jest-snapshot": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.3.tgz", + "integrity": "sha512-nvOEW4YoqRKD9HBJ9OJ6przvIvP9qilp5nAn1462P5ZlL/MM9SgPEZFyjTGPfs7QkocdUsJa6KjHhyRn4ueItA==", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dependencies": { + "jest-get-type": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@jest/expect/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/expect/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/expect/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/expect/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/expect/node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dependencies": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/expect/node_modules/jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/expect/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@jest/expect/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/fake-timers": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", + "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", + "dependencies": { + "@jest/types": "^28.1.3", + "@sinonjs/fake-timers": "^9.1.2", + "@types/node": "*", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@jest/fake-timers/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/fake-timers/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/fake-timers/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/fake-timers/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/fake-timers/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/fake-timers/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@jest/fake-timers/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/globals": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", + "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/types": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@jest/globals/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/globals/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/globals/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/globals/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/globals/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/globals/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", + "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/@jest/reporters/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", + "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.13", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@jest/test-result/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/test-result/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/test-result/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/test-result/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/test-result/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", + "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "dependencies": { + "@jest/test-result": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@jest/test-sequencer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/test-sequencer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/test-sequencer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/test-sequencer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/test-sequencer/node_modules/jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/@jest/test-sequencer/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.3.tgz", + "integrity": "sha512-dPIc3DsvMZ/S8ut4L2ViCj265mKO0owB0wfzBv2oGzL9pQ+iRvJewHqLBmsGb7XFb5UotWIEtvY5A/lnylaIoQ==", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@next/env": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.5.tgz", + "integrity": "sha512-0Ry4NhJy6qLbXhvxPRUQ1H6RzgtryGdUto7hfgAK0Iw/bScgeVjwLZdfhm2iT7qsOS32apo9cWzLCxjc6iGPsA==" + }, + "node_modules/@next/font": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/font/-/font-13.1.5.tgz", + "integrity": "sha512-6M5R6yC3JkdJiqo/YJxDp6+0vDn0smXOAzl8uHt4qmDS2u53ji/19K0HM51d+5kg8xntDi+N2hw7YjaU9inkNA==" + }, + "node_modules/@next/swc-android-arm-eabi": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.5.tgz", + "integrity": "sha512-QAEf3YM9U0qWVQTxgF3Tsh4OeCN1i9Smsf6cVlwZsPzoLyj2nQ879joCoN+ONqDknkBgG6OG/ajefywL3jw9Cg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-android-arm64": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.5.tgz", + "integrity": "sha512-ZmtGPTghRuT5YKL0nNcC2bBVSiG1O0is16eIZ2rWSP/hRW64ZCcAew6pxw2rihntNp22UfequjSTHd91WE/tyQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.5.tgz", + "integrity": "sha512-aeFXK+M/zmG/CNdMJ0tGNs0MWcLueUe7vZ2V6fa+2yz/ZgYJLI7fEfFvVh1p1yBMzupSbZDowvMuCSFTaeg3MA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.5.tgz", + "integrity": "sha512-6mPX0GNRg8NzjV70at8I8pD9YBnPHDpxJCoMuIqysdTjtQhd09Xk6GUhquNhp1kEJzzVk7OW5l2ch4XIJjtY3A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-freebsd-x64": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.5.tgz", + "integrity": "sha512-nR4a/SNblG0w8hhYRflTZjk4yD99ld18w/FCftw99ziw8sgciBlOXRICJIiRIaMRU8UH7QLSgBOQVnfNcVNKMA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.5.tgz", + "integrity": "sha512-EzkltCVKg3gUzamoeKPhGeSgXTTLAhSzc7v/+g1Y+HQa7JKMrlzdRkrJf+H4LJXcz7lnxgNKHGRyZBSXnmJKJw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.5.tgz", + "integrity": "sha512-E7HMkdoxStmTUJU4KzBUU4vZ5DHT4Gd327tC3KFZS5lda0NRerJAOCfsRg+fBj22FvCb1UWsX6XI+weL6xhyeQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.5.tgz", + "integrity": "sha512-qlO0Fd3GQwJS6YpbF9NyL5NGHVZ43dKtZDC/jP4vdeMIYDtSu13HcY/nmA1NdW+RpMwDxSCpx4WKsCCEZGIX8Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.5.tgz", + "integrity": "sha512-GftSBFAay2nocGl+KNqFsj6EVSvomaM/bp86hzezbKsTwQmu76PjOCVcejI1gE+4k7f5zPDgCuorF6F04BV0HQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.5.tgz", + "integrity": "sha512-UD+3lxU4yuAjd+uBkCDfBpAcbGAVfEcE8mX/efIxUGIImmzN0QzgTHYEpKFnY3Lxu02dIBcwQRT3Q5mfO4obng==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.5.tgz", + "integrity": "sha512-uzsvkQY+K3EbL+97IUHPWZPwjsCmCkdH/O5Cf9wCnh0k0gaj7ob1mGKqr1vNNak+9U7HloGwuHcXnZpijWSP7w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.5.tgz", + "integrity": "sha512-v0NaC1w8mPf620GlJaHBdEm3dm4G4AEQMasDqjzQvo0yCRrvtvzMgCIe8MocBxFHzaF6868NybMqvumxP5YxEg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.5.tgz", + "integrity": "sha512-IZHwvd649ccbWyLCfu92IXEpR250NpmBkaRelPV+WVm4jrd62FKRFCNdqdCXq6TrEg9wN8cK4YG8tm44uEZqLA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@swc/helpers": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@testing-library/dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@testing-library/jest-dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", + "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.5.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.4.3", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.4.3.tgz", + "integrity": "sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", + "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==" + }, + "node_modules/@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.4", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.4.tgz", + "integrity": "sha512-PhglGmhWeD46FYOVLt3X7TiWjzwuVGW9wG/4qocPevXMjCmrIc5b6db9WjeGE4QYVpUAWMDv3v0IiBwObY289A==", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@types/jsdom": { + "version": "16.2.15", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz", + "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==", + "dependencies": { + "@types/node": "*", + "@types/parse5": "^6.0.3", + "@types/tough-cookie": "*" + } + }, + "node_modules/@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" + }, + "node_modules/@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==" + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/react": { + "version": "18.0.27", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz", + "integrity": "sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.10", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", + "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", + "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==" + }, + "node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.3.tgz", + "integrity": "sha512-1Ne93zZZEy5XmTa4Q+W5+zxBrDpExX8E3iy+xJJ+24ewlfo/T3qHfQJCzi/MMVFmBQDNxtRR/Gfd2dwb/0yrQw==", + "dependencies": { + "@jest/transform": "^29.6.3", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001522", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", + "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/core-js-compat": { + "version": "3.32.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.1.tgz", + "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==", + "dependencies": { + "browserslist": "^4.21.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "node_modules/deep-equal": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", + "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.1", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.499", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.499.tgz", + "integrity": "sha512-0NmjlYBLKVHva4GABWAaHuPJolnDuL0AhV3h1hES6rcLCWEIbRL6/8TghfsVwkx6TEroQVdliX7+aLysUpKvjw==" + }, + "node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.3.tgz", + "integrity": "sha512-x1vY4LlEMWUYVZQrFi4ZANXFwqYbJ/JNQspLVvzhW2BNY28aNcXMQH6imBbt+RBf5sVRTodYHXtSP/TLEU0Dxw==", + "dependencies": { + "@jest/expect-utils": "^29.6.3", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.6.3", + "jest-message-util": "^29.6.3", + "jest-util": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", + "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", + "dependencies": { + "@jest/core": "^28.1.3", + "@jest/types": "^28.1.3", + "import-local": "^3.0.2", + "jest-cli": "^28.1.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", + "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "dependencies": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", + "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "p-limit": "^3.1.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-circus/node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", + "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "dependencies": { + "@jest/core": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-cli/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-cli/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", + "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.3", + "@jest/types": "^28.1.3", + "babel-jest": "^28.1.3", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.3", + "jest-environment-node": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/babel-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", + "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "dependencies": { + "@jest/transform": "^28.1.3", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.1.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/jest-config/node_modules/babel-plugin-jest-hoist": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", + "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/babel-preset-jest": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", + "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", + "dependencies": { + "babel-plugin-jest-hoist": "^28.1.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-config/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.3.tgz", + "integrity": "sha512-3sw+AdWnwH9sSNohMRKA7JiYUJSRr/WS6+sEFfBuhxU5V5GlEVKfvUn8JuMHE0wqKowemR1C2aHy8VtXbaV8dQ==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", + "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", + "dependencies": { + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.3", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.1.0.tgz", + "integrity": "sha512-8n6P4xiDjNVqTWv6W6vJPuQdLx+ZiA3dbYg7YJ+DPzR+9B61K6pMVJrSs2IxfGRG4J7pyAUA5shQ9G0KEun78w==", + "dependencies": { + "@jest/environment": "^28.1.0", + "@jest/fake-timers": "^28.1.0", + "@jest/types": "^28.1.0", + "@types/jsdom": "^16.2.4", + "@types/node": "*", + "jest-mock": "^28.1.0", + "jest-util": "^28.1.0", + "jsdom": "^19.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-environment-jsdom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-environment-node/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-environment-node/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-node/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-environment-node/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.3.tgz", + "integrity": "sha512-GecR5YavfjkhOytEFHAeI6aWWG3f/cOKNB1YJvj/B76xAmeVjy4zJUYobGF030cRmKaO1FBw3V8CZZ6KVh9ZSw==", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.6.3", + "jest-worker": "^29.6.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-haste-map/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-haste-map/node_modules/jest-worker": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.3.tgz", + "integrity": "sha512-wacANXecZ/GbQakpf2CClrqrlwsYYDSXFd4fIGdL+dXpM2GWoJ+6bhQ7vR3TKi3+gkSfBkjy1/khH/WrYS4Q6g==", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.6.3", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest-leak-detector": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", + "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", + "dependencies": { + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/jest-matcher-utils": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.3.tgz", + "integrity": "sha512-6ZrMYINZdwduSt5Xu18/n49O1IgXdjsfG7NEZaQws9k69eTKWKcVbJBw/MZsjOZe2sSyJFmuzh8042XWwl54Zg==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", + "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", + "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", + "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-mock/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-mock/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-mock/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-mock/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-mock/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-mock/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", + "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", + "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "dependencies": { + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-resolve/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", + "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/environment": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "graceful-fs": "^4.2.9", + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-leak-detector": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-resolve": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-util": "^28.1.3", + "jest-watcher": "^28.1.3", + "jest-worker": "^28.1.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-runner/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", + "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/globals": "^28.1.3", + "@jest/source-map": "^28.1.2", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-runtime/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", + "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^28.1.3", + "graceful-fs": "^4.2.9", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "natural-compare": "^1.4.0", + "pretty-format": "^28.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dependencies": { + "jest-get-type": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/transform": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-snapshot/node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dependencies": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-haste-map": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/jest-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", + "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", + "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", + "dependencies": { + "@jest/types": "^28.1.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.5.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/next": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/next/-/next-13.1.5.tgz", + "integrity": "sha512-rmpYZFCxxWAi2nJCT9sSqMLGC3cu+Pf689hx9clcyP0KbVIhh/7Dus5QcKrVd/PrAd6AjsuogSRR1mCP7BoYRw==", + "dependencies": { + "@next/env": "13.1.5", + "@swc/helpers": "0.4.14", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=14.6.0" + }, + "optionalDependencies": { + "@next/swc-android-arm-eabi": "13.1.5", + "@next/swc-android-arm64": "13.1.5", + "@next/swc-darwin-arm64": "13.1.5", + "@next/swc-darwin-x64": "13.1.5", + "@next/swc-freebsd-x64": "13.1.5", + "@next/swc-linux-arm-gnueabihf": "13.1.5", + "@next/swc-linux-arm64-gnu": "13.1.5", + "@next/swc-linux-arm64-musl": "13.1.5", + "@next/swc-linux-x64-gnu": "13.1.5", + "@next/swc-linux-x64-musl": "13.1.5", + "@next/swc-win32-arm64-msvc": "13.1.5", + "@next/swc-win32-ia32-msvc": "13.1.5", + "@next/swc-win32-x64-msvc": "13.1.5" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^6.0.0 || ^7.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "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" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/examples/integrate-with-next/package.json b/examples/integrate-with-next/package.json new file mode 100644 index 0000000000..98427bc7de --- /dev/null +++ b/examples/integrate-with-next/package.json @@ -0,0 +1,34 @@ +{ + "name": "integrate-with-next", + "version": "0.1.0", + "private": true, + "scripts": { + "preinstall": "cd ../.. && npm i && npm run build:prod", + "dev": "next dev", + "build": "next build", + "start": "next start", + "test": "jest", + "test:watch": "jest --watch" + }, + "dependencies": { + "@babel/preset-env": "^7.20.2", + "@next/font": "13.1.5", + "@types/node": "18.11.18", + "@types/react": "18.0.27", + "@types/react-dom": "18.0.10", + "next": "13.1.5", + "react": "18.2.0", + "react-dom": "18.2.0", + "typescript": "4.9.4", + "@babel/plugin-transform-modules-commonjs": "^7.20.11", + "@testing-library/dom": "^8.20.0", + "@testing-library/jest-dom": "^5.16.4", + "@testing-library/react": "^13.2.0", + "@testing-library/user-event": "^14.2.0", + "@types/jest": "^29.4.0", + "@types/testing-library__jest-dom": "5.14.5", + "babel-jest": "^29.4.2", + "jest": "^28.1.0", + "jest-environment-jsdom": "28.1.0" + } +} diff --git a/examples/integrate-with-next/public/favicon.ico b/examples/integrate-with-next/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 zcmeHv30#a{`}aL_*G&7qml|y<+KVaDM2m#dVr!KsA!#An?kSQM(q<_dDNCpjEux83 zLb9Z^XxbDl(w>%i@8hT6>)&Gu{h#Oeyszu?xtw#Zb1mO{pgX9699l+Qppw7jXaYf~-84xW z)w4x8?=youko|}Vr~(D$UXIbiXABHh`p1?nn8Po~fxRJv}|0e(BPs|G`(TT%kKVJAdg5*Z|x0leQq0 zkdUBvb#>9F()jo|T~kx@OM8$9wzs~t2l;K=woNssA3l6|sx2r3+kdfVW@e^8e*E}v zA1y5{bRi+3Z`uD3{F7LgFJDdvm;nJilkzDku>BwXH(8ItVCXk*-lSJnR?-2UN%hJ){&rlvg`CDTj z)Bzo!3v7Ou#83zEDEFcKt(f1E0~=rqeEbTnMvWR#{+9pg%7G8y>u1OVRUSoox-ovF z2Ydma(;=YuBY(eI|04{hXzZD6_f(v~H;C~y5=DhAC{MMS>2fm~1H_t2$56pc$NH8( z5bH|<)71dV-_oCHIrzrT`2s-5w_+2CM0$95I6X8p^r!gHp+j_gd;9O<1~CEQQGS8) zS9Qh3#p&JM-G8rHekNmKVewU;pJRcTAog68KYo^dRo}(M>36U4Us zfgYWSiHZL3;lpWT=zNAW>Dh#mB!_@Lg%$ms8N-;aPqMn+C2HqZgz&9~Eu z4|Kp<`$q)Uw1R?y(~S>ePdonHxpV1#eSP1B;Ogo+-Pk}6#0GsZZ5!||ev2MGdh}_m z{DeR7?0-1^zVs&`AV6Vt;r3`I`OI_wgs*w=eO%_#7Kepl{B@xiyCANc(l zzIyd4y|c6PXWq9-|KM8(zIk8LPk(>a)zyFWjhT!$HJ$qX1vo@d25W<fvZQ2zUz5WRc(UnFMKHwe1| zWmlB1qdbiA(C0jmnV<}GfbKtmcu^2*P^O?MBLZKt|As~ge8&AAO~2K@zbXelK|4T<{|y4`raF{=72kC2Kn(L4YyenWgrPiv z@^mr$t{#X5VuIMeL!7Ab6_kG$&#&5p*Z{+?5U|TZ`B!7llpVmp@skYz&n^8QfPJzL z0G6K_OJM9x+Wu2gfN45phANGt{7=C>i34CV{Xqlx(fWpeAoj^N0Biu`w+MVcCUyU* zDZuzO0>4Z6fbu^T_arWW5n!E45vX8N=bxTVeFoep_G#VmNlQzAI_KTIc{6>c+04vr zx@W}zE5JNSU>!THJ{J=cqjz+4{L4A{Ob9$ZJ*S1?Ggg3klFp!+Y1@K+pK1DqI|_gq z5ZDXVpge8-cs!o|;K73#YXZ3AShj50wBvuq3NTOZ`M&qtjj#GOFfgExjg8Gn8>Vq5 z`85n+9|!iLCZF5$HJ$Iu($dm?8~-ofu}tEc+-pyke=3!im#6pk_Wo8IA|fJwD&~~F zc16osQ)EBo58U7XDuMexaPRjU@h8tXe%S{fA0NH3vGJFhuyyO!Uyl2^&EOpX{9As0 zWj+P>{@}jxH)8|r;2HdupP!vie{sJ28b&bo!8`D^x}TE$%zXNb^X1p@0PJ86`dZyj z%ce7*{^oo+6%&~I!8hQy-vQ7E)0t0ybH4l%KltWOo~8cO`T=157JqL(oq_rC%ea&4 z2NcTJe-HgFjNg-gZ$6!Y`SMHrlj}Etf7?r!zQTPPSv}{so2e>Fjs1{gzk~LGeesX%r(Lh6rbhSo_n)@@G-FTQy93;l#E)hgP@d_SGvyCp0~o(Y;Ee8{ zdVUDbHm5`2taPUOY^MAGOw*>=s7=Gst=D+p+2yON!0%Hk` zz5mAhyT4lS*T3LS^WSxUy86q&GnoHxzQ6vm8)VS}_zuqG?+3td68_x;etQAdu@sc6 zQJ&5|4(I?~3d-QOAODHpZ=hlSg(lBZ!JZWCtHHSj`0Wh93-Uk)_S%zsJ~aD>{`A0~ z9{AG(e|q3g5B%wYKRxiL2Y$8(4w6bzchKuloQW#e&S3n+P- z8!ds-%f;TJ1>)v)##>gd{PdS2Oc3VaR`fr=`O8QIO(6(N!A?pr5C#6fc~Ge@N%Vvu zaoAX2&(a6eWy_q&UwOhU)|P3J0Qc%OdhzW=F4D|pt0E4osw;%<%Dn58hAWD^XnZD= z>9~H(3bmLtxpF?a7su6J7M*x1By7YSUbxGi)Ot0P77`}P3{)&5Un{KD?`-e?r21!4vTTnN(4Y6Lin?UkSM z`MXCTC1@4A4~mvz%Rh2&EwY))LeoT=*`tMoqcEXI>TZU9WTP#l?uFv+@Dn~b(>xh2 z;>B?;Tz2SR&KVb>vGiBSB`@U7VIWFSo=LDSb9F{GF^DbmWAfpms8Sx9OX4CnBJca3 zlj9(x!dIjN?OG1X4l*imJNvRCk}F%!?SOfiOq5y^mZW)jFL@a|r-@d#f7 z2gmU8L3IZq0ynIws=}~m^#@&C%J6QFo~Mo4V`>v7MI-_!EBMMtb%_M&kvAaN)@ZVw z+`toz&WG#HkWDjnZE!6nk{e-oFdL^$YnbOCN}JC&{$#$O27@|Tn-skXr)2ml2~O!5 zX+gYoxhoc7qoU?C^3~&!U?kRFtnSEecWuH0B0OvLodgUAi}8p1 zrO6RSXHH}DMc$&|?D004DiOVMHV8kXCP@7NKB zgaZq^^O<7PoKEp72kby@W0Z!Y*Ay{&vfg#C&gG@YVR9g?FEocMUi1gSN$+V+ayF45{a zuDZDTN}mS|;BO%gEf}pjBfN2-gIrU#G5~cucA;dokXW89%>AyXJJI z9X4UlIWA|ZYHgbI z5?oFk@A=Ik7lrEQPDH!H+b`7_Y~aDb_qa=B2^Y&Ow41cU=4WDd40dp5(QS-WMN-=Y z9g;6_-JdNU;|6cPwf$ak*aJIcwL@1n$#l~zi{c{EW?T;DaW*E8DYq?Umtz{nJ&w-M zEMyTDrC&9K$d|kZe2#ws6)L=7K+{ zQw{XnV6UC$6-rW0emqm8wJoeZK)wJIcV?dST}Z;G0Arq{dVDu0&4kd%N!3F1*;*pW zR&qUiFzK=@44#QGw7k1`3t_d8&*kBV->O##t|tonFc2YWrL7_eqg+=+k;!F-`^b8> z#KWCE8%u4k@EprxqiV$VmmtiWxDLgnGu$Vs<8rppV5EajBXL4nyyZM$SWVm!wnCj-B!Wjqj5-5dNXukI2$$|Bu3Lrw}z65Lc=1G z^-#WuQOj$hwNGG?*CM_TO8Bg-1+qc>J7k5c51U8g?ZU5n?HYor;~JIjoWH-G>AoUP ztrWWLbRNqIjW#RT*WqZgPJXU7C)VaW5}MiijYbABmzoru6EmQ*N8cVK7a3|aOB#O& zBl8JY2WKfmj;h#Q!pN%9o@VNLv{OUL?rixHwOZuvX7{IJ{(EdPpuVFoQqIOa7giLVkBOKL@^smUA!tZ1CKRK}#SSM)iQHk)*R~?M!qkCruaS!#oIL1c z?J;U~&FfH#*98^G?i}pA{ z9Jg36t4=%6mhY(quYq*vSxptes9qy|7xSlH?G=S@>u>Ebe;|LVhs~@+06N<4CViBk zUiY$thvX;>Tby6z9Y1edAMQaiH zm^r3v#$Q#2T=X>bsY#D%s!bhs^M9PMAcHbCc0FMHV{u-dwlL;a1eJ63v5U*?Q_8JO zT#50!RD619#j_Uf))0ooADz~*9&lN!bBDRUgE>Vud-i5ck%vT=r^yD*^?Mp@Q^v+V zG#-?gKlr}Eeqifb{|So?HM&g91P8|av8hQoCmQXkd?7wIJwb z_^v8bbg`SAn{I*4bH$u(RZ6*xUhuA~hc=8czK8SHEKTzSxgbwi~9(OqJB&gwb^l4+m`k*Q;_?>Y-APi1{k zAHQ)P)G)f|AyjSgcCFps)Fh6Bca*Xznq36!pV6Az&m{O8$wGFD? zY&O*3*J0;_EqM#jh6^gMQKpXV?#1?>$ml1xvh8nSN>-?H=V;nJIwB07YX$e6vLxH( zqYwQ>qxwR(i4f)DLd)-$P>T-no_c!LsN@)8`e;W@)-Hj0>nJ-}Kla4-ZdPJzI&Mce zv)V_j;(3ERN3_@I$N<^|4Lf`B;8n+bX@bHbcZTopEmDI*Jfl)-pFDvo6svPRoo@(x z);_{lY<;);XzT`dBFpRmGrr}z5u1=pC^S-{ce6iXQlLGcItwJ^mZx{m$&DA_oEZ)B{_bYPq-HA zcH8WGoBG(aBU_j)vEy+_71T34@4dmSg!|M8Vf92Zj6WH7Q7t#OHQqWgFE3ARt+%!T z?oLovLVlnf?2c7pTc)~cc^($_8nyKwsN`RA-23ed3sdj(ys%pjjM+9JrctL;dy8a( z@en&CQmnV(()bu|Y%G1-4a(6x{aLytn$T-;(&{QIJB9vMox11U-1HpD@d(QkaJdEb zG{)+6Dos_L+O3NpWo^=gR?evp|CqEG?L&Ut#D*KLaRFOgOEK(Kq1@!EGcTfo+%A&I z=dLbB+d$u{sh?u)xP{PF8L%;YPPW53+@{>5W=Jt#wQpN;0_HYdw1{ksf_XhO4#2F= zyPx6Lx2<92L-;L5PD`zn6zwIH`Jk($?Qw({erA$^bC;q33hv!d!>%wRhj# zal^hk+WGNg;rJtb-EB(?czvOM=H7dl=vblBwAv>}%1@{}mnpUznfq1cE^sgsL0*4I zJ##!*B?=vI_OEVis5o+_IwMIRrpQyT_Sq~ZU%oY7c5JMIADzpD!Upz9h@iWg_>>~j zOLS;wp^i$-E?4<_cp?RiS%Rd?i;f*mOz=~(&3lo<=@(nR!_Rqiprh@weZlL!t#NCc zO!QTcInq|%#>OVgobj{~ixEUec`E25zJ~*DofsQdzIa@5^nOXj2T;8O`l--(QyU^$t?TGY^7#&FQ+2SS3B#qK*k3`ye?8jUYSajE5iBbJls75CCc(m3dk{t?- zopcER9{Z?TC)mk~gpi^kbbu>b-+a{m#8-y2^p$ka4n60w;Sc2}HMf<8JUvhCL0B&Btk)T`ctE$*qNW8L$`7!r^9T+>=<=2qaq-;ll2{`{Rg zc5a0ZUI$oG&j-qVOuKa=*v4aY#IsoM+1|c4Z)<}lEDvy;5huB@1RJPquU2U*U-;gu z=En2m+qjBzR#DEJDO`WU)hdd{Vj%^0V*KoyZ|5lzV87&g_j~NCjwv0uQVqXOb*QrQ zy|Qn`hxx(58c70$E;L(X0uZZ72M1!6oeg)(cdKO ze0gDaTz+ohR-#d)NbAH4x{I(21yjwvBQfmpLu$)|m{XolbgF!pmsqJ#D}(ylp6uC> z{bqtcI#hT#HW=wl7>p!38sKsJ`r8}lt-q%Keqy%u(xk=yiIJiUw6|5IvkS+#?JTBl z8H5(Q?l#wzazujH!8o>1xtn8#_w+397*_cy8!pQGP%K(Ga3pAjsaTbbXJlQF_+m+-UpUUent@xM zg%jqLUExj~o^vQ3Gl*>wh=_gOr2*|U64_iXb+-111aH}$TjeajM+I20xw(((>fej-@CIz4S1pi$(#}P7`4({6QS2CaQS4NPENDp>sAqD z$bH4KGzXGffkJ7R>V>)>tC)uax{UsN*dbeNC*v}#8Y#OWYwL4t$ePR?VTyIs!wea+ z5Urmc)X|^`MG~*dS6pGSbU+gPJoq*^a=_>$n4|P^w$sMBBy@f*Z^Jg6?n5?oId6f{ z$LW4M|4m502z0t7g<#Bx%X;9<=)smFolV&(V^(7Cv2-sxbxopQ!)*#ZRhTBpx1)Fc zNm1T%bONzv6@#|dz(w02AH8OXe>kQ#1FMCzO}2J_mST)+ExmBr9cva-@?;wnmWMOk z{3_~EX_xadgJGv&H@zK_8{(x84`}+c?oSBX*Ge3VdfTt&F}yCpFP?CpW+BE^cWY0^ zb&uBN!Ja3UzYHK-CTyA5=L zEMW{l3Usky#ly=7px648W31UNV@K)&Ub&zP1c7%)`{);I4b0Q<)B}3;NMG2JH=X$U zfIW4)4n9ZM`-yRj67I)YSLDK)qfUJ_ij}a#aZN~9EXrh8eZY2&=uY%2N0UFF7<~%M zsB8=erOWZ>Ct_#^tHZ|*q`H;A)5;ycw*IcmVxi8_0Xk}aJA^ath+E;xg!x+As(M#0=)3!NJR6H&9+zd#iP(m0PIW8$ z1Y^VX`>jm`W!=WpF*{ioM?C9`yOR>@0q=u7o>BP-eSHqCgMDj!2anwH?s%i2p+Q7D zzszIf5XJpE)IG4;d_(La-xenmF(tgAxK`Y4sQ}BSJEPs6N_U2vI{8=0C_F?@7<(G; zo$~G=8p+076G;`}>{MQ>t>7cm=zGtfbdDXm6||jUU|?X?CaE?(<6bKDYKeHlz}DA8 zXT={X=yp_R;HfJ9h%?eWvQ!dRgz&Su*JfNt!Wu>|XfU&68iRikRrHRW|ZxzRR^`eIGt zIeiDgVS>IeExKVRWW8-=A=yA`}`)ZkWBrZD`hpWIxBGkh&f#ijr449~m`j6{4jiJ*C!oVA8ZC?$1RM#K(_b zL9TW)kN*Y4%^-qPpMP7d4)o?Nk#>aoYHT(*g)qmRUb?**F@pnNiy6Fv9rEiUqD(^O zzyS?nBrX63BTRYduaG(0VVG2yJRe%o&rVrLjbxTaAFTd8s;<<@Qs>u(<193R8>}2_ zuwp{7;H2a*X7_jryzriZXMg?bTuegABb^87@SsKkr2)0Gyiax8KQWstw^v#ix45EVrcEhr>!NMhprl$InQMzjSFH54x5k9qHc`@9uKQzvL4ihcq{^B zPrVR=o_ic%Y>6&rMN)hTZsI7I<3&`#(nl+3y3ys9A~&^=4?PL&nd8)`OfG#n zwAMN$1&>K++c{^|7<4P=2y(B{jJsQ0a#U;HTo4ZmWZYvI{+s;Td{Yzem%0*k#)vjpB zia;J&>}ICate44SFYY3vEelqStQWFihx%^vQ@Do(sOy7yR2@WNv7Y9I^yL=nZr3mb zXKV5t@=?-Sk|b{XMhA7ZGB@2hqsx}4xwCW!in#C zI@}scZlr3-NFJ@NFaJlhyfcw{k^vvtGl`N9xSo**rDW4S}i zM9{fMPWo%4wYDG~BZ18BD+}h|GQKc-g^{++3MY>}W_uq7jGHx{mwE9fZiPCoxN$+7 zrODGGJrOkcPQUB(FD5aoS4g~7#6NR^ma7-!>mHuJfY5kTe6PpNNKC9GGRiu^L31uG z$7v`*JknQHsYB!Tm_W{a32TM099djW%5e+j0Ve_ct}IM>XLF1Ap+YvcrLV=|CKo6S zb+9Nl3_YdKP6%Cxy@6TxZ>;4&nTneadr z_ES90ydCev)LV!dN=#(*f}|ZORFdvkYBni^aLbUk>BajeWIOcmHP#8S)*2U~QKI%S zyrLmtPqb&TphJ;>yAxri#;{uyk`JJqODDw%(Z=2`1uc}br^V%>j!gS)D*q*f_-qf8&D;W1dJgQMlaH5er zN2U<%Smb7==vE}dDI8K7cKz!vs^73o9f>2sgiTzWcwY|BMYHH5%Vn7#kiw&eItCqa zIkR2~Q}>X=Ar8W|^Ms41Fm8o6IB2_j60eOeBB1Br!boW7JnoeX6Gs)?7rW0^5psc- zjS16yb>dFn>KPOF;imD}e!enuIniFzv}n$m2#gCCv4jM#ArwlzZ$7@9&XkFxZ4n!V zj3dyiwW4Ki2QG{@i>yuZXQizw_OkZI^-3otXC{!(lUpJF33gI60ak;Uqitp74|B6I zgg{b=Iz}WkhCGj1M=hu4#Aw173YxIVbISaoc z-nLZC*6Tgivd5V`K%GxhBsp@SUU60-rfc$=wb>zdJzXS&-5(NRRodFk;Kxk!S(O(a0e7oY=E( zAyS;Ow?6Q&XA+cnkCb{28_1N8H#?J!*$MmIwLq^*T_9-z^&UE@A(z9oGYtFy6EZef LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/examples/integrate-with-next/src/modelina.ts b/examples/integrate-with-next/src/modelina.ts new file mode 100644 index 0000000000..876df205d3 --- /dev/null +++ b/examples/integrate-with-next/src/modelina.ts @@ -0,0 +1,86 @@ +import { OutputModel, TypeScriptGenerator } from '../../../'; + +const playgroundAsyncAPIDocument = { + asyncapi: '2.5.0', + info: { + title: 'Streetlights API', + version: '1.0.0', + description: + 'The Smartylighting Streetlights API allows you\nto remotely manage the city lights.\n', + license: { + name: 'Apache 2.0', + url: 'https://www.apache.org/licenses/LICENSE-2.0' + } + }, + servers: { + mosquitto: { + url: 'mqtt://test.mosquitto.org', + protocol: 'mqtt' + } + }, + channels: { + 'light/measured': { + publish: { + summary: + 'Inform about environmental lighting conditions for a particular streetlight.', + operationId: 'onLightMeasured', + message: { + name: 'LightMeasured', + payload: { + type: 'object', + $id: 'LightMeasured', + properties: { + id: { + type: 'integer', + minimum: 0, + description: 'Id of the streetlight.' + }, + lumens: { + type: 'integer', + minimum: 0, + description: 'Light intensity measured in lumens.' + }, + sentAt: { + type: 'string', + format: 'date-time', + description: 'Date and time when the message was sent.' + } + } + } + } + } + }, + 'turn/on': { + subscribe: { + summary: + 'Command a particular streetlight to turn the lights on or off.', + operationId: 'turnOn', + message: { + name: 'TurnOn', + payload: { + type: 'object', + $id: 'TurnOn', + properties: { + id: { + type: 'integer', + minimum: 0, + description: 'Id of the streetlight.' + }, + sentAt: { + type: 'string', + format: 'date-time', + description: 'Date and time when the message was sent.' + } + } + } + } + } + } + } +}; + +export function getGeneratedCode(): Promise { + const generator = new TypeScriptGenerator(); + const input = playgroundAsyncAPIDocument; + return generator.generateCompleteModels(input, { exportType: 'named' }); +} diff --git a/examples/integrate-with-next/src/pages/_app.tsx b/examples/integrate-with-next/src/pages/_app.tsx new file mode 100644 index 0000000000..2d19aeb1cc --- /dev/null +++ b/examples/integrate-with-next/src/pages/_app.tsx @@ -0,0 +1,6 @@ +import '@/styles/globals.css'; +import type { AppProps } from 'next/app'; + +export default function App({ Component, pageProps }: AppProps): any { + return ; +} diff --git a/examples/integrate-with-next/src/pages/_document.tsx b/examples/integrate-with-next/src/pages/_document.tsx new file mode 100644 index 0000000000..7bdd72a1ed --- /dev/null +++ b/examples/integrate-with-next/src/pages/_document.tsx @@ -0,0 +1,13 @@ +import { Html, Head, Main, NextScript } from 'next/document'; + +export default function Document(): any { + return ( + + + +
+ + + + ); +} diff --git a/examples/integrate-with-next/src/pages/index.tsx b/examples/integrate-with-next/src/pages/index.tsx new file mode 100644 index 0000000000..8f362a26f2 --- /dev/null +++ b/examples/integrate-with-next/src/pages/index.tsx @@ -0,0 +1,86 @@ +import { getGeneratedCode } from '../modelina'; +import Head from 'next/head'; +import styles from '@/styles/Home.module.css'; +import { GetServerSideProps, InferGetServerSidePropsType } from 'next'; + +export type GeneratedModel = { + name: string; + result: string; +} + +export type HomePageProps = { + models: GeneratedModel[] +} + +/** + * Use server side functions to retrieve the generated code from Modelina. + * + * If you need the user to provide inputs to the generation process + * you can use the context parameter: https://nextjs.org/docs/api-reference/data-fetching/get-server-side-props#context-parameter + * + * Or you can use something like Socket.io. + */ +export const getServerSideProps: GetServerSideProps = async () => { + try{ + const models = await getGeneratedCode(); + // Only return the relevant information that is needed. + const propsToReturn = models.map((model) : GeneratedModel => { + return { + result: model.result, + name: model.modelName + }; + }); + return { + props: { + models: propsToReturn + } + }; + } catch(e) { + console.error(e); + } + + return { + props: { + models: [] + } + }; +} + +function HomePage({ models }: InferGetServerSidePropsType): any { + const safeModels = models || []; + // Create a good representation of the models here + const codeModels = safeModels.map((model: GeneratedModel) => { + return ( +
+

Model: {model.name}

+
+
+            {model.result}
+          
+
+
+ ); + }); + + return ( + <> + + Modelina Next app + + + + +
+
+

Modelina generated code

+
+ {codeModels} +
+ + ); +} + +export default HomePage; diff --git a/examples/integrate-with-next/src/styles/Home.module.css b/examples/integrate-with-next/src/styles/Home.module.css new file mode 100644 index 0000000000..da45f6b839 --- /dev/null +++ b/examples/integrate-with-next/src/styles/Home.module.css @@ -0,0 +1,142 @@ +.main { + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + padding: 6rem; + min-height: 100vh; +} + +.description { + display: inherit; + justify-content: inherit; + align-items: inherit; + font-size: 0.85rem; + max-width: var(--max-width); + width: 100%; + z-index: 2; + font-family: var(--font-mono); +} + +.grid { + display: grid; + grid-template-columns: repeat(4, minmax(25%, auto)); + width: var(--max-width); + max-width: 100%; + border: 1px solid white; +} + +.center { + display: flex; + justify-content: center; + align-items: center; + position: relative; + padding: 4rem 0; +} + +.center::before { + background: var(--secondary-glow); + border-radius: 50%; + width: 480px; + height: 360px; + margin-left: -400px; +} + +.center::after { + background: var(--primary-glow); + width: 240px; + height: 180px; + z-index: -1; +} + +.center::before, +.center::after { + content: ''; + left: 50%; + position: absolute; + filter: blur(45px); + transform: translateZ(0); +} + +/* Mobile */ +@media (max-width: 700px) { + .content { + padding: 4rem; + } + + .grid { + grid-template-columns: 1fr; + margin-bottom: 120px; + max-width: 320px; + } + + .card { + padding: 1rem 2.5rem; + } + + .card h2 { + margin-bottom: 0.5rem; + } + + .center { + padding: 8rem 0 6rem; + } + + .center::before { + transform: none; + height: 300px; + } + + .description { + font-size: 0.8rem; + } + + .description a { + padding: 1rem; + } + + .description p, + .description div { + display: flex; + justify-content: center; + position: fixed; + width: 100%; + } + + .description p { + align-items: center; + inset: 0 0 auto; + padding: 2rem 1rem 1.4rem; + border-radius: 0; + border: none; + border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25); + background: linear-gradient( + to bottom, + rgba(var(--background-start-rgb), 1), + rgba(var(--callout-rgb), 0.5) + ); + background-clip: padding-box; + backdrop-filter: blur(24px); + } + + .description div { + align-items: flex-end; + pointer-events: none; + inset: auto 0 0; + padding: 2rem; + height: 200px; + background: linear-gradient( + to bottom, + transparent 0%, + rgb(var(--background-end-rgb)) 40% + ); + z-index: 1; + } +} + +/* Tablet and Smaller Desktop */ +@media (min-width: 701px) and (max-width: 1120px) { + .grid { + grid-template-columns: repeat(2, 50%); + } +} diff --git a/examples/integrate-with-next/src/styles/globals.css b/examples/integrate-with-next/src/styles/globals.css new file mode 100644 index 0000000000..d4f491e152 --- /dev/null +++ b/examples/integrate-with-next/src/styles/globals.css @@ -0,0 +1,107 @@ +:root { + --max-width: 1100px; + --border-radius: 12px; + --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono', + 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro', + 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace; + + --foreground-rgb: 0, 0, 0; + --background-start-rgb: 214, 219, 220; + --background-end-rgb: 255, 255, 255; + + --primary-glow: conic-gradient( + from 180deg at 50% 50%, + #16abff33 0deg, + #0885ff33 55deg, + #54d6ff33 120deg, + #0071ff33 160deg, + transparent 360deg + ); + --secondary-glow: radial-gradient( + rgba(255, 255, 255, 1), + rgba(255, 255, 255, 0) + ); + + --tile-start-rgb: 239, 245, 249; + --tile-end-rgb: 228, 232, 233; + --tile-border: conic-gradient( + #00000080, + #00000040, + #00000030, + #00000020, + #00000010, + #00000010, + #00000080 + ); + + --callout-rgb: 238, 240, 241; + --callout-border-rgb: 172, 175, 176; + --card-rgb: 180, 185, 188; + --card-border-rgb: 131, 134, 135; +} + +@media (prefers-color-scheme: dark) { + :root { + --foreground-rgb: 255, 255, 255; + --background-start-rgb: 0, 0, 0; + --background-end-rgb: 0, 0, 0; + + --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); + --secondary-glow: linear-gradient( + to bottom right, + rgba(1, 65, 255, 0), + rgba(1, 65, 255, 0), + rgba(1, 65, 255, 0.3) + ); + + --tile-start-rgb: 2, 13, 46; + --tile-end-rgb: 2, 5, 19; + --tile-border: conic-gradient( + #ffffff80, + #ffffff40, + #ffffff30, + #ffffff20, + #ffffff10, + #ffffff10, + #ffffff80 + ); + + --callout-rgb: 20, 20, 20; + --callout-border-rgb: 108, 108, 108; + --card-rgb: 100, 100, 100; + --card-border-rgb: 200, 200, 200; + } +} + +* { + box-sizing: border-box; + padding: 0; + margin: 0; +} + +html, +body { + max-width: 100vw; + overflow-x: hidden; +} + +body { + color: rgb(var(--foreground-rgb)); + background: linear-gradient( + to bottom, + transparent, + rgb(var(--background-end-rgb)) + ) + rgb(var(--background-start-rgb)); +} + +a { + color: inherit; + text-decoration: none; +} + +@media (prefers-color-scheme: dark) { + html { + color-scheme: dark; + } +} diff --git a/examples/integrate-with-next/tests/__snapshots__/index.test.tsx.snap b/examples/integrate-with-next/tests/__snapshots__/index.test.tsx.snap new file mode 100644 index 0000000000..08a18400b2 --- /dev/null +++ b/examples/integrate-with-next/tests/__snapshots__/index.test.tsx.snap @@ -0,0 +1,109 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Jest Snapshot testing suite Matches DOM Snapshot 1`] = ` +
+
+
+

+ Modelina generated code +

+
+
+

+ Model: + LightMeasured +

+
+
+          
+            
+class LightMeasured {
+  private _id?: number;
+  private _lumens?: number;
+  private _sentAt?: string;
+  private _additionalProperties?: Map<string, any>;
+
+  constructor(input: {
+    id?: number,
+    lumens?: number,
+    sentAt?: string,
+    additionalProperties?: Map<string, any>,
+  }) {
+    this._id = input.id;
+    this._lumens = input.lumens;
+    this._sentAt = input.sentAt;
+    this._additionalProperties = input.additionalProperties;
+  }
+
+  get id(): number | undefined { return this._id; }
+  set id(id: number | undefined) { this._id = id; }
+
+  get lumens(): number | undefined { return this._lumens; }
+  set lumens(lumens: number | undefined) { this._lumens = lumens; }
+
+  get sentAt(): string | undefined { return this._sentAt; }
+  set sentAt(sentAt: string | undefined) { this._sentAt = sentAt; }
+
+  get additionalProperties(): Map<string, any> | undefined { return this._additionalProperties; }
+  set additionalProperties(additionalProperties: Map<string, any> | undefined) { this._additionalProperties = additionalProperties; }
+}
+export { LightMeasured };
+          
+        
+
+
+
+

+ Model: + TurnOn +

+
+
+          
+            
+class TurnOn {
+  private _id?: number;
+  private _sentAt?: string;
+  private _additionalProperties?: Map<string, any>;
+
+  constructor(input: {
+    id?: number,
+    sentAt?: string,
+    additionalProperties?: Map<string, any>,
+  }) {
+    this._id = input.id;
+    this._sentAt = input.sentAt;
+    this._additionalProperties = input.additionalProperties;
+  }
+
+  get id(): number | undefined { return this._id; }
+  set id(id: number | undefined) { this._id = id; }
+
+  get sentAt(): string | undefined { return this._sentAt; }
+  set sentAt(sentAt: string | undefined) { this._sentAt = sentAt; }
+
+  get additionalProperties(): Map<string, any> | undefined { return this._additionalProperties; }
+  set additionalProperties(additionalProperties: Map<string, any> | undefined) { this._additionalProperties = additionalProperties; }
+}
+export { TurnOn };
+          
+        
+
+
+
+
+`; diff --git a/examples/integrate-with-next/tests/index.test.tsx b/examples/integrate-with-next/tests/index.test.tsx new file mode 100644 index 0000000000..72579ab38f --- /dev/null +++ b/examples/integrate-with-next/tests/index.test.tsx @@ -0,0 +1,16 @@ +import { render } from '@testing-library/react'; +import { ParsedUrlQuery } from 'querystring'; +import { GetServerSidePropsContext } from 'next'; +import HomePage, { HomePageProps, getServerSideProps } from '../src/pages/index'; + +describe('Jest Snapshot testing suite', () => { + it('Matches DOM Snapshot', async () => { + const context = { + params: { } as ParsedUrlQuery + }; + + const { props } = (await getServerSideProps(context as GetServerSidePropsContext)) as { props: HomePageProps}; + const { container } = render(HomePage(props)); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/examples/integrate-with-next/tsconfig.json b/examples/integrate-with-next/tsconfig.json new file mode 100644 index 0000000000..5efb28cfa2 --- /dev/null +++ b/examples/integrate-with-next/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "baseUrl": ".", + "paths": { + "@/pages/*": ["src/pages/*"], + "@/styles/*": ["src/styles/*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "types.d.ts"], + "exclude": ["node_modules"] +} diff --git a/examples/integrate-with-react/README.md b/examples/integrate-with-react/README.md index eac0264de8..598fdfb741 100644 --- a/examples/integrate-with-react/README.md +++ b/examples/integrate-with-react/README.md @@ -1,6 +1,6 @@ -# Generate JavaScript Models +# Integrate with React -A basic example to generate JavaScript data models +A basic example of how to integrate Modelina into React. ## How to run this example diff --git a/examples/integrate-with-react/package.json b/examples/integrate-with-react/package.json index 4a01b0263d..32c148d268 100644 --- a/examples/integrate-with-react/package.json +++ b/examples/integrate-with-react/package.json @@ -12,7 +12,7 @@ "web-vitals": "^2.1.4" }, "scripts": { - "install": "cd ../.. && npm i && npm run build", + "preinstall": "cd ../.. && npm i && npm run build", "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test --watchAll=false", diff --git a/examples/java-from-typescript-type/__snapshots__/index.spec.ts.snap b/examples/java-from-typescript-type/__snapshots__/index.spec.ts.snap index a1298eb0a0..fdbd9b2172 100644 --- a/examples/java-from-typescript-type/__snapshots__/index.spec.ts.snap +++ b/examples/java-from-typescript-type/__snapshots__/index.spec.ts.snap @@ -3,19 +3,19 @@ exports[`Should be able to generate Java model from a TypeScript type file and should log expected output to console 1`] = ` Array [ "public class InnerData { - private Double age; + private double age; private String name; - private Boolean free; + private boolean free; private Map additionalProperties; - public Double getAge() { return this.age; } - public void setAge(Double age) { this.age = age; } + public double getAge() { return this.age; } + public void setAge(double age) { this.age = age; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } - public Boolean getFree() { return this.free; } - public void setFree(Boolean free) { this.free = free; } + public boolean getFree() { return this.free; } + public void setFree(boolean free) { this.free = free; } public Map getAdditionalProperties() { return this.additionalProperties; } public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } diff --git a/examples/java-generate-jackson-annotation/__snapshots__/index.spec.ts.snap b/examples/java-generate-jackson-annotation/__snapshots__/index.spec.ts.snap index de017ac865..1d3f1d6fc0 100644 --- a/examples/java-generate-jackson-annotation/__snapshots__/index.spec.ts.snap +++ b/examples/java-generate-jackson-annotation/__snapshots__/index.spec.ts.snap @@ -4,9 +4,12 @@ exports[`Should be able to generate data models for jackson annotation and shoul Array [ "public class Root { @JsonProperty(\\"min_number_prop\\") + @JsonInclude(JsonInclude.Include.NON_NULL) private Double minNumberProp; @JsonProperty(\\"max_number_prop\\") + @JsonInclude(JsonInclude.Include.NON_NULL) private Double maxNumberProp; + @JsonInclude(JsonInclude.Include.NON_NULL) private Map additionalProperties; public Double getMinNumberProp() { return this.minNumberProp; } diff --git a/examples/java-generate-javax-constraint-annotation/__snapshots__/index.spec.ts.snap b/examples/java-generate-javax-constraint-annotation/__snapshots__/index.spec.ts.snap index 262569e5bf..486bfb8acd 100644 --- a/examples/java-generate-javax-constraint-annotation/__snapshots__/index.spec.ts.snap +++ b/examples/java-generate-javax-constraint-annotation/__snapshots__/index.spec.ts.snap @@ -5,10 +5,10 @@ Array [ "public class JavaxAnnotation { @NotNull @Min(0) - private Double minNumberProp; + private double minNumberProp; @NotNull @Max(99) - private Double maxNumberProp; + private double maxNumberProp; @Size(min=2, max=3) private Object[] arrayProp; @Pattern(regexp=\\"^I_\\") @@ -16,11 +16,11 @@ Array [ private String stringProp; private Map additionalProperties; - public Double getMinNumberProp() { return this.minNumberProp; } - public void setMinNumberProp(Double minNumberProp) { this.minNumberProp = minNumberProp; } + public double getMinNumberProp() { return this.minNumberProp; } + public void setMinNumberProp(double minNumberProp) { this.minNumberProp = minNumberProp; } - public Double getMaxNumberProp() { return this.maxNumberProp; } - public void setMaxNumberProp(Double maxNumberProp) { this.maxNumberProp = maxNumberProp; } + public double getMaxNumberProp() { return this.maxNumberProp; } + public void setMaxNumberProp(double maxNumberProp) { this.maxNumberProp = maxNumberProp; } public Object[] getArrayProp() { return this.arrayProp; } public void setArrayProp(Object[] arrayProp) { this.arrayProp = arrayProp; } diff --git a/examples/kotlin-change-collection-type/__snapshots__/index.spec.ts.snap b/examples/kotlin-change-collection-type/__snapshots__/index.spec.ts.snap index 987cdd0fbb..a3e350bc7d 100644 --- a/examples/kotlin-change-collection-type/__snapshots__/index.spec.ts.snap +++ b/examples/kotlin-change-collection-type/__snapshots__/index.spec.ts.snap @@ -3,7 +3,7 @@ exports[`Should be able to render collections in Kotlin as Array and should log expected output to console 1`] = ` Array [ "data class Root( - val email: Array, + val email: Array? = null, )", ] `; diff --git a/examples/kotlin-generate-javax-constraint-annotation/__snapshots__/index.spec.ts.snap b/examples/kotlin-generate-javax-constraint-annotation/__snapshots__/index.spec.ts.snap index 1337db614d..901e88b176 100644 --- a/examples/kotlin-generate-javax-constraint-annotation/__snapshots__/index.spec.ts.snap +++ b/examples/kotlin-generate-javax-constraint-annotation/__snapshots__/index.spec.ts.snap @@ -10,13 +10,13 @@ Array [ @get:Max(99) val maxNumberProp: Double, @get:Min(101) - val minNumberPropExclusive: Double, + val minNumberPropExclusive: Double? = null, @get:Size(min=2, max=3) - val arrayProp: List, + val arrayProp: List? = null, @get:Pattern(regexp=\\"^I_\\") @get:Size(min=3) - val stringProp: String, - val additionalProperties: Map, + val stringProp: String? = null, + val additionalProperties: Map? = null, )", ] `; diff --git a/examples/kotlin-generate-kdoc/__snapshots__/index.spec.ts.snap b/examples/kotlin-generate-kdoc/__snapshots__/index.spec.ts.snap index 1bb0756987..439c6c0082 100644 --- a/examples/kotlin-generate-kdoc/__snapshots__/index.spec.ts.snap +++ b/examples/kotlin-generate-kdoc/__snapshots__/index.spec.ts.snap @@ -14,10 +14,10 @@ Array [ * {\\"prop\\":\\"value\\"}, {\\"prop\\":\\"test\\"} */ data class KDoc( - val prop: String, - val enum: Enum, - val nodesc: String, - val additionalProperties: Map, + val prop: String? = null, + val enum: Enum? = null, + val nodesc: String? = null, + val additionalProperties: Map? = null, )", ] `; diff --git a/examples/meta-model/index.ts b/examples/meta-model/index.ts index b9a6a3873d..a4945620e1 100644 --- a/examples/meta-model/index.ts +++ b/examples/meta-model/index.ts @@ -7,8 +7,8 @@ import { } from '../../src'; const generator = new TypeScriptGenerator(); -const customModel = new ObjectModel('SomeName', undefined, {}); -const stringModel = new StringModel('test property name', undefined); +const customModel = new ObjectModel('SomeName', undefined, {}, {}); +const stringModel = new StringModel('test property name', undefined, {}); const propertyModel = new ObjectPropertyModel( stringModel.name, false, diff --git a/examples/rust-generate-crate/__snapshots__/index.spec.ts.snap b/examples/rust-generate-crate/__snapshots__/index.spec.ts.snap index 2ac9f282df..5ab2d64d68 100644 --- a/examples/rust-generate-crate/__snapshots__/index.spec.ts.snap +++ b/examples/rust-generate-crate/__snapshots__/index.spec.ts.snap @@ -1,6 +1,24 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Should be able to render Rust Models and should log expected output to console 1`] = ` +Array [ + "// Members represents a union of types: String, f64, bool +#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] +#[serde(untagged)] +pub enum Members { + #[serde(rename=\\"MembersOneOf0\\")] + MembersOneOf0(String), + #[serde(rename=\\"MembersOneOf1\\")] + MembersOneOf1(f64), + #[serde(rename=\\"MembersOneOf2\\")] + MembersOneOf2(bool), +} + +", +] +`; + +exports[`Should be able to render Rust Models and should log expected output to console 2`] = ` Array [ "// Address represents a Address model. #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] @@ -47,24 +65,6 @@ impl Address { ] `; -exports[`Should be able to render Rust Models and should log expected output to console 2`] = ` -Array [ - "// Members represents a union of types: String, f64, bool -#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] -#[serde(untagged)] -pub enum Members { - #[serde(rename=\\"MembersOneOf0\\")] - MembersOneOf0(String), - #[serde(rename=\\"MembersOneOf1\\")] - MembersOneOf1(f64), - #[serde(rename=\\"MembersOneOf2\\")] - MembersOneOf2(bool), -} - -", -] -`; - exports[`Should be able to render Rust Models and should log expected output to console 3`] = ` Array [ "// TupleType represents a TupleType model. diff --git a/modelina-website/scripts/build-examples.js b/modelina-website/scripts/build-examples.js index 08eb921d41..5074162b07 100644 --- a/modelina-website/scripts/build-examples.js +++ b/modelina-website/scripts/build-examples.js @@ -81,7 +81,7 @@ async function start() { let exampleDirs = await getDirectories(examplesDirPath); //Filter out any examples that either: - // 1. are impossible to show + // 1. are impossible to show (react and next examples) // 2. should not be shown exampleDirs = exampleDirs.filter((dir) => dir !== 'TEMPLATE' && dir !== 'integrate-with-react' && dir !== 'integrate-with-next'); const templateConfig = {}; @@ -112,7 +112,7 @@ async function start() { mainReadme = mainReadme.replace('', ''); mainReadme = mainReadme.replace('', ''); mainReadme = mainReadme.replace('- [integrate with React](?selectedExample=integrate-with-react/)', '- [integrate with React](https://github.com/asyncapi/modelina/tree/master/examples/integrate-with-react)'); - mainReadme = mainReadme.replace('- [integrate with Next](?selectedExample=integrate-with-next/)', '- [integrate with React](https://github.com/asyncapi/modelina/tree/master/examples/integrate-with-next)'); + mainReadme = mainReadme.replace('- [integrate with Next](?selectedExample=integrate-with-next/)', '- [integrate with Next](https://github.com/asyncapi/modelina/tree/master/examples/integrate-with-next)'); mainReadme = mainReadme.replace('- [TEMPLATE](?selectedExample=TEMPLATE)', '- [TEMPLATE](https://github.com/asyncapi/modelina/tree/master/examples/TEMPLATE)'); const readmePath = path.resolve(__dirname, '../config/examples_readme.json'); await writeFile(readmePath, JSON.stringify(mainReadme)) diff --git a/package-lock.json b/package-lock.json index 63a2eac6d3..5caa0d4092 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@asyncapi/modelina", - "version": "1.9.1", - "lockfileVersion": 2, + "version": "2.0.0-next.25", + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@asyncapi/modelina", - "version": "1.9.1", + "version": "2.0.0-next.25", "license": "Apache-2.0", "dependencies": { "@apidevtools/json-schema-ref-parser": "^9.0.9", @@ -17,36 +17,45 @@ "@asyncapi/raml-dt-schema-parser": "^4.0.4", "@swc/core": "^1.3.5", "@swc/jest": "^0.2.23", + "@types/node": "^20.3.3", "alterschema": "^1.1.2", "change-case": "^4.1.2", + "cross-env": "^7.0.3", "openapi-types": "9.3.0", - "typescript-json-schema": "^0.57.0" + "typescript-json-schema": "^0.58.1" }, "devDependencies": { "@asyncapi/parserV1": "npm:@asyncapi/parser@^1.17.2", - "@netlify/plugin-nextjs": "4.32.2", "@types/jest": "^27.0.2", - "@typescript-eslint/eslint-plugin": "^4.33.0", - "@typescript-eslint/parser": "^4.33.0", + "@typescript-eslint/eslint-plugin": "^6.7.5", + "@typescript-eslint/parser": "^6.7.5", "ajv": "^8.6.3", "concurrently": "^7.5.0", - "cross-env": "^7.0.3", - "eslint": "7.32.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-github": "^4.3.2", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-security": "^1.4.0", - "eslint-plugin-sonarjs": "^0.10.0", + "eslint": "^8.51.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-github": "^4.10.1", + "eslint-plugin-jest": "^27.2.1", + "eslint-plugin-prettier": "^5.0.1", + "eslint-plugin-security": "^1.7.1", + "eslint-plugin-sonarjs": "^0.19.0", "jest": "^27.2.5", "markdown-toc": "^1.2.0", - "puppeteer": "^16.0.0", "ts-jest": "^27.0.5", "ts-node": "^10.3.0", "typedoc": "^0.24.8", "typescript": "4.9.5" }, "engines": { - "node": ">=14" + "node": ">=18" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/@apidevtools/json-schema-ref-parser": { @@ -711,6 +720,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.15.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", @@ -784,24 +805,51 @@ "node": ">=12" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, "dependencies": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/ajv": { @@ -820,37 +868,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -863,13 +880,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@fastify/busboy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", - "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", + "node_modules/@eslint/js": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", "dev": true, "engines": { - "node": ">=14" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@fmvilas/pseudo-yaml-ast": { @@ -881,24 +898,43 @@ "yaml-ast-parser": "0.0.43" } }, + "node_modules/@github/browserslist-config": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@github/browserslist-config/-/browserslist-config-1.0.0.tgz", + "integrity": "sha512-gIhjdJp/c2beaIWWIlsXdqXVRUz3r2BxBCpfz/F3JXHvSAQ1paMYjLH+maEATtENg+k5eLV7gA+9yPp762ieuw==", + "dev": true + }, "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", + "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "node_modules/@hyperjump/json": { @@ -979,12 +1015,6 @@ "resolved": "https://registry.npmjs.org/just-curry-it/-/just-curry-it-3.2.1.tgz", "integrity": "sha512-Q8206k8pTY7krW32cdmPsP+DqqLgWx/hYPSj9/+7SYqSqz7UuwPbfSe07lQtvuuaVyiSJveXk0E5RydOuWwsEg==" }, - "node_modules/@ioredis/commands": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", - "dev": true - }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -1684,3081 +1714,2660 @@ "jsep": "^0.4.0||^1.0.0" } }, - "node_modules/@netlify/esbuild": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild/-/esbuild-0.14.39.tgz", - "integrity": "sha512-C3xpwdT2xw6SnSb+hLQoxjtikAKiz6BjQjzlIaysHDpGbmIcmUHZ/X+dyLtCqAvf15WNK5GSBZYOlpgcOE0WZA==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, - "optionalDependencies": { - "@netlify/esbuild-android-64": "0.14.39", - "@netlify/esbuild-android-arm64": "0.14.39", - "@netlify/esbuild-darwin-64": "0.14.39", - "@netlify/esbuild-darwin-arm64": "0.14.39", - "@netlify/esbuild-freebsd-64": "0.14.39", - "@netlify/esbuild-freebsd-arm64": "0.14.39", - "@netlify/esbuild-linux-32": "0.14.39", - "@netlify/esbuild-linux-64": "0.14.39", - "@netlify/esbuild-linux-arm": "0.14.39", - "@netlify/esbuild-linux-arm64": "0.14.39", - "@netlify/esbuild-linux-mips64le": "0.14.39", - "@netlify/esbuild-linux-ppc64le": "0.14.39", - "@netlify/esbuild-linux-riscv64": "0.14.39", - "@netlify/esbuild-linux-s390x": "0.14.39", - "@netlify/esbuild-netbsd-64": "0.14.39", - "@netlify/esbuild-openbsd-64": "0.14.39", - "@netlify/esbuild-sunos-64": "0.14.39", - "@netlify/esbuild-windows-32": "0.14.39", - "@netlify/esbuild-windows-64": "0.14.39", - "@netlify/esbuild-windows-arm64": "0.14.39" - } - }, - "node_modules/@netlify/esbuild-android-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", - "integrity": "sha512-azq+lsvjRsKLap8ubIwSJXGyknUACqYu5h98Fvyoh40Qk4QXIVKl16JIJ4s+B7jy2k9qblEc5c4nxdDA3aGbVA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/@netlify/esbuild-android-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", - "integrity": "sha512-WhIP7ePq4qMC1sxoaeB9SsJqSW6uzW7XDj/IuWl1l9r94nwxywU1sYdVLaF2mZr15njviazYjVr8x1d+ipwL3w==", - "cpu": [ - "arm64" - ], + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/@netlify/esbuild-darwin-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", - "integrity": "sha512-eF4GvLYiDxtcyjFT55+h+8c8A2HltjeMezCqkt3AQSgOdu1nhlvwbBhIdg2dyM6gKEaEm5hBtTbicEDSwsLodA==", - "cpu": [ - "x64" - ], + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/@netlify/esbuild-darwin-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", - "integrity": "sha512-b7rtnX/VtYwNbUCxs3eulrCWJ+u2YvqDcXiIV1ka+od+N0fTx+4RrVkVp1lha9L0wEJYK9J7UWZOMLMyd1ynRg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "node_modules/@openapi-contrib/openapi-schema-to-json-schema": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@openapi-contrib/openapi-schema-to-json-schema/-/openapi-schema-to-json-schema-3.2.0.tgz", + "integrity": "sha512-Gj6C0JwCr8arj0sYuslWXUBSP/KnUlEGnPW4qxlXvAl543oaNQgMgIgkQUA6vs5BCCvwTEiL8m/wdWzfl4UvSw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" } }, - "node_modules/@netlify/esbuild-freebsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", - "integrity": "sha512-XtusxDJt2hUKUdggbTFolMx0kJL2zEa4STI7YwpB+ukEWoW5rODZjiLZbqqYLcjDH8k4YwHaMxs103L8eButEQ==", - "cpu": [ - "x64" - ], + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "node_modules/@netlify/esbuild-freebsd-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", - "integrity": "sha512-A9XZKai+k6kfndCtN6Dh2usT28V0+OGxzFdZsANONPQiEUTrGZCgwcHWiVlVn7SeAwPR1tKZreTnvrfj8cj7hA==", - "cpu": [ - "arm64" - ], + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "dependencies": { + "type-detect": "4.0.8" } }, - "node_modules/@netlify/esbuild-linux-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", - "integrity": "sha512-ZQnqk/82YRvINY+aF+LlGfRZ19c5mH0jaxsO046GpIOPx6PcXHG8JJ2lg+vLJVe4zFPohxzabcYpwFuT4cg/GA==", - "cpu": [ - "ia32" - ], + "node_modules/@sinonjs/fake-timers": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz", + "integrity": "sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@sinonjs/commons": "^1.7.0" } }, - "node_modules/@netlify/esbuild-linux-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", - "integrity": "sha512-IQtswVw7GAKNX/3yV390wSfSXvMWy0d5cw8csAffwBk9gupftY2lzepK4Cn6uD/aqLt3Iku33FbHop/2nPGfQA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/@stoplight/better-ajv-errors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stoplight/better-ajv-errors/-/better-ajv-errors-1.0.3.tgz", + "integrity": "sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==", + "dependencies": { + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, "engines": { - "node": ">=12" + "node": "^12.20 || >= 14.13" + }, + "peerDependencies": { + "ajv": ">=8" } }, - "node_modules/@netlify/esbuild-linux-arm": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", - "integrity": "sha512-QdOzQniOed0Bz1cTC9TMMwvtAqKayYv66H4edJlbvElC81yJZF/c9XhmYWJ6P5g4nkChZubQ5RcQwTLmrFGexg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/@stoplight/json": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.20.1.tgz", + "integrity": "sha512-FXfud+uWgIj1xv6nUO9WnmgmnVikaxJcbtR4XQt4C42n5c2qua3U05Z/3B57hP5TJRSj+tpn9ID6/bFeyYYlEg==", + "dependencies": { + "@stoplight/ordered-object-literal": "^1.0.3", + "@stoplight/path": "^1.3.2", + "@stoplight/types": "^13.6.0", + "jsonc-parser": "~2.2.1", + "lodash": "^4.17.21", + "safe-stable-stringify": "^1.1" + }, "engines": { - "node": ">=12" + "node": ">=8.3.0" } }, - "node_modules/@netlify/esbuild-linux-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", - "integrity": "sha512-4Jie4QV6pWWuGN7TAshNMGbdTA9+VbRkv3rPIxhgK5gBfmsAV1yRKsumE4Y77J0AZNRiOriyoec4zc1qkmI3zg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/@stoplight/json-ref-readers": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@stoplight/json-ref-readers/-/json-ref-readers-1.2.2.tgz", + "integrity": "sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==", + "dependencies": { + "node-fetch": "^2.6.0", + "tslib": "^1.14.1" + }, "engines": { - "node": ">=12" + "node": ">=8.3.0" } }, - "node_modules/@netlify/esbuild-linux-mips64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", - "integrity": "sha512-Htozxr95tw4tSd86YNbCLs1eoYQzNu/cHpzFIkuJoztZueUhl8XpRvBdob7n3kEjW1gitLWAIn8XUwSt+aJ1Tg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "node_modules/@stoplight/json-ref-readers/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/@netlify/esbuild-linux-ppc64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", - "integrity": "sha512-tFy0ufWIdjeuk1rPHee00TZlhr9OSF00Ufb4ROFyt2ArKuMSkWRJuDgx6MtZcAnCIN4cybo/xWl3MKTM+scnww==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/@stoplight/json-ref-resolver": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@stoplight/json-ref-resolver/-/json-ref-resolver-3.1.5.tgz", + "integrity": "sha512-uaKLITor7UF+JBtI84zs3aOWM0L79zp7w9TrBTwPtx5SLbaQQ4HadDKgX5yhFOLMApLdhwhiftF4c0GFanOxGg==", + "dependencies": { + "@stoplight/json": "^3.17.0", + "@stoplight/path": "^1.3.2", + "@stoplight/types": "^12.3.0 || ^13.0.0", + "@types/urijs": "^1.19.19", + "dependency-graph": "~0.11.0", + "fast-memoize": "^2.5.2", + "immer": "^9.0.6", + "lodash": "^4.17.21", + "tslib": "^2.3.1", + "urijs": "^1.19.11" + }, "engines": { - "node": ">=12" + "node": ">=8.3.0" } }, - "node_modules/@netlify/esbuild-linux-riscv64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", - "integrity": "sha512-ZzfKvwIxL7wQnYbVFpyNW0wotnLoKageUEM57RbjekesJoNQnqUR6Usm+LDZoB8iRsI58VX1IxnstP0cX8vOHw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "node_modules/@stoplight/json/node_modules/safe-stable-stringify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", + "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" }, - "node_modules/@netlify/esbuild-linux-s390x": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", - "integrity": "sha512-yjC0mFwnuMRoh0WcF0h71MF71ytZBFEQQTRdgiGT0+gbC4UApBqnTkJdLx32RscBKi9skbMChiJ748hDJou6FA==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/@stoplight/ordered-object-literal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.4.tgz", + "integrity": "sha512-OF8uib1jjDs5/cCU+iOVy+GJjU3X7vk/qJIkIJFqwmlJKrrtijFmqwbu8XToXrwTYLQTP+Hebws5gtZEmk9jag==", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@netlify/esbuild-netbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", - "integrity": "sha512-mIq4znOoz3YfTVdv3sIWfR4Zx5JgMnT4srlhC5KYVHibhxvyDdin5txldYXmR4Zv4dZd6DSuWFsn441aUegHeA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], + "node_modules/@stoplight/path": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@stoplight/path/-/path-1.3.2.tgz", + "integrity": "sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@netlify/esbuild-openbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", - "integrity": "sha512-+t6QdzJCngH19hV7ClpFAeFDI2ko/HNcFbiNwaXTMVLB3hWi1sJtn+fzZck5HfzN4qsajAVqZq4nwX69SSt25A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "node_modules/@stoplight/spectral-core": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.16.1.tgz", + "integrity": "sha512-zPTM/OpjUySMRLPx6ZYy9Gtw+Rkuwg1/gQTKWta+AaJjVTHrNznYQ05gFLYjWwD/LGJMdjwE2IMi7T+Ntef+kw==", + "dependencies": { + "@stoplight/better-ajv-errors": "1.0.3", + "@stoplight/json": "~3.20.1", + "@stoplight/path": "1.3.2", + "@stoplight/spectral-parsers": "^1.0.0", + "@stoplight/spectral-ref-resolver": "^1.0.0", + "@stoplight/spectral-runtime": "^1.0.0", + "@stoplight/types": "~13.6.0", + "@types/es-aggregate-error": "^1.0.2", + "@types/json-schema": "^7.0.11", + "ajv": "^8.6.0", + "ajv-errors": "~3.0.0", + "ajv-formats": "~2.1.0", + "es-aggregate-error": "^1.0.7", + "jsonpath-plus": "7.1.0", + "lodash": "~4.17.21", + "lodash.topath": "^4.5.2", + "minimatch": "3.1.2", + "nimma": "0.2.2", + "pony-cause": "^1.0.0", + "simple-eval": "1.0.0", + "tslib": "^2.3.0" + }, "engines": { - "node": ">=12" + "node": "^12.20 || >= 14.13" } }, - "node_modules/@netlify/esbuild-sunos-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", - "integrity": "sha512-HLfXG6i2p3wyyyWHeeP4ShGDJ1zRMnf9YLJLe2ezv2KqvcKw/Un/m/FBuDW1p13oSUO7ShISMzgc1dw1GGBEOQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], + "node_modules/@stoplight/spectral-core/node_modules/@stoplight/types": { + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.6.0.tgz", + "integrity": "sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" + }, "engines": { - "node": ">=12" + "node": "^12.20 || >=14.13" } }, - "node_modules/@netlify/esbuild-windows-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", - "integrity": "sha512-ZpSQcKbVSCU3ln7mHpsL/5dWsUqCNdTnC5YAArnaOwdrlIunrsbo5j4MOZRRcGExb2uvTc/rb+D3mlGb8j1rkA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], + "node_modules/@stoplight/spectral-core/node_modules/jsonpath-plus": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.1.0.tgz", + "integrity": "sha512-gTaNRsPWO/K2KY6MrqaUFClF9kmuM6MFH5Dhg1VYDODgFbByw1yb7xu3hrViE/sz+dGOeMWgCzwUwQtAnCTE9g==", "engines": { - "node": ">=12" + "node": ">=12.0.0" } }, - "node_modules/@netlify/esbuild-windows-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", - "integrity": "sha512-I3gCdO8+6IDhT4Y1ZmV4o2Gg0oELv7N4kCcE4kqclz10fWHNjf19HQNHyBJe0AWnFV5ZfT154VVD31dqgwpgFw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], + "node_modules/@stoplight/spectral-formats": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-formats/-/spectral-formats-1.5.0.tgz", + "integrity": "sha512-VskkdU3qBSvI1dfJ79ysjvTssfNlbA6wrf/XkXK6iTyjfIVqOAWVtjypTb2U95tN/X8IjIBBhNWtZ4tNVZilrA==", + "dependencies": { + "@stoplight/json": "^3.17.0", + "@stoplight/spectral-core": "^1.8.0", + "@types/json-schema": "^7.0.7", + "tslib": "^2.3.1" + }, "engines": { "node": ">=12" } }, - "node_modules/@netlify/esbuild-windows-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", - "integrity": "sha512-WX52W8U1lsfWcz6NWoSpDs57lgiiMHN23seq8G2bvxzGS/tvYD3dxVLLW5UPoKSnFDyVQT7b6Zkt6AkBten1yQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], + "node_modules/@stoplight/spectral-functions": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-functions/-/spectral-functions-1.7.2.tgz", + "integrity": "sha512-f+61/FtIkQeIo+a269CeaeqjpyRsgDyIk6DGr7iS4hyuk1PPk7Uf6MNRDs9FEIBh7CpdEJ+HSHbMLwgpymWTIw==", + "dependencies": { + "@stoplight/better-ajv-errors": "1.0.3", + "@stoplight/json": "^3.17.1", + "@stoplight/spectral-core": "^1.7.0", + "@stoplight/spectral-formats": "^1.0.0", + "@stoplight/spectral-runtime": "^1.1.0", + "ajv": "^8.6.3", + "ajv-draft-04": "~1.0.0", + "ajv-errors": "~3.0.0", + "ajv-formats": "~2.1.0", + "lodash": "~4.17.21", + "tslib": "^2.3.0" + }, "engines": { "node": ">=12" } }, - "node_modules/@netlify/functions": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-1.4.0.tgz", - "integrity": "sha512-gy7ULTIRroc2/jyFVGx1djCmmBMVisIwrvkqggq5B6iDcInRSy2Tpkm+V5C63hKJVkNRskKWtLQKm9ecCaQTjA==", - "dev": true, + "node_modules/@stoplight/spectral-parsers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-parsers/-/spectral-parsers-1.0.2.tgz", + "integrity": "sha512-ZQXknJ+BM5Re4Opj4cgVlHgG2qyOk/wznKJq3Vf1qsBEg2CNzN0pJmSB0deRqW0kArqm44qpb8c+cz3F2rgMtw==", "dependencies": { - "is-promise": "^4.0.0" + "@stoplight/json": "~3.20.1", + "@stoplight/types": "^13.6.0", + "@stoplight/yaml": "~4.2.3", + "tslib": "^2.3.1" }, "engines": { - "node": ">=8.3.0" - } - }, - "node_modules/@netlify/ipx": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@netlify/ipx/-/ipx-1.4.0.tgz", - "integrity": "sha512-Ibqg1W41EVMHNT/W6JSDUyxjhcxsbEL9vL9ZaNjn9tVKnDYxJ8JqRTwSbzfns+K+M3FLqoC4PLW32qW+vT1pKQ==", - "dev": true, - "dependencies": { - "@netlify/functions": "^1.4.0", - "etag": "^1.8.1", - "fs-extra": "^11.0.0", - "ipx": "^0.9.11", - "micromatch": "^4.0.5", - "mkdirp": "^1.0.4", - "murmurhash": "^2.0.0", - "node-fetch": "^2.0.0", - "ufo": "^1.0.0", - "unstorage": "^1.0.0" + "node": ">=12" } }, - "node_modules/@netlify/ipx/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, + "node_modules/@stoplight/spectral-ref-resolver": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-ref-resolver/-/spectral-ref-resolver-1.0.3.tgz", + "integrity": "sha512-pj+bH4SH8hcWlnV787WD7P0/En7LA3EfZMvG1JUGMW/7bFd9AaZZXNkh5j0ve8qnPlwP8F4SH/2Cnr1tXOXCVw==", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@stoplight/json-ref-readers": "1.2.2", + "@stoplight/json-ref-resolver": "~3.1.5", + "@stoplight/spectral-runtime": "^1.1.2", + "dependency-graph": "0.11.0", + "tslib": "^2.3.1" }, "engines": { - "node": ">=14.14" + "node": ">=12" } }, - "node_modules/@netlify/plugin-nextjs": { - "version": "4.32.2", - "resolved": "https://registry.npmjs.org/@netlify/plugin-nextjs/-/plugin-nextjs-4.32.2.tgz", - "integrity": "sha512-xvFPrF3JPokYDlB+JmBmpsQR1S2HDYpMdTeTG4mbhdEfj+Bet+rLRUhuF1i6B5GVggj1bMzlTHgovCGjDxaZ/Q==", - "dev": true, + "node_modules/@stoplight/spectral-runtime": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-runtime/-/spectral-runtime-1.1.2.tgz", + "integrity": "sha512-fr5zRceXI+hrl82yAVoME+4GvJie8v3wmOe9tU+ZLRRNonizthy8qDi0Z/z4olE+vGreSDcuDOZ7JjRxFW5kTw==", "dependencies": { - "@netlify/esbuild": "0.14.39", - "@netlify/functions": "^1.4.0", - "@netlify/ipx": "^1.3.3", - "@vercel/node-bridge": "^2.1.0", - "chalk": "^4.1.2", - "destr": "^1.1.1", - "execa": "^5.1.1", - "follow-redirects": "^1.15.2", - "fs-extra": "^10.0.0", - "globby": "^11.0.4", - "merge-stream": "^2.0.0", - "moize": "^6.1.0", - "node-fetch": "^2.6.6", - "node-stream-zip": "^1.15.0", - "outdent": "^0.8.0", - "p-limit": "^3.1.0", - "pathe": "^0.2.0", - "pretty-bytes": "^5.6.0", - "regexp-tree": "^0.1.24", - "semver": "^7.3.5", - "slash": "^3.0.0", - "tiny-glob": "^0.2.9" + "@stoplight/json": "^3.17.0", + "@stoplight/path": "^1.3.2", + "@stoplight/types": "^12.3.0", + "abort-controller": "^3.0.0", + "lodash": "^4.17.21", + "node-fetch": "^2.6.7", + "tslib": "^2.3.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=12" } }, - "node_modules/@netlify/plugin-nextjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/@stoplight/spectral-runtime/node_modules/@stoplight/types": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-12.5.0.tgz", + "integrity": "sha512-dwqYcDrGmEyUv5TWrDam5TGOxU72ufyQ7hnOIIDdmW5ezOwZaBFoR5XQ9AsH49w7wgvOqB2Bmo799pJPWnpCbg==", "dependencies": { - "color-convert": "^2.0.1" + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@netlify/plugin-nextjs/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@stoplight/types": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.9.0.tgz", + "integrity": "sha512-o3sg/5aYpnT8jZITjXqBz6MGwuW/RQxjXlcU57bKorCustgBH+TvcI9QFNJSeg4fomAwQo6rk+xmhf93Xf8OzQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^12.20 || >=14.13" } }, - "node_modules/@netlify/plugin-nextjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/@stoplight/yaml": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.2.3.tgz", + "integrity": "sha512-Mx01wjRAR9C7yLMUyYFTfbUf5DimEpHMkRDQ1PKLe9dfNILbgdxyrncsOXM3vCpsQ1Hfj4bPiGl+u4u6e9Akqw==", "dependencies": { - "color-name": "~1.1.4" + "@stoplight/ordered-object-literal": "^1.0.1", + "@stoplight/types": "^13.0.0", + "@stoplight/yaml-ast-parser": "0.0.48", + "tslib": "^2.2.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=10.8" } }, - "node_modules/@netlify/plugin-nextjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@netlify/plugin-nextjs/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/@stoplight/yaml-ast-parser": { + "version": "0.0.48", + "resolved": "https://registry.npmjs.org/@stoplight/yaml-ast-parser/-/yaml-ast-parser-0.0.48.tgz", + "integrity": "sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg==" }, - "node_modules/@netlify/plugin-nextjs/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" + "node_modules/@swc/core": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.5.tgz", + "integrity": "sha512-H5YNI9rCViudhEmu9g/Yc8ai6k5/pfy+ItYns0SZ+iSZen+bgWeGb+9p4KRQhzNNC8Lfkfw+ENHzSwZltpWG6Q==", + "hasInstallScript": true, + "bin": { + "swcx": "run_swcx.js" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-android-arm-eabi": "1.3.5", + "@swc/core-android-arm64": "1.3.5", + "@swc/core-darwin-arm64": "1.3.5", + "@swc/core-darwin-x64": "1.3.5", + "@swc/core-freebsd-x64": "1.3.5", + "@swc/core-linux-arm-gnueabihf": "1.3.5", + "@swc/core-linux-arm64-gnu": "1.3.5", + "@swc/core-linux-arm64-musl": "1.3.5", + "@swc/core-linux-x64-gnu": "1.3.5", + "@swc/core-linux-x64-musl": "1.3.5", + "@swc/core-win32-arm64-msvc": "1.3.5", + "@swc/core-win32-ia32-msvc": "1.3.5", + "@swc/core-win32-x64-msvc": "1.3.5" } }, - "node_modules/@netlify/plugin-nextjs/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.5.tgz", + "integrity": "sha512-zW1tfS000RlHcqKp1HJK5vXBR0/AHw74qzOK0uh/G1cTczFDX2Hep4IuOxSJ1+7Zx9oFEOKSEY0lPXYbDAlF2w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, + "node_modules/@swc/jest": { + "version": "0.2.23", + "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.23.tgz", + "integrity": "sha512-ZLj17XjHbPtNsgqjm83qizENw05emLkKGu3WuPUttcy9hkngl0/kcc7fDbcSBpADS0GUtsO+iKPjZFWVAtJSlA==", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@jest/create-cache-key-function": "^27.4.2", + "jsonc-parser": "^3.2.0" }, "engines": { - "node": ">= 8" + "npm": ">= 7.0.0" + }, + "peerDependencies": { + "@swc/core": "*" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@swc/jest/node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" + }, + "node_modules/@types/babel__core": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", "dev": true, - "engines": { - "node": ">= 8" + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "@babel/types": "^7.0.0" } }, - "node_modules/@openapi-contrib/openapi-schema-to-json-schema": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@openapi-contrib/openapi-schema-to-json-schema/-/openapi-schema-to-json-schema-3.2.0.tgz", - "integrity": "sha512-Gj6C0JwCr8arj0sYuslWXUBSP/KnUlEGnPW4qxlXvAl543oaNQgMgIgkQUA6vs5BCCvwTEiL8m/wdWzfl4UvSw==", + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "dependencies": { - "type-detect": "4.0.8" + "@babel/types": "^7.3.0" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz", - "integrity": "sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==", + "node_modules/@types/es-aggregate-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/es-aggregate-error/-/es-aggregate-error-1.0.2.tgz", + "integrity": "sha512-erqUpFXksaeR2kejKnhnjZjbFxUpGZx4Z7ydNL9ie8tEhXPiZTsLeUDJ6aR1F8j5wWUAtOAQWUqkc7givBJbBA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", "dev": true, "dependencies": { - "@sinonjs/commons": "^1.7.0" + "@types/node": "*" } }, - "node_modules/@stoplight/better-ajv-errors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stoplight/better-ajv-errors/-/better-ajv-errors-1.0.3.tgz", - "integrity": "sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==", + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dependencies": { - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - }, - "engines": { - "node": "^12.20 || >= 14.13" - }, - "peerDependencies": { - "ajv": ">=8" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/@stoplight/json": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.20.1.tgz", - "integrity": "sha512-FXfud+uWgIj1xv6nUO9WnmgmnVikaxJcbtR4XQt4C42n5c2qua3U05Z/3B57hP5TJRSj+tpn9ID6/bFeyYYlEg==", + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dependencies": { - "@stoplight/ordered-object-literal": "^1.0.3", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^13.6.0", - "jsonc-parser": "~2.2.1", - "lodash": "^4.17.21", - "safe-stable-stringify": "^1.1" - }, - "engines": { - "node": ">=8.3.0" + "@types/istanbul-lib-report": "*" } }, - "node_modules/@stoplight/json-ref-readers": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@stoplight/json-ref-readers/-/json-ref-readers-1.2.2.tgz", - "integrity": "sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==", + "node_modules/@types/jest": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz", + "integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==", + "dev": true, "dependencies": { - "node-fetch": "^2.6.0", - "tslib": "^1.14.1" - }, - "engines": { - "node": ">=8.3.0" + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" } }, - "node_modules/@stoplight/json-ref-readers/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/@types/json-schema": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==" }, - "node_modules/@stoplight/json-ref-resolver": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@stoplight/json-ref-resolver/-/json-ref-resolver-3.1.5.tgz", - "integrity": "sha512-uaKLITor7UF+JBtI84zs3aOWM0L79zp7w9TrBTwPtx5SLbaQQ4HadDKgX5yhFOLMApLdhwhiftF4c0GFanOxGg==", + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.8.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.4.tgz", + "integrity": "sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==", "dependencies": { - "@stoplight/json": "^3.17.0", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^12.3.0 || ^13.0.0", - "@types/urijs": "^1.19.19", - "dependency-graph": "~0.11.0", - "fast-memoize": "^2.5.2", - "immer": "^9.0.6", - "lodash": "^4.17.21", - "tslib": "^2.3.1", - "urijs": "^1.19.11" - }, - "engines": { - "node": ">=8.3.0" + "undici-types": "~5.25.1" } }, - "node_modules/@stoplight/json/node_modules/safe-stable-stringify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", - "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" + "node_modules/@types/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", + "dev": true }, - "node_modules/@stoplight/ordered-object-literal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.4.tgz", - "integrity": "sha512-OF8uib1jjDs5/cCU+iOVy+GJjU3X7vk/qJIkIJFqwmlJKrrtijFmqwbu8XToXrwTYLQTP+Hebws5gtZEmk9jag==", - "engines": { - "node": ">=8" - } + "node_modules/@types/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", + "dev": true }, - "node_modules/@stoplight/path": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@stoplight/path/-/path-1.3.2.tgz", - "integrity": "sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==", - "engines": { - "node": ">=8" + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/urijs": { + "version": "1.19.19", + "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.19.tgz", + "integrity": "sha512-FDJNkyhmKLw7uEvTxx5tSXfPeQpO0iy73Ry+PmYZJvQy0QIWX8a7kJ4kLWRf+EbTPJEPDSgPXHaM7pzr5lmvCg==" + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dependencies": { + "@types/yargs-parser": "*" } }, - "node_modules/@stoplight/spectral-core": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.16.1.tgz", - "integrity": "sha512-zPTM/OpjUySMRLPx6ZYy9Gtw+Rkuwg1/gQTKWta+AaJjVTHrNznYQ05gFLYjWwD/LGJMdjwE2IMi7T+Ntef+kw==", + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.5.tgz", + "integrity": "sha512-JhtAwTRhOUcP96D0Y6KYnwig/MRQbOoLGXTON2+LlyB/N35SP9j1boai2zzwXb7ypKELXMx3DVk9UTaEq1vHEw==", + "dev": true, "dependencies": { - "@stoplight/better-ajv-errors": "1.0.3", - "@stoplight/json": "~3.20.1", - "@stoplight/path": "1.3.2", - "@stoplight/spectral-parsers": "^1.0.0", - "@stoplight/spectral-ref-resolver": "^1.0.0", - "@stoplight/spectral-runtime": "^1.0.0", - "@stoplight/types": "~13.6.0", - "@types/es-aggregate-error": "^1.0.2", - "@types/json-schema": "^7.0.11", - "ajv": "^8.6.0", - "ajv-errors": "~3.0.0", - "ajv-formats": "~2.1.0", - "es-aggregate-error": "^1.0.7", - "jsonpath-plus": "7.1.0", - "lodash": "~4.17.21", - "lodash.topath": "^4.5.2", - "minimatch": "3.1.2", - "nimma": "0.2.2", - "pony-cause": "^1.0.0", - "simple-eval": "1.0.0", - "tslib": "^2.3.0" + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/type-utils": "6.7.5", + "@typescript-eslint/utils": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.20 || >= 14.13" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@stoplight/spectral-core/node_modules/@stoplight/types": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.6.0.tgz", - "integrity": "sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz", + "integrity": "sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==", + "dev": true, "dependencies": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5" }, "engines": { - "node": "^12.20 || >=14.13" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@stoplight/spectral-core/node_modules/jsonpath-plus": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.1.0.tgz", - "integrity": "sha512-gTaNRsPWO/K2KY6MrqaUFClF9kmuM6MFH5Dhg1VYDODgFbByw1yb7xu3hrViE/sz+dGOeMWgCzwUwQtAnCTE9g==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.5.tgz", + "integrity": "sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==", + "dev": true, "engines": { - "node": ">=12.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@stoplight/spectral-formats": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-formats/-/spectral-formats-1.5.0.tgz", - "integrity": "sha512-VskkdU3qBSvI1dfJ79ysjvTssfNlbA6wrf/XkXK6iTyjfIVqOAWVtjypTb2U95tN/X8IjIBBhNWtZ4tNVZilrA==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz", + "integrity": "sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==", + "dev": true, "dependencies": { - "@stoplight/json": "^3.17.0", - "@stoplight/spectral-core": "^1.8.0", - "@types/json-schema": "^7.0.7", - "tslib": "^2.3.1" + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=12" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@stoplight/spectral-functions": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-functions/-/spectral-functions-1.7.2.tgz", - "integrity": "sha512-f+61/FtIkQeIo+a269CeaeqjpyRsgDyIk6DGr7iS4hyuk1PPk7Uf6MNRDs9FEIBh7CpdEJ+HSHbMLwgpymWTIw==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.5.tgz", + "integrity": "sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==", + "dev": true, "dependencies": { - "@stoplight/better-ajv-errors": "1.0.3", - "@stoplight/json": "^3.17.1", - "@stoplight/spectral-core": "^1.7.0", - "@stoplight/spectral-formats": "^1.0.0", - "@stoplight/spectral-runtime": "^1.1.0", - "ajv": "^8.6.3", - "ajv-draft-04": "~1.0.0", - "ajv-errors": "~3.0.0", - "ajv-formats": "~2.1.0", - "lodash": "~4.17.21", - "tslib": "^2.3.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/typescript-estree": "6.7.5", + "semver": "^7.5.4" }, "engines": { - "node": ">=12" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/@stoplight/spectral-parsers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-parsers/-/spectral-parsers-1.0.2.tgz", - "integrity": "sha512-ZQXknJ+BM5Re4Opj4cgVlHgG2qyOk/wznKJq3Vf1qsBEg2CNzN0pJmSB0deRqW0kArqm44qpb8c+cz3F2rgMtw==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz", + "integrity": "sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==", + "dev": true, "dependencies": { - "@stoplight/json": "~3.20.1", - "@stoplight/types": "^13.6.0", - "@stoplight/yaml": "~4.2.3", - "tslib": "^2.3.1" + "@typescript-eslint/types": "6.7.5", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=12" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@stoplight/spectral-ref-resolver": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-ref-resolver/-/spectral-ref-resolver-1.0.3.tgz", - "integrity": "sha512-pj+bH4SH8hcWlnV787WD7P0/En7LA3EfZMvG1JUGMW/7bFd9AaZZXNkh5j0ve8qnPlwP8F4SH/2Cnr1tXOXCVw==", + "node_modules/@typescript-eslint/parser": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.5.tgz", + "integrity": "sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==", + "dev": true, "dependencies": { - "@stoplight/json-ref-readers": "1.2.2", - "@stoplight/json-ref-resolver": "~3.1.5", - "@stoplight/spectral-runtime": "^1.1.2", - "dependency-graph": "0.11.0", - "tslib": "^2.3.1" + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/typescript-estree": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4" }, "engines": { - "node": ">=12" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@stoplight/spectral-runtime": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-runtime/-/spectral-runtime-1.1.2.tgz", - "integrity": "sha512-fr5zRceXI+hrl82yAVoME+4GvJie8v3wmOe9tU+ZLRRNonizthy8qDi0Z/z4olE+vGreSDcuDOZ7JjRxFW5kTw==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz", + "integrity": "sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==", + "dev": true, "dependencies": { - "@stoplight/json": "^3.17.0", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^12.3.0", - "abort-controller": "^3.0.0", - "lodash": "^4.17.21", - "node-fetch": "^2.6.7", - "tslib": "^2.3.1" + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5" }, "engines": { - "node": ">=12" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@stoplight/spectral-runtime/node_modules/@stoplight/types": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-12.5.0.tgz", - "integrity": "sha512-dwqYcDrGmEyUv5TWrDam5TGOxU72ufyQ7hnOIIDdmW5ezOwZaBFoR5XQ9AsH49w7wgvOqB2Bmo799pJPWnpCbg==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.5.tgz", + "integrity": "sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz", + "integrity": "sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==", + "dev": true, "dependencies": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=8" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@stoplight/types": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.9.0.tgz", - "integrity": "sha512-o3sg/5aYpnT8jZITjXqBz6MGwuW/RQxjXlcU57bKorCustgBH+TvcI9QFNJSeg4fomAwQo6rk+xmhf93Xf8OzQ==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz", + "integrity": "sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==", + "dev": true, "dependencies": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" + "@typescript-eslint/types": "6.7.5", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.20 || >=14.13" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@stoplight/yaml": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.2.3.tgz", - "integrity": "sha512-Mx01wjRAR9C7yLMUyYFTfbUf5DimEpHMkRDQ1PKLe9dfNILbgdxyrncsOXM3vCpsQ1Hfj4bPiGl+u4u6e9Akqw==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, "dependencies": { - "@stoplight/ordered-object-literal": "^1.0.1", - "@stoplight/types": "^13.0.0", - "@stoplight/yaml-ast-parser": "0.0.48", - "tslib": "^2.2.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { - "node": ">=10.8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@stoplight/yaml-ast-parser": { - "version": "0.0.48", - "resolved": "https://registry.npmjs.org/@stoplight/yaml-ast-parser/-/yaml-ast-parser-0.0.48.tgz", - "integrity": "sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg==" - }, - "node_modules/@swc/core": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.5.tgz", - "integrity": "sha512-H5YNI9rCViudhEmu9g/Yc8ai6k5/pfy+ItYns0SZ+iSZen+bgWeGb+9p4KRQhzNNC8Lfkfw+ENHzSwZltpWG6Q==", - "hasInstallScript": true, - "bin": { - "swcx": "run_swcx.js" + "node_modules/@typescript-eslint/type-utils": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.5.tgz", + "integrity": "sha512-Gs0qos5wqxnQrvpYv+pf3XfcRXW6jiAn9zE/K+DlmYf6FcpxeNYN0AIETaPR7rHO4K2UY+D0CIbDP9Ut0U4m1g==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.7.5", + "@typescript-eslint/utils": "6.7.5", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=10" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/swc" + "url": "https://opencollective.com/typescript-eslint" }, - "optionalDependencies": { - "@swc/core-android-arm-eabi": "1.3.5", - "@swc/core-android-arm64": "1.3.5", - "@swc/core-darwin-arm64": "1.3.5", - "@swc/core-darwin-x64": "1.3.5", - "@swc/core-freebsd-x64": "1.3.5", - "@swc/core-linux-arm-gnueabihf": "1.3.5", - "@swc/core-linux-arm64-gnu": "1.3.5", - "@swc/core-linux-arm64-musl": "1.3.5", - "@swc/core-linux-x64-gnu": "1.3.5", - "@swc/core-linux-x64-musl": "1.3.5", - "@swc/core-win32-arm64-msvc": "1.3.5", - "@swc/core-win32-ia32-msvc": "1.3.5", - "@swc/core-win32-x64-msvc": "1.3.5" - } - }, - "node_modules/@swc/core-android-arm-eabi": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.3.5.tgz", - "integrity": "sha512-gIq3fuXiRMtVhTf2ZQ9Z6JeuqvL30JOM0L+S6zAZD4v8lpGJ1ejpw7rghpAsGSG9Qc9oaNjx5yayTg3z/EtBzA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "dependencies": { - "@swc/wasm": "1.2.122" + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@swc/core-android-arm64": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.3.5.tgz", - "integrity": "sha512-SsRA6AhNZK8YXBbv7DAp5Zgv4tOWvPJlEBoOZ0uLIot7oYghWvSVs3jOgEzJSbQLU5U7ad6Q6boBdg0Q/kb2Ew==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz", + "integrity": "sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==", + "dev": true, "dependencies": { - "@swc/wasm": "1.2.130" + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5" }, "engines": { - "node": ">=10" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@swc/core-android-arm64/node_modules/@swc/wasm": { - "version": "1.2.130", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.2.130.tgz", - "integrity": "sha512-rNcJsBxS70+pv8YUWwf5fRlWX6JoY/HJc25HD/F8m6Kv7XhJdqPPMhyX6TKkUBPAG7TWlZYoxa+rHAjPy4Cj3Q==", - "optional": true - }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.5.tgz", - "integrity": "sha512-Jyem+f3/aTKJTRzyvdSfYS358jo7245g7nWmwmhQMgZI3/z2VcYHpIIYOi+dgsBaMRevK9tbsW0TSx805Njzjw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.5.tgz", + "integrity": "sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==", + "dev": true, "engines": { - "node": ">=10" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.5.tgz", - "integrity": "sha512-zW1tfS000RlHcqKp1HJK5vXBR0/AHw74qzOK0uh/G1cTczFDX2Hep4IuOxSJ1+7Zx9oFEOKSEY0lPXYbDAlF2w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz", + "integrity": "sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, "engines": { - "node": ">=10" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@swc/core-freebsd-x64": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.3.5.tgz", - "integrity": "sha512-H2f0NkfqYDC6+vJO6wSBwiGnnR/cK9AQx574izPw3Utmb28zC+FOPAY63QLA/orNHjwHa6B6AuVDNwYuKUrRHQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.5.tgz", + "integrity": "sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==", + "dev": true, "dependencies": { - "@swc/wasm": "1.2.130" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/typescript-estree": "6.7.5", + "semver": "^7.5.4" }, "engines": { - "node": ">=10" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/@swc/core-freebsd-x64/node_modules/@swc/wasm": { - "version": "1.2.130", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.2.130.tgz", - "integrity": "sha512-rNcJsBxS70+pv8YUWwf5fRlWX6JoY/HJc25HD/F8m6Kv7XhJdqPPMhyX6TKkUBPAG7TWlZYoxa+rHAjPy4Cj3Q==", - "optional": true - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.5.tgz", - "integrity": "sha512-PvuhjUCsNQDtwSSXWmmF6tU8jnAcFVRZt6bBNltvPW48oHNmIq9lEZ+hJTSPvqqxLvi9W7HG5ADzsTAaciKeRw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz", + "integrity": "sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==", + "dev": true, "dependencies": { - "@swc/wasm": "1.2.130" + "@typescript-eslint/types": "6.7.5", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=10" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@swc/core-linux-arm-gnueabihf/node_modules/@swc/wasm": { - "version": "1.2.130", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.2.130.tgz", - "integrity": "sha512-rNcJsBxS70+pv8YUWwf5fRlWX6JoY/HJc25HD/F8m6Kv7XhJdqPPMhyX6TKkUBPAG7TWlZYoxa+rHAjPy4Cj3Q==", - "optional": true - }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.5.tgz", - "integrity": "sha512-NQ1LVrIvAsSwSoKO6DzHQMxzpvo17v/2LREqBiaNuCwDyYg2yFdgUdVW4FcbrdBK4MurRA2HFZZ/rt5DqAg3+A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.5.tgz", - "integrity": "sha512-DDcM3ciJRBBjyN7qqw/AEEFh61YjiuxOcZ5SqYR0wyfroqOFX1+5JtCGJ9mU2MZ4Vfmxb1v5IFoQ3nfgJDcd8g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.5.tgz", - "integrity": "sha512-AJR0J+b3jMmXuIxqhgrX/7vworHjciUPZuoyY2OrIhSXwMPVbWfb72h9oQdMbARfodTFLVJGQqy2Pij67+C0GQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.5.tgz", - "integrity": "sha512-+Ig/rJ/GOZyQgCO72PFR+oJYUee0zQRsd6fpeuE66rn8P07a26WY1ZfMGw8miWcURccjDgAc1XCwVn6wa/OTCw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.5.tgz", - "integrity": "sha512-9Go5jiGWToT+00/J26E92n/JIHqG2wcaw79Z1+Z7GHrrm5TeL0VMyTMGLMeGFvtje/j+Lv0y4XKed+dKnRvc5w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dependencies": { - "@swc/wasm": "1.2.130" + "event-target-shim": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=6.5" } }, - "node_modules/@swc/core-win32-arm64-msvc/node_modules/@swc/wasm": { - "version": "1.2.130", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.2.130.tgz", - "integrity": "sha512-rNcJsBxS70+pv8YUWwf5fRlWX6JoY/HJc25HD/F8m6Kv7XhJdqPPMhyX6TKkUBPAG7TWlZYoxa+rHAjPy4Cj3Q==", - "optional": true - }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.5.tgz", - "integrity": "sha512-AIeD5uKVkvXTAbKAwyPFubFrXmQR77PNun59DHZWtRpxgOcHqK6xug9DfUSfc2zMw/ftEe9kNruUUS96023jfQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "dependencies": { - "@swc/wasm": "1.2.130" + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=10" + "node": ">=0.4.0" } }, - "node_modules/@swc/core-win32-ia32-msvc/node_modules/@swc/wasm": { - "version": "1.2.130", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.2.130.tgz", - "integrity": "sha512-rNcJsBxS70+pv8YUWwf5fRlWX6JoY/HJc25HD/F8m6Kv7XhJdqPPMhyX6TKkUBPAG7TWlZYoxa+rHAjPy4Cj3Q==", - "optional": true + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.5.tgz", - "integrity": "sha512-GtrAkUo5xVTogwTDH9Zms7LELdTKyRll+K9o87P+YOEizCUvA0BPE1N4mu+ZqsI/dv56g2N4gNCD8RVLH3HekQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=0.4.0" } }, - "node_modules/@swc/jest": { - "version": "0.2.23", - "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.23.tgz", - "integrity": "sha512-ZLj17XjHbPtNsgqjm83qizENw05emLkKGu3WuPUttcy9hkngl0/kcc7fDbcSBpADS0GUtsO+iKPjZFWVAtJSlA==", + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, "dependencies": { - "@jest/create-cache-key-function": "^27.4.2", - "jsonc-parser": "^3.2.0" + "debug": "4" }, "engines": { - "npm": ">= 7.0.0" - }, - "peerDependencies": { - "@swc/core": "*" + "node": ">= 6.0.0" } }, - "node_modules/@swc/jest/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" - }, - "node_modules/@swc/wasm": { - "version": "1.2.122", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.2.122.tgz", - "integrity": "sha512-sM1VCWQxmNhFtdxME+8UXNyPNhxNu7zdb6ikWpz0YKAQQFRGT5ThZgJrubEpah335SUToNg8pkdDF7ibVCjxbQ==", - "optional": true + "node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" + "node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } }, - "node_modules/@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==" + "node_modules/ajv-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", + "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", + "peerDependencies": { + "ajv": "^8.0.1" + } }, - "node_modules/@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } }, - "node_modules/@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" + "node_modules/ajv/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "node_modules/@types/babel__core": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", - "dev": true, + "node_modules/alterschema": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/alterschema/-/alterschema-1.1.2.tgz", + "integrity": "sha512-X1g2v1qzYDjpfRUujIjHD1Dt8Mkw9oarfy721cRfKHKXk/Zfh4j5m3gjfOm/f8+f0FZa6c1f2yNFk47RrUKxAg==", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "@hyperjump/json-schema": "0.23.2", + "json-e": "^4.4.3", + "lodash": "^4.17.21", + "object-hash": "^3.0.0" + }, + "bin": { + "alterschema": "bindings/node/cli.js" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { - "@babel/types": "^7.0.0" + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "node_modules/ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", "dev": true, "dependencies": { - "@babel/types": "^7.3.0" + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/es-aggregate-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/es-aggregate-error/-/es-aggregate-error-1.0.2.tgz", - "integrity": "sha512-erqUpFXksaeR2kejKnhnjZjbFxUpGZx4Z7ydNL9ie8tEhXPiZTsLeUDJ6aR1F8j5wWUAtOAQWUqkc7givBJbBA==", - "dependencies": { - "@types/node": "*" + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "node_modules/ansi-sequence-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz", + "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==", + "dev": true + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "@types/node": "*" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "dependencies": { - "@types/istanbul-lib-report": "*" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@types/jest": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz", - "integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==", - "dev": true, - "dependencies": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.2.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", - "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==" - }, - "node_modules/@types/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", - "dev": true + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, - "node_modules/@types/stack-utils": { + "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/urijs": { - "version": "1.19.19", - "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.19.tgz", - "integrity": "sha512-FDJNkyhmKLw7uEvTxx5tSXfPeQpO0iy73Ry+PmYZJvQy0QIWX8a7kJ4kLWRf+EbTPJEPDSgPXHaM7pzr5lmvCg==" - }, - "node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, - "optional": true, "dependencies": { - "@types/node": "*" + "dequal": "^2.0.3" } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=8" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@vercel/node-bridge": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@vercel/node-bridge/-/node-bridge-2.2.2.tgz", - "integrity": "sha512-haGBC8noyA5BfjCRXRH+VIkHCDVW5iD5UX24P2nOdilwUxI4qWsattS/co8QBGq64XsNLRAMdM5pQUE3zxkF9Q==", + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "node_modules/astring": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.4.tgz", + "integrity": "sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/autolinker": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz", + "integrity": "sha512-zQAFO1Dlsn69eXaO6+7YZc+v84aquQKbwpzCE3L0stj56ERn9hutFxPopViLjo9G+rWwjozRhgS5KJ25Xy19cQ==", + "dev": true, "dependencies": { - "event-target-shim": "^5.0.0" + "gulp-header": "^1.7.1" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/avsc": { + "version": "5.7.7", + "resolved": "https://registry.npmjs.org/avsc/-/avsc-5.7.7.tgz", + "integrity": "sha512-9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==", "engines": { - "node": ">=6.5" + "node": ">=0.11" } }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/axe-core": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz", + "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=4" } }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", "dev": true, "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" + "dequal": "^2.0.3" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/babel-jest": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.5.tgz", + "integrity": "sha512-GC9pWCcitBhSuF7H3zl0mftoKizlswaF0E3qi+rPL417wKkCB0d+Sjjb0OfXvxj7gWiBf497ldgRMii68Xz+2g==", "dev": true, + "dependencies": { + "@jest/transform": "^27.2.5", + "@jest/types": "^27.2.5", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^27.2.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@babel/core": "^7.8.0" } }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=0.4.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "debug": "4" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ajv-draft-04": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", - "peerDependencies": { - "ajv": "^8.5.0" + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "engines": { + "node": ">=7.0.0" } }, - "node_modules/ajv-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", - "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", - "peerDependencies": { - "ajv": "^8.0.1" - } + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/ajv/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/alterschema": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/alterschema/-/alterschema-1.1.2.tgz", - "integrity": "sha512-X1g2v1qzYDjpfRUujIjHD1Dt8Mkw9oarfy721cRfKHKXk/Zfh4j5m3gjfOm/f8+f0FZa6c1f2yNFk47RrUKxAg==", + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "@hyperjump/json-schema": "0.23.2", - "json-e": "^4.4.3", - "lodash": "^4.17.21", - "object-hash": "^3.0.0" + "has-flag": "^4.0.0" }, - "bin": { - "alterschema": "bindings/node/cli.js" + "engines": { + "node": ">=8" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "node_modules/babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/babel-plugin-jest-hoist": { + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", + "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", "dev": true, "dependencies": { - "type-fest": "^0.21.3" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", + "node_modules/babel-preset-jest": { + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", + "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", "dev": true, "dependencies": { - "ansi-wrap": "0.1.0" + "babel-plugin-jest-hoist": "^27.2.0", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=0.6" } }, - "node_modules/ansi-sequence-parser": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz", - "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==", - "dev": true - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "big-integer": "^1.6.44" }, "engines": { - "node": ">=4" + "node": ">= 5.10.0" } }, - "node_modules/ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "fill-range": "^7.0.1" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "github", + "url": "https://github.com/sponsors/ai" } - ] - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, + ], "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" }, - "engines": { - "node": ">= 0.4" + "bin": { + "browserslist": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, "engines": { - "node": ">=8" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "fast-json-stable-stringify": "2.x" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 6" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/astring": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.4.tgz", - "integrity": "sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==", - "bin": { - "astring": "bin/astring" + "dependencies": { + "node-int64": "^0.4.0" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/autolinker": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz", - "integrity": "sha512-zQAFO1Dlsn69eXaO6+7YZc+v84aquQKbwpzCE3L0stj56ERn9hutFxPopViLjo9G+rWwjozRhgS5KJ25Xy19cQ==", + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", "dev": true, "dependencies": { - "gulp-header": "^1.7.1" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "run-applescript": "^5.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/avsc": { - "version": "5.7.7", - "resolved": "https://registry.npmjs.org/avsc/-/avsc-5.7.7.tgz", - "integrity": "sha512-9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==", - "engines": { - "node": ">=0.11" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-jest": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.5.tgz", - "integrity": "sha512-GC9pWCcitBhSuF7H3zl0mftoKizlswaF0E3qi+rPL417wKkCB0d+Sjjb0OfXvxj7gWiBf497ldgRMii68Xz+2g==", - "dev": true, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dependencies": { - "@jest/transform": "^27.2.5", - "@jest/types": "^27.2.5", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.2.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6" } }, - "node_modules/babel-jest/node_modules/chalk": { + "node_modules/camel-case": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=6" } }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/caniuse-lite": { + "version": "1.0.30001547", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz", + "integrity": "sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==", "dev": true, - "engines": { - "node": ">=8" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" } }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "dev": true, + "node_modules/change-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", - "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node_modules/ci-info": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", + "dev": true + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/babel-preset-jest": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", - "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-error-fragment": { + "version": "0.0.230", + "resolved": "https://registry.npmjs.org/code-error-fragment/-/code-error-fragment-0.0.230.tgz", + "integrity": "sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==", "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^27.2.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">= 4" + } + }, + "node_modules/coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", + "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", + "dev": true, + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": ">=0.8.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dependencies": { + "color-name": "1.1.3" + } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "optional": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, + "engines": [ + "node >= 0.8" + ], "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" + "safe-buffer": "~5.1.0" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true + "node_modules/concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } }, - "node_modules/browserslist": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", - "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", + "node_modules/concurrently": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", + "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001265", - "electron-to-chromium": "^1.3.867", - "escalade": "^3.1.1", - "node-releases": "^2.0.0", - "picocolors": "^1.0.0" + "chalk": "^4.1.0", + "date-fns": "^2.29.1", + "lodash": "^4.17.21", + "rxjs": "^7.0.0", + "shell-quote": "^1.7.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^17.3.1" }, "bin": { - "browserslist": "cli.js" + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": "^12.20.0 || ^14.13.0 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "fast-json-stable-stringify": "2.x" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "node-int64": "^0.4.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "node_modules/concurrently/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/concurrently/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/concurrently/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" + "node": ">=8" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001370", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz", - "integrity": "sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g==", + "node_modules/concurrently/node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/capital-case": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" + "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" + }, + "engines": { + "node": ">=12" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/concurrently/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/change-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", + "node_modules/constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", "dependencies": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" + "tslib": "^2.0.3", + "upper-case": "^2.0.2" } }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "engines": { - "node": ">=10" + "node": ">= 0.6" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "safe-buffer": "~5.1.1" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "node_modules/ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, - "node_modules/clipboardy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", - "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", - "dev": true, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dependencies": { - "arch": "^2.2.0", - "execa": "^5.1.1", - "is-wsl": "^2.2.0" + "cross-spawn": "^7.0.1" }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true }, - "node_modules/code-error-fragment": { - "version": "0.0.230", - "resolved": "https://registry.npmjs.org/code-error-fragment/-/code-error-fragment-0.0.230.tgz", - "integrity": "sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==", + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, "engines": { - "node": ">= 4" + "node": ">=10" } }, - "node_modules/coffee-script": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", - "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", - "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", + "node_modules/data-urls/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, - "bin": { - "cake": "bin/cake", - "coffee": "bin/coffee" + "dependencies": { + "punycode": "^2.1.1" }, "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, "engines": { - "node": ">=12.5.0" + "node": ">=10.4" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "node_modules/date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" } }, - "node_modules/color/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "ms": "2.1.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", "dev": true, - "engines": [ - "node >= 0.8" - ], "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/default-browser/node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "node_modules/default-browser/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true, - "dependencies": { - "source-map": "^0.6.1" + "engines": { + "node": ">=14.18.0" } }, - "node_modules/concurrently": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", - "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", + "node_modules/default-browser/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "date-fns": "^2.29.1", - "lodash": "^4.17.21", - "rxjs": "^7.0.0", - "shell-quote": "^1.7.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^17.3.1" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, "engines": { - "node": "^12.20.0 || ^14.13.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/concurrently/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/default-browser/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/concurrently/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/default-browser/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/default-browser/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/concurrently/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/default-browser/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/concurrently/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", "dependencies": { - "color-name": "~1.1.4" + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" } }, - "node_modules/concurrently/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concurrently/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dependencies": { - "has-flag": "^4.0.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/concurrently/node_modules/yargs": { - "version": "17.6.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", - "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, - "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" - }, "engines": { - "node": ">=12" + "node": ">=0.4.0" } }, - "node_modules/concurrently/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "engines": { - "node": ">=12" - } - }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "dev": true - }, - "node_modules/constant-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" + "node": ">= 0.6.0" } }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" + "engines": { + "node": ">=8" } }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/cookie-es": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-0.5.0.tgz", - "integrity": "sha512-RyZrFi6PNpBFbIaQjXDlFIhFVqV42QeKSZX1yQIl6ihImq6vcHNGMtqQ/QzY3RMPuYSkvsRwtnt5M9NeYxKt0g==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "node_modules/diacritics-map": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/diacritics-map/-/diacritics-map-0.1.0.tgz", + "integrity": "sha512-3omnDTYrGigU0i4cJjvaKwD52B8aoqyX/NEIkukFFkogBemsIbhSa1O414fpTp5nuszJG6lvQ5vBvDVNCbSsaQ==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" + "node": ">=0.8.0" } }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "dependencies": { - "node-fetch": "2.6.7" + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/diff-sequences": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, "engines": { - "node": ">= 8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/cssfilter": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", - "dev": true - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "dependencies": { - "cssom": "~0.3.6" + "path-type": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=10" + "node": ">=6.0.0" } }, - "node_modules/data-urls/node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, "dependencies": { - "punycode": "^2.1.1" + "webidl-conversions": "^5.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/data-urls/node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", "dev": true, "engines": { - "node": ">=10.4" - } - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/date-fns": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", - "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", - "dev": true, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/defu": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.2.tgz", - "integrity": "sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==", - "dev": true - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/destr": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/destr/-/destr-1.2.2.tgz", - "integrity": "sha512-lrbCJwD9saUQrqUfXvl6qoM+QN3W7tLV5pAOs+OqOmopCCz/JkE05MHedJR1xfk4IAnZuJXPVuN5+7jNA2ZCiA==", - "dev": true - }, - "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/devtools-protocol": { - "version": "0.0.1019158", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz", - "integrity": "sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ==", - "dev": true - }, - "node_modules/diacritics-map": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/diacritics-map/-/diacritics-map-0.1.0.tgz", - "integrity": "sha512-3omnDTYrGigU0i4cJjvaKwD52B8aoqyX/NEIkukFFkogBemsIbhSa1O414fpTp5nuszJG6lvQ5vBvDVNCbSsaQ==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", - "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=8" } }, "node_modules/dot-case": { @@ -4771,9 +4380,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.3.868", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.868.tgz", - "integrity": "sha512-kZYCHqwJ1ctGrYDlOcWQH+/AftAm/KD4lEnLDNwS0kKwx1x6dU4zv+GuDjsPPOGn/2TjnKBaZjDyjXaoix0q/A==", + "version": "1.4.551", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.551.tgz", + "integrity": "sha512-/Ng/W/kFv7wdEHYzxdK7Cv0BHEGSkSB3M0Ssl8Ndr1eMiYeas/+Mv4cNaDqamqWx6nd2uQZfPz6g25z25M/sdw==", "dev": true }, "node_modules/emittery": { @@ -4793,56 +4402,50 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/es-abstract": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz", - "integrity": "sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.6", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -4871,102 +4474,26 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-aggregate-error/node_modules/es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-aggregate-error/node_modules/internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, - "node_modules/es-aggregate-error/node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-aggregate-error/node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "has": "^1.0.3" } }, "node_modules/es-to-primitive": { @@ -5085,66 +4612,63 @@ } }, "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", + "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.51.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -5262,6 +4786,18 @@ "node": ">=4" } }, + "node_modules/eslint-plugin-escompat": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.4.0.tgz", + "integrity": "sha512-ufTPv8cwCxTNoLnTZBFTQ5SxU2w7E7wiMIS7PSxsgP1eAxFjtSaoZ80LRn64hI8iYziE6kJG6gX/ZCJVxh48Bg==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.0" + }, + "peerDependencies": { + "eslint": ">=5.14.1" + } + }, "node_modules/eslint-plugin-eslint-comments": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", @@ -5297,50 +4833,34 @@ } }, "node_modules/eslint-plugin-github": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-4.3.2.tgz", - "integrity": "sha512-hlj7fGLuxornhaWtUYXHO+dOP1R7YyGgLRuN0qYioPMt861YOkbJJemW5M9z/EHSDv9RBzD9H4AGn9raGJ+lTg==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-4.10.1.tgz", + "integrity": "sha512-1AqQBockOM+m0ZUpwfjWtX0lWdX5cRi/hwJnSNvXoOmz/Hh+ULH6QFz6ENWueTWjoWpgPv0af3bj+snps6o4og==", "dev": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "^4.33.0", - "@typescript-eslint/parser": "^4.33.0", + "@github/browserslist-config": "^1.0.0", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", + "aria-query": "^5.3.0", "eslint-config-prettier": ">=8.0.0", + "eslint-plugin-escompat": "^3.3.3", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-filenames": "^1.3.2", "eslint-plugin-i18n-text": "^1.0.1", - "eslint-plugin-import": "^2.24.2", - "eslint-plugin-no-only-tests": "^2.6.0", - "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-no-only-tests": "^3.0.0", + "eslint-plugin-prettier": "^5.0.0", "eslint-rule-documentation": ">=1.0.0", - "prettier": "^2.2.1", + "jsx-ast-utils": "^3.3.2", + "prettier": "^3.0.0", "svg-element-attributes": "^1.3.1" }, "bin": { "eslint-ignore-errors": "bin/eslint-ignore-errors.js" }, "peerDependencies": { - "eslint": "^7.23.0" - } - }, - "node_modules/eslint-plugin-github/node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } + "eslint": "^8.0.1" } }, "node_modules/eslint-plugin-i18n-text": { @@ -5406,55 +4926,133 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/eslint-plugin-jest": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.4.2.tgz", + "integrity": "sha512-3Nfvv3wbq2+PZlRTf2oaAWXWwbdBejFRBR2O8tAO67o+P8zno+QGbcDYaAXODlreXVg+9gvWhKKmG2rgfb8GEg==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^5.10.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0", + "eslint": "^7.0.0 || ^8.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-no-only-tests": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-2.6.0.tgz", - "integrity": "sha512-T9SmE/g6UV1uZo1oHAqOvL86XWl7Pl2EpRpnLI8g/bkJu+h7XBCB+1LnubRZ2CUQXj805vh4/CYZdnqtVaEo2Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.1.0.tgz", + "integrity": "sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==", "dev": true, "engines": { - "node": ">=4.0.0" + "node": ">=5.0.0" } }, "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", "dev": true, "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" }, "engines": { - "node": ">=12.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" }, "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, "eslint-config-prettier": { "optional": true } } }, "node_modules/eslint-plugin-security": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", - "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz", + "integrity": "sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==", "dev": true, "dependencies": { - "safe-regex": "^1.1.0" + "safe-regex": "^2.1.1" } }, "node_modules/eslint-plugin-sonarjs": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.10.0.tgz", - "integrity": "sha512-FBRIBmWQh2UAfuLSnuYEfmle33jIup9hfkR0X8pkfjeCKNpHUG8qyZI63ahs3aw8CJrv47QJ9ccdK3ZxKH016A==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.19.0.tgz", + "integrity": "sha512-6+s5oNk5TFtVlbRxqZN7FIGmjdPCYQKaTzFPmqieCmsU1kBYDzndTeQav0xtQNwZJWu5awWfTGe8Srq9xFOGnw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14" }, "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/eslint-rule-documentation": { @@ -5479,40 +5077,16 @@ "node": ">=8.0.0" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/ajv": { @@ -5546,15 +5120,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5601,28 +5166,57 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, "node_modules/eslint/node_modules/has-flag": { @@ -5634,35 +5228,46 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">= 4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "yocto-queue": "^0.1.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5681,26 +5286,32 @@ } }, "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/espree/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, "node_modules/esprima": { @@ -5716,9 +5327,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -5728,9 +5339,9 @@ } }, "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" @@ -5749,9 +5360,9 @@ } }, "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" @@ -5775,15 +5386,6 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -5876,15 +5478,6 @@ "node": ">=0.10.0" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/expect": { "version": "27.2.5", "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.5.tgz", @@ -5926,62 +5519,21 @@ "node": ">=0.10.0" } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-equals": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-3.0.3.tgz", - "integrity": "sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -5991,7 +5543,7 @@ "micromatch": "^4.0.4" }, "engines": { - "node": ">=8" + "node": ">=8.6.0" } }, "node_modules/fast-json-stable-stringify": { @@ -6033,15 +5585,6 @@ "bser": "2.1.1" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -6098,26 +5641,6 @@ "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -6149,32 +5672,6 @@ "node": ">= 6" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-memo": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fs-memo/-/fs-memo-1.2.0.tgz", - "integrity": "sha512-YEexkCpL4j03jn5SxaMHqcO6IuWuqm8JFUYhyCep7Ao89JIYmB8xoKhK7zXXJ9cCaNXpyNH5L3QtAmoxjoHW2w==", - "dev": true - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -6200,14 +5697,14 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -6216,12 +5713,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -6248,12 +5739,13 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -6269,15 +5761,6 @@ "node": ">=8.0.0" } }, - "node_modules/get-port-please": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-2.6.1.tgz", - "integrity": "sha512-4PDSrL6+cuMM1xs6w36ZIkaKzzE0xzfVBCfebHIJ3FE8iB9oic/ECwPw3iNiD4h1AoJ5XLLBhEviFAVrZsDC5A==", - "dev": true, - "dependencies": { - "fs-memo": "^1.2.0" - } - }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -6305,12 +5788,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "dev": true - }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -6343,9 +5820,9 @@ } }, "node_modules/globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -6357,18 +5834,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globalthis": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", @@ -6383,23 +5848,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" }, "engines": { @@ -6409,12 +5868,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -6438,6 +5891,12 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/gray-matter": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-2.1.1.tgz", @@ -6528,21 +5987,6 @@ "xtend": "~4.0.1" } }, - "node_modules/h3": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.6.4.tgz", - "integrity": "sha512-uoDNeaoeDRwWBtwwi4siZ6l5sBmDJpnpcBssuAbvsaPBonl8vP7Ym4tFPe+tAvGM0GbUoC24wYcloCG+J9hqmA==", - "dev": true, - "dependencies": { - "cookie-es": "^0.5.0", - "defu": "^6.1.2", - "destr": "^1.2.2", - "iron-webcrypto": "^0.6.0", - "radix3": "^1.0.1", - "ufo": "^1.1.1", - "uncrypto": "^0.1.2" - } - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -6645,16 +6089,6 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/http-shutdown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", - "integrity": "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -6689,44 +6123,15 @@ "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" } }, - "node_modules/image-meta": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.1.1.tgz", - "integrity": "sha512-+oXiHwOEPr1IE5zY0tcBLED/CYcre15J4nwL50x3o0jxWqEkyjrusiKP3YSU+tr9fvJp33ZcP5Gpj2295g3aEw==", - "dev": true, - "engines": { - "node": ">=10.18.0" - } - }, "node_modules/immer": { "version": "9.0.19", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz", @@ -6803,18 +6208,12 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -6822,92 +6221,13 @@ "node": ">= 0.4" } }, - "node_modules/ioredis": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.1.tgz", - "integrity": "sha512-C+IBcMysM6v52pTLItYMeV4Hz7uriGtoJdz7SSBDX6u+zwSYGirLdQh3L7t/OItWITcw3gTFMjJReYUwS4zihg==", - "dev": true, - "dependencies": { - "@ioredis/commands": "^1.1.1", - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.4", - "denque": "^2.1.0", - "lodash.defaults": "^4.2.0", - "lodash.isarguments": "^3.1.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ioredis" - } - }, - "node_modules/ip-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", - "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ipx": { - "version": "0.9.11", - "resolved": "https://registry.npmjs.org/ipx/-/ipx-0.9.11.tgz", - "integrity": "sha512-/wsBt7hV8rvNR6O4kwgOUAhtm0F/M/mXaolXot/Bz7fdOD+W7i9OtWuoASWv1PFwwtOunhZGaoCx8BOpSdG2VQ==", - "dev": true, - "dependencies": { - "consola": "^2.15.3", - "defu": "^6.1.0", - "destr": "^1.1.1", - "etag": "^1.8.1", - "image-meta": "^0.1.1", - "listhen": "^0.2.15", - "ohmyfetch": "^0.4.18", - "pathe": "^0.3.5", - "sharp": "^0.30.7", - "ufo": "^0.8.5", - "xss": "^1.0.14" - }, - "bin": { - "ipx": "bin/ipx.mjs" - } - }, - "node_modules/ipx/node_modules/pathe": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.3.9.tgz", - "integrity": "sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g==", - "dev": true - }, - "node_modules/ipx/node_modules/ufo": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-0.8.6.tgz", - "integrity": "sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==", - "dev": true - }, - "node_modules/iron-webcrypto": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-0.6.0.tgz", - "integrity": "sha512-WYgEQttulX/+JTv1BTJFYY3OsAb+ZnCuA53IjppZMyiRsVdGeEuZ/k4fJrg77Rzn0pp9/PgWtXUF+5HndDA5SQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/brc-dd" - } - }, "node_modules/is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "is-typed-array": "^1.1.10" }, "funding": { @@ -6925,18 +6245,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -7069,6 +6377,39 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -7103,18 +6444,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "dev": true - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -7182,15 +6526,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -7237,8 +6577,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "2.1.0", @@ -8957,10444 +8296,106 @@ "engines": { "node": ">=10" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/jest-cli": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.5.tgz", - "integrity": "sha512-XzfcOXi5WQrXqFYsDxq5RDOKY4FNIgBgvgf3ZBz4e/j5/aWep5KnsAYH5OFPMdX/TP/LFsYQMRH7kzJUMh6JKg==", - "dev": true, - "dependencies": { - "@jest/core": "^27.2.5", - "@jest/test-result": "^27.2.5", - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.2.5", - "jest-util": "^27.2.5", - "jest-validate": "^27.2.5", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsdom/node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsdom/node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jsdom/node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsep": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.3.8.tgz", - "integrity": "sha512-qofGylTGgYj9gZFsHuyWAN4jr35eJ66qJCK4eKDnldohuUoQFbU3iZn2zjvEbd9wOAhP9Wx5DsAAduTyE1PSWQ==", - "engines": { - "node": ">= 10.16.0" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-e": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/json-e/-/json-e-4.4.3.tgz", - "integrity": "sha512-G2tp4fkEzN6hlya4J9dNaRbIxxTW+Lqu+An40E36SNZYexIGPPuNU30VuS0eZam4AieV0R+fvRxZrVFPJEvUbA==", - "dependencies": { - "json-stable-stringify-without-jsonify": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/json-schema-migrate": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/json-schema-migrate/-/json-schema-migrate-0.2.0.tgz", - "integrity": "sha512-dq4/oHWmtw/+0ytnXsDqVn+VsVweTEmzm5jLgguPn9BjSzn6/q58ZiZx3BHiQyJs612f0T5Z+MrUEUUY5DHsRg==", - "dependencies": { - "ajv": "^5.0.0" - } - }, - "node_modules/json-schema-migrate/node_modules/ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", - "dependencies": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "node_modules/json-schema-migrate/node_modules/fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==" - }, - "node_modules/json-schema-migrate/node_modules/json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json-to-ast": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json-to-ast/-/json-to-ast-2.1.0.tgz", - "integrity": "sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ==", - "dev": true, - "dependencies": { - "code-error-fragment": "0.0.230", - "grapheme-splitter": "^1.0.4" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsonc-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", - "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonpath-plus": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.2.0.tgz", - "integrity": "sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/just-curry-it": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/just-curry-it/-/just-curry-it-5.2.1.tgz", - "integrity": "sha512-M8qhhO9WVNc3yZgf3qfiNxMIsQlHqFHJ3vMI8N/rkp852h1utOB/N3ebS8jeXGAwYSbkdd0K6zP9eZneUtjHwA==" - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", - "dev": true, - "dependencies": { - "set-getter": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/list-item": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz", - "integrity": "sha512-S3D0WZ4J6hyM8o5SNKWaMYB1ALSacPZ2nHGEuCjmHZ+dc03gFeNZoNDcqfcnO4vDhTZmNrqrpYZCdXsRh22bzw==", - "dev": true, - "dependencies": { - "expand-range": "^1.8.1", - "extend-shallow": "^2.0.1", - "is-number": "^2.1.0", - "repeat-string": "^1.5.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/list-item/node_modules/is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/list-item/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listhen": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/listhen/-/listhen-0.2.15.tgz", - "integrity": "sha512-F/IWj/aJLeokHAIVY+l3JoWRUnbRaf2F0cr+Ybc1YyozMA/yP0C2nf3c0Oi7vAbFvtfiwfWWfP7bIrQc/u5L1A==", - "dev": true, - "dependencies": { - "clipboardy": "^3.0.0", - "colorette": "^2.0.19", - "defu": "^6.0.0", - "get-port-please": "^2.6.1", - "http-shutdown": "^1.2.2", - "selfsigned": "^2.0.1", - "ufo": "^0.8.5" - } - }, - "node_modules/listhen/node_modules/ufo": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-0.8.6.tgz", - "integrity": "sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==", - "dev": true - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "dev": true - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true - }, - "node_modules/lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "dependencies": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "node_modules/lodash.topath": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", - "integrity": "sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "node_modules/lodash.upperfirst": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", - "dev": true - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "dependencies": { - "tmpl": "1.0.x" - } - }, - "node_modules/markdown-link": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz", - "integrity": "sha512-TurLymbyLyo+kAUUAV9ggR9EPcDjP/ctlv9QAFiqUH7c+t6FlsbivPo9OKTU8xdOx9oNd2drW/Fi5RRElQbUqA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/markdown-toc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/markdown-toc/-/markdown-toc-1.2.0.tgz", - "integrity": "sha512-eOsq7EGd3asV0oBfmyqngeEIhrbkc7XVP63OwcJBIhH2EpG2PzFcbZdhy1jutXSlRBBVMNXHvMtSr5LAxSUvUg==", - "dev": true, - "dependencies": { - "concat-stream": "^1.5.2", - "diacritics-map": "^0.1.0", - "gray-matter": "^2.1.0", - "lazy-cache": "^2.0.2", - "list-item": "^1.1.1", - "markdown-link": "^0.1.1", - "minimist": "^1.2.0", - "mixin-deep": "^1.1.3", - "object.pick": "^1.2.0", - "remarkable": "^1.7.1", - "repeat-string": "^1.6.1", - "strip-color": "^0.1.0" - }, - "bin": { - "markdown-toc": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micro-memoize": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.0.14.tgz", - "integrity": "sha512-2tzWP1w2Hh+r7kCYa4f//jpBEA6dAueiuLco38NxfjF9Py3KCCI7wVOTdCvOhmTC043t+ulclVBdl3v+s+UJIQ==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", - "dev": true, - "dependencies": { - "mime-db": "1.50.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/moize": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.5.tgz", - "integrity": "sha512-Fu46qKV9F8DOi2vXimR3yRw/JAJfFRQEFZeclvOFnG92AEFERqwFtu4PIxETYFtCghHGlU1itKcvvNioKgWGIw==", - "dev": true, - "dependencies": { - "fast-equals": "^3.0.1", - "micro-memoize": "^4.0.11" - } - }, - "node_modules/moo": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", - "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==" - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/murmurhash": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/murmurhash/-/murmurhash-2.0.1.tgz", - "integrity": "sha512-5vQEh3y+DG/lMPM0mCGPDnyV8chYg/g7rl6v3Gd8WMF9S429ox3Xk8qrk174kWhG767KQMqqxLD1WnGd77hiew==", - "dev": true - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/nimma": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/nimma/-/nimma-0.2.2.tgz", - "integrity": "sha512-V52MLl7BU+tH2Np9tDrIXK8bql3MVUadnMIl/0/oZSGC9keuro0O9UUv9QKp0aMvtN8HRew4G7byY7H4eWsxaQ==", - "dependencies": { - "@jsep-plugin/regex": "^1.0.1", - "@jsep-plugin/ternary": "^1.0.2", - "astring": "^1.8.1", - "jsep": "^1.2.0" - }, - "engines": { - "node": "^12.20 || >=14.13" - }, - "optionalDependencies": { - "jsonpath-plus": "^6.0.1", - "lodash.topath": "^4.5.2" - } - }, - "node_modules/nimma/node_modules/jsonpath-plus": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", - "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==", - "optional": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-abi": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.35.0.tgz", - "integrity": "sha512-jAlSOFR1Bls963NmFwxeQkNTzqjUF0NThm8Le7eRIRGzFUVJuMOFZDLv5Y30W/Oaw+KEebEJLAigwO9gQHoEmw==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch-native": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-0.1.8.tgz", - "integrity": "sha512-ZNaury9r0NxaT2oL65GvdGDy+5PlSaHTovT6JV5tOW07k1TQmgC0olZETa4C9KZg0+6zBr99ctTYa3Utqj9P/Q==", - "dev": true - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", - "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==", - "dev": true - }, - "node_modules/node-stream-zip": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", - "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", - "dev": true, - "engines": { - "node": ">=0.12.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ofetch": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.0.1.tgz", - "integrity": "sha512-icBz2JYfEpt+wZz1FRoGcrMigjNKjzvufE26m9+yUiacRQRHwnNlGRPiDnW4op7WX/MR6aniwS8xw8jyVelF2g==", - "dev": true, - "dependencies": { - "destr": "^1.2.2", - "node-fetch-native": "^1.0.2", - "ufo": "^1.1.0" - } - }, - "node_modules/ofetch/node_modules/node-fetch-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.1.0.tgz", - "integrity": "sha512-nl5goFCig93JZ9FIV8GHT9xpNqXbxQUzkOmKIMKmncsBH9jhg7qKex8hirpymkBFmNQ114chEEG5lS4wgK2I+Q==", - "dev": true - }, - "node_modules/ohmyfetch": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/ohmyfetch/-/ohmyfetch-0.4.21.tgz", - "integrity": "sha512-VG7f/JRvqvBOYvL0tHyEIEG7XHWm7OqIfAs6/HqwWwDfjiJ1g0huIpe5sFEmyb+7hpFa1EGNH2aERWR72tlClw==", - "dev": true, - "dependencies": { - "destr": "^1.2.0", - "node-fetch-native": "^0.1.8", - "ufo": "^0.8.6", - "undici": "^5.12.0" - } - }, - "node_modules/ohmyfetch/node_modules/ufo": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-0.8.6.tgz", - "integrity": "sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/openapi-types": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-9.3.0.tgz", - "integrity": "sha512-sR23YjmuwDSMsQVZDHbV9mPgi0RyniQlqR0AQxTC2/F3cpSjRFMH3CFPjoWvNqhC4OxPkDYNb2l8Mc1Me6D/KQ==" - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/outdent": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", - "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==", - "dev": true - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", - "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-equal": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/path-equal/-/path-equal-1.2.5.tgz", - "integrity": "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathe": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.2.0.tgz", - "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", - "dev": true - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pony-cause": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-1.1.1.tgz", - "integrity": "sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dev": true, - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-format": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.5.tgz", - "integrity": "sha512-+nYn2z9GgicO9JiqmY25Xtq8SYfZ/5VCpEU3pppHHNAhd1y+ZXxmNPd1evmNcAd6Hz4iBV2kf0UpGth5A/VJ7g==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "node_modules/pubsub-js": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/pubsub-js/-/pubsub-js-1.9.4.tgz", - "integrity": "sha512-hJYpaDvPH4w8ZX/0Fdf9ma1AwRgU353GfbaVfPjfJQf1KxZ2iHaHl3fAUw1qlJIR5dr4F3RzjGaWohYUEyoh7A==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-16.0.0.tgz", - "integrity": "sha512-FgSe21IHNHkqv1SiJiob4ANsxVujcINa4p3MaDEMyoZsocbgSgwYE0c9lnF8eoinw4id3vx4DOXwhFdOOwVlDg==", - "deprecated": "< 19.4.0 is no longer supported", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1019158", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.8.1" - }, - "engines": { - "node": ">=14.1.0" - } - }, - "node_modules/puppeteer/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/puppeteer/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/puppeteer/node_modules/ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/radix3": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.0.1.tgz", - "integrity": "sha512-y+AcwZ3HcUIGc9zGsNVf5+BY/LxL+z+4h4J3/pp8jxSmy1STaCocPS3qrj4tA5ehUSzqtqK+0Aygvz/r/8vy4g==", - "dev": true - }, - "node_modules/ramldt2jsonschema": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/ramldt2jsonschema/-/ramldt2jsonschema-1.2.3.tgz", - "integrity": "sha512-+wLDAV2NNv9NkfEUOYStaDu/6RYgYXeC1zLtXE+dMU/jDfjpN4iJnBGycDwFTFaIQGosOQhxph7fEX6Mpwxdug==", - "dependencies": { - "commander": "^5.0.0", - "js-yaml": "^3.14.0", - "json-schema-migrate": "^0.2.0", - "webapi-parser": "^0.5.0" - }, - "bin": { - "dt2js": "bin/dt2js.js", - "js2dt": "bin/js2dt.js" - } - }, - "node_modules/ramldt2jsonschema/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/ramldt2jsonschema/node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/ramldt2jsonschema/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "dependencies": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/randomatic/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", - "dev": true, - "dependencies": { - "redis-errors": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regexp-tree": { - "version": "0.1.24", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", - "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", - "dev": true, - "bin": { - "regexp-tree": "bin/regexp-tree" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/remarkable": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.4.tgz", - "integrity": "sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg==", - "dev": true, - "dependencies": { - "argparse": "^1.0.10", - "autolinker": "~0.28.0" - }, - "bin": { - "remarkable": "bin/remarkable.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/remarkable/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.6.0.tgz", - "integrity": "sha512-DDa7d8TFNUalGC9VqXvQ1euWNN7sc63TrUCuM9J998+ViviahMIjKSOU7rfcgFOF+FCD71BhDRv4hrFz+ImDLQ==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-stable-stringify": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", - "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sentence-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", - "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "node_modules/set-getter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.1.tgz", - "integrity": "sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw==", - "dev": true, - "dependencies": { - "to-object-path": "^0.3.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sharp": { - "version": "0.30.7", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz", - "integrity": "sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.1", - "node-addon-api": "^5.0.0", - "prebuild-install": "^7.1.1", - "semver": "^7.3.7", - "simple-get": "^4.0.1", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shiki": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.2.tgz", - "integrity": "sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==", - "dev": true, - "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" - } - }, - "node_modules/shiki/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-eval": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-eval/-/simple-eval-1.0.0.tgz", - "integrity": "sha512-kpKJR+bqTscgC0xuAl2xHN6bB12lHjC2DCUfqjAx19bQyO3R2EVLOurm3H9AUltv/uFVcSCVNc6faegR+8NYLw==", - "dependencies": { - "jsep": "^1.1.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/standard-as-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-color": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", - "integrity": "sha512-p9LsUieSjWNNAxVCXLeilaDlmuUOrDS5/dF9znM1nZc7EGX5+zEFC0bEevsNIaldjlks+2jns5Siz6F9iK6jwA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/svg-element-attributes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz", - "integrity": "sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/table": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", - "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/tiny-merge-patch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tiny-merge-patch/-/tiny-merge-patch-0.1.2.tgz", - "integrity": "sha512-NLoA//tTMBPTr0oGdq+fxnvVR0tDa8tOcG9ZGbuovGzROadZ404qOV4g01jeWa5S8MC9nAOvu5bQgCW7s8tlWQ==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toml": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/toml/-/toml-2.3.6.tgz", - "integrity": "sha512-gVweAectJU3ebq//Ferr2JUY4WKSDe5N+z0FvjDncLGyHmIDoxgY/2Ie4qfEIDm4IS7OA6Rmdm7pdEEdMcV/xQ==", - "dev": true - }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", - "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@types/jest": "^27.0.0", - "babel-jest": ">=27.0.0 <28", - "jest": "^27.0.0", - "typescript": ">=3.8 <5.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@types/jest": { - "optional": true - }, - "babel-jest": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-node/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", - "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typedoc": { - "version": "0.24.8", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", - "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", - "dev": true, - "dependencies": { - "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.0", - "shiki": "^0.14.1" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 14.14" - }, - "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" - } - }, - "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/typedoc/node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", - "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/typescript-json-schema": { - "version": "0.57.0", - "resolved": "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.57.0.tgz", - "integrity": "sha512-xirQK0s95K3OL7Knve0OOxQHErByCxUsgXr5oCHa9J0jWgiA+9/tidHWPu1UMjRv7MoX5ViP6QmOrWCi+dvRew==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/node": "^16.9.2", - "glob": "^7.1.7", - "path-equal": "^1.2.5", - "safe-stable-stringify": "^2.2.0", - "ts-node": "^10.9.1", - "typescript": "~4.9.5", - "yargs": "^17.1.1" - }, - "bin": { - "typescript-json-schema": "bin/typescript-json-schema" - } - }, - "node_modules/typescript-json-schema/node_modules/@types/node": { - "version": "16.18.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.34.tgz", - "integrity": "sha512-VmVm7gXwhkUimRfBwVI1CHhwp86jDWR04B5FGebMMyxV90SlCmFujwUHrxTD4oO+SOYU86SoxvhgeRQJY7iXFg==" - }, - "node_modules/typescript-json-schema/node_modules/yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", - "dependencies": { - "cliui": "^7.0.2", - "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.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/typescript-json-schema/node_modules/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/ufo": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.1.tgz", - "integrity": "sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==", - "dev": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/uncrypto": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.2.tgz", - "integrity": "sha512-kuZwRKV615lEw/Xx3Iz56FKk3nOeOVGaVmw0eg+x4Mne28lCotNFbBhDW7dEBCBKyKbRQiCadEZeNAFPVC5cgw==", - "dev": true - }, - "node_modules/undici": { - "version": "5.26.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.3.tgz", - "integrity": "sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==", - "dev": true, - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unstorage": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.4.1.tgz", - "integrity": "sha512-ETLczXBd7sjJZuA3oIzaYwhMShiGlo7cGx01Ww23x2ehlk6WiRR1YsmjDBipoiGorq8pX1RRoMQFp/n3me7QOg==", - "dev": true, - "dependencies": { - "anymatch": "^3.1.3", - "chokidar": "^3.5.3", - "destr": "^1.2.2", - "h3": "^1.5.0", - "ioredis": "^5.3.1", - "listhen": "^1.0.3", - "lru-cache": "^7.18.3", - "mri": "^1.2.0", - "node-fetch-native": "^1.0.2", - "ofetch": "^1.0.1", - "ufo": "^1.1.1" - }, - "peerDependencies": { - "@azure/app-configuration": "^1.3.1", - "@azure/cosmos": "^3.17.3", - "@azure/data-tables": "^13.2.1", - "@azure/identity": "^3.1.3", - "@azure/keyvault-secrets": "^4.6.0", - "@azure/storage-blob": "^12.13.0", - "@planetscale/database": "^1.6.0" - }, - "peerDependenciesMeta": { - "@azure/app-configuration": { - "optional": true - }, - "@azure/cosmos": { - "optional": true - }, - "@azure/data-tables": { - "optional": true - }, - "@azure/identity": { - "optional": true - }, - "@azure/keyvault-secrets": { - "optional": true - }, - "@azure/storage-blob": { - "optional": true - }, - "@planetscale/database": { - "optional": true - } - } - }, - "node_modules/unstorage/node_modules/get-port-please": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.0.1.tgz", - "integrity": "sha512-R5pcVO8Z1+pVDu8Ml3xaJCEkBiiy1VQN9za0YqH8GIi1nIqD4IzQhzY6dDzMRtdS1lyiGlucRzm8IN8wtLIXng==", - "dev": true - }, - "node_modules/unstorage/node_modules/listhen": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.0.4.tgz", - "integrity": "sha512-r94k7kmXHb8e8wpv7+UP/qqhhD+j/9TgX19QKim2cEJuWCLwlTw+5BkCFmYyjhQ7Bt8KdVun/2DcD7MF2Fe3+g==", - "dev": true, - "dependencies": { - "clipboardy": "^3.0.0", - "colorette": "^2.0.19", - "defu": "^6.1.2", - "get-port-please": "^3.0.1", - "http-shutdown": "^1.2.2", - "ip-regex": "^5.0.0", - "node-forge": "^1.3.1", - "ufo": "^1.1.1" - } - }, - "node_modules/unstorage/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/unstorage/node_modules/node-fetch-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.1.0.tgz", - "integrity": "sha512-nl5goFCig93JZ9FIV8GHT9xpNqXbxQUzkOmKIMKmncsBH9jhg7qKex8hirpymkBFmNQ114chEEG5lS4wgK2I+Q==", - "dev": true - }, - "node_modules/upper-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", - "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/upper-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urijs": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/validator": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "dependencies": { - "makeerror": "1.0.x" - } - }, - "node_modules/webapi-parser": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/webapi-parser/-/webapi-parser-0.5.0.tgz", - "integrity": "sha512-fPt6XuMqLSvBz8exwX4QE1UT+pROLHa00EMDCdO0ybICduwQ1V4f7AWX4pNOpCp+x+0FjczEsOxtQU0d8L3QKw==", - "dependencies": { - "ajv": "6.5.2" - } - }, - "node_modules/webapi-parser/node_modules/ajv": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", - "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", - "dependencies": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.1" - } - }, - "node_modules/webapi-parser/node_modules/fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/xss": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", - "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", - "dev": true, - "dependencies": { - "commander": "^2.20.3", - "cssfilter": "0.0.10" - }, - "bin": { - "xss": "bin/xss" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", - "dev": true - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/z-schema": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.1.tgz", - "integrity": "sha512-Gp8xU2lULhREqTWj9t4BEAeA7M835n4fWJ9KjGWksV3wmLUdOJo2hAr+QYvkVZIGOOTyeN274g1f95dKRsgYgQ==", - "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.6.0" - }, - "bin": { - "z-schema": "bin/z-schema" - }, - "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^2.7.1" - } - } - }, - "dependencies": { - "@apidevtools/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", - "requires": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", - "js-yaml": "^4.1.0" - } - }, - "@apidevtools/openapi-schemas": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", - "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==" - }, - "@apidevtools/swagger-methods": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", - "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==" - }, - "@apidevtools/swagger-parser": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.0.3.tgz", - "integrity": "sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==", - "requires": { - "@apidevtools/json-schema-ref-parser": "^9.0.6", - "@apidevtools/openapi-schemas": "^2.0.4", - "@apidevtools/swagger-methods": "^3.0.2", - "@jsdevtools/ono": "^7.1.3", - "call-me-maybe": "^1.0.1", - "z-schema": "^5.0.1" - } - }, - "@asyncapi/avro-schema-parser": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@asyncapi/avro-schema-parser/-/avro-schema-parser-3.0.2.tgz", - "integrity": "sha512-TZZedLaflgyYivwidJPqTN2LMk+Lqg0IByXtdzNYQZLNpLpcyEnXCxongoW0TVYgYGLWAghN3AmMOrrsVcGGOw==", - "requires": { - "@asyncapi/parser": "^2.0.3", - "@types/json-schema": "^7.0.11", - "avsc": "^5.7.6" - } - }, - "@asyncapi/openapi-schema-parser": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@asyncapi/openapi-schema-parser/-/openapi-schema-parser-3.0.4.tgz", - "integrity": "sha512-nfZbL3dTpIQ3K+/V05FBpgOPi7dDWZkqZG8e7pKwtNhwZ0YLBFWTw6RpocztlBlcieFggxZqLm4BT5I1cQbK+Q==", - "requires": { - "@asyncapi/parser": "^2.1.0", - "@openapi-contrib/openapi-schema-to-json-schema": "~3.2.0", - "ajv": "^8.11.0", - "ajv-errors": "^3.0.0", - "ajv-formats": "^2.1.1" - } - }, - "@asyncapi/parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-2.1.0.tgz", - "integrity": "sha512-78jjN3eW4ZmgJEa6Ap15lofzADCeItO4wHcAY2Jod3qLB1xf1zFDZQdtm3VSHYLeLhwoC1A33bAtzEf7M5P2bg==", - "requires": { - "@asyncapi/specs": "^5.1.0", - "@openapi-contrib/openapi-schema-to-json-schema": "~3.2.0", - "@stoplight/json-ref-resolver": "^3.1.5", - "@stoplight/spectral-core": "^1.16.1", - "@stoplight/spectral-functions": "^1.7.2", - "@stoplight/spectral-parsers": "^1.0.2", - "@types/json-schema": "^7.0.11", - "@types/urijs": "^1.19.19", - "ajv": "^8.11.0", - "ajv-errors": "^3.0.0", - "ajv-formats": "^2.1.1", - "avsc": "^5.7.5", - "js-yaml": "^4.1.0", - "jsonpath-plus": "^7.2.0", - "node-fetch": "2.6.7", - "ramldt2jsonschema": "^1.2.3", - "webapi-parser": "^0.5.0" - }, - "dependencies": { - "@asyncapi/specs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@asyncapi/specs/-/specs-5.1.0.tgz", - "integrity": "sha512-yffhETqehkim43luMnPKOwzY0D0YtU4bKpORIXIaid6p5Y5kDLrMGJaEPkNieQp03HMjhjFrnUPtT8kvqe0+aQ==", - "requires": { - "@types/json-schema": "^7.0.11" - } - } - } - }, - "@asyncapi/parserV1": { - "version": "npm:@asyncapi/parser@1.18.1", - "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-1.18.1.tgz", - "integrity": "sha512-7sU9DajLV+vA2vShTYmD5lbtbTY6TOcGxB4Z4IcpRp8x5pejOsN32iU05eIYCnuamsi5SMscFxoi6fIO2vPK3Q==", - "dev": true, - "requires": { - "@apidevtools/json-schema-ref-parser": "^9.0.6", - "@asyncapi/specs": "^4.1.1", - "@fmvilas/pseudo-yaml-ast": "^0.3.1", - "ajv": "^6.10.1", - "js-yaml": "^3.13.1", - "json-to-ast": "^2.1.0", - "lodash.clonedeep": "^4.5.0", - "node-fetch": "^2.6.0", - "tiny-merge-patch": "^0.1.2" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "@asyncapi/raml-dt-schema-parser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@asyncapi/raml-dt-schema-parser/-/raml-dt-schema-parser-4.0.4.tgz", - "integrity": "sha512-kKam4jwYYdwqoV5zkEb3YEb8VOrN0785fc4ByazxRd+BT/RnkQTLspjTY/akdDs9DLmU4ChP73Z0vqpek6wojA==", - "requires": { - "@asyncapi/parser": "^2.1.0", - "js-yaml": "^4.1.0", - "ramldt2jsonschema": "^1.2.3", - "webapi-parser": "^0.5.0" - } - }, - "@asyncapi/specs": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@asyncapi/specs/-/specs-4.1.2.tgz", - "integrity": "sha512-A6iUCI96LB1Uma9DIaFcFKegNiOsGkquk0UUtkx7VbBJO+bOlwKfUhl5n+nwKaVR/UjyszeBtbUEodIC7Q3oBQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.11" - } - }, - "@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", - "dev": true - }, - "@babel/core": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", - "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.15.8", - "@babel/generator": "^7.15.8", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.8", - "@babel/helpers": "^7.15.4", - "@babel/parser": "^7.15.8", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.6", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", - "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", - "dev": true, - "requires": { - "@babel/types": "^7.15.6", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", - "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", - "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.15.4", - "@babel/template": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", - "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", - "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", - "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-module-imports": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", - "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", - "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.15.4", - "@babel/helper-replace-supers": "^7.15.4", - "@babel/helper-simple-access": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.6" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", - "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", - "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.15.4", - "@babel/helper-optimise-call-expression": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", - "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", - "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true - }, - "@babel/helpers": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", - "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", - "dev": true, - "requires": { - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", - "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/template": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/traverse": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", - "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", - "@babel/helper-function-name": "^7.15.4", - "@babel/helper-hoist-variables": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.9", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - } - } - }, - "@fastify/busboy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", - "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", - "dev": true - }, - "@fmvilas/pseudo-yaml-ast": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@fmvilas/pseudo-yaml-ast/-/pseudo-yaml-ast-0.3.1.tgz", - "integrity": "sha512-8OAB74W2a9M3k9bjYD8AjVXkX+qO8c0SqNT5HlgOqx7AxSw8xdksEcZp7gFtfi+4njSxT6+76ZR+1ubjAwQHOg==", - "dev": true, - "requires": { - "yaml-ast-parser": "0.0.43" - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "@hyperjump/json": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@hyperjump/json/-/json-0.1.0.tgz", - "integrity": "sha512-jWsAOHjweWhi0UEBCN57YZzyTt76Z6Fm/OJXOfNBJbEZt569AcTRsjv6Dqj5t4gQhW9td72oquiyaVp9oHbhBQ==", - "requires": { - "@hyperjump/json-pointer": "^0.9.2", - "moo": "^0.5.1" - } - }, - "@hyperjump/json-pointer": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/@hyperjump/json-pointer/-/json-pointer-0.9.6.tgz", - "integrity": "sha512-3szMJLfz+1wtfPHnGi1sHzwFfFdZqIZLCCYtaD47vLZMAQCbtoBRVZn44jJgIQ6v37+8fom5rsxSSIMKWi0zbg==", - "requires": { - "just-curry-it": "^5.2.1" - } - }, - "@hyperjump/json-schema": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/@hyperjump/json-schema/-/json-schema-0.23.2.tgz", - "integrity": "sha512-/m5emi8ruTGXxrsy6Pik4ipsjdUZVGePzqwm36oWtEB1DcExHnGheW/BDDBGrGZHdIqFV2PMTIfXjmbg7h8xQQ==", - "requires": { - "@hyperjump/json-schema-core": "^0.28.0", - "fastest-stable-stringify": "^2.0.2" - } - }, - "@hyperjump/json-schema-core": { - "version": "0.28.5", - "resolved": "https://registry.npmjs.org/@hyperjump/json-schema-core/-/json-schema-core-0.28.5.tgz", - "integrity": "sha512-+f5P3oHYCQru3s+Ha+E10rIyEvyK0Hfa2oj3+cDoGaVMbT4Jg5TgCoIM7B5rl3t3KRA7EOmrLjKFGeLi5yd1pg==", - "requires": { - "@hyperjump/json": "^0.1.0", - "@hyperjump/json-pointer": "^0.9.4", - "@hyperjump/pact": "^0.2.3", - "content-type": "^1.0.4", - "node-fetch": "^2.6.5", - "pubsub-js": "^1.9.4", - "uri-js": "^4.4.1" - } - }, - "@hyperjump/pact": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@hyperjump/pact/-/pact-0.2.4.tgz", - "integrity": "sha512-BGmyLaUSCMVyHrwXr67rMxgiQHPHwcmVCjROoY8q232EpMz9d9aFCkgGhdx//yEfHM7zgsm0zZ8RD/F89uPySg==", - "requires": { - "just-curry-it": "^3.1.0" - }, - "dependencies": { - "just-curry-it": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/just-curry-it/-/just-curry-it-3.2.1.tgz", - "integrity": "sha512-Q8206k8pTY7krW32cdmPsP+DqqLgWx/hYPSj9/+7SYqSqz7UuwPbfSe07lQtvuuaVyiSJveXk0E5RydOuWwsEg==" - } - } - }, - "@ioredis/commands": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.5.tgz", - "integrity": "sha512-smtlRF9vNKorRMCUtJ+yllIoiY8oFmfFG7xlzsAE76nKEwXNhjPOJIsc7Dv+AUitVt76t+KjIpUP9m98Crn2LQ==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.2.5", - "jest-util": "^27.2.5", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.5.tgz", - "integrity": "sha512-VR7mQ+jykHN4WO3OvusRJMk4xCa2MFLipMS+43fpcRGaYrN1KwMATfVEXif7ccgFKYGy5D1TVXTNE4mGq/KMMA==", - "dev": true, - "requires": { - "@jest/console": "^27.2.5", - "@jest/reporters": "^27.2.5", - "@jest/test-result": "^27.2.5", - "@jest/transform": "^27.2.5", - "@jest/types": "^27.2.5", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.2.5", - "jest-config": "^27.2.5", - "jest-haste-map": "^27.2.5", - "jest-message-util": "^27.2.5", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.5", - "jest-resolve-dependencies": "^27.2.5", - "jest-runner": "^27.2.5", - "jest-runtime": "^27.2.5", - "jest-snapshot": "^27.2.5", - "jest-util": "^27.2.5", - "jest-validate": "^27.2.5", - "jest-watcher": "^27.2.5", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/create-cache-key-function": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz", - "integrity": "sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==", - "requires": { - "@jest/types": "^27.5.1" - } - }, - "@jest/environment": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.5.tgz", - "integrity": "sha512-XvUW3q6OUF+54SYFCgbbfCd/BKTwm5b2MGLoc2jINXQLKQDTCS2P2IrpPOtQ08WWZDGzbhAzVhOYta3J2arubg==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.2.5", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.2.5" - } - }, - "@jest/fake-timers": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.5.tgz", - "integrity": "sha512-ZGUb6jg7BgwY+nmO0TW10bc7z7Hl2G/UTAvmxEyZ/GgNFoa31tY9/cgXmqcxnnZ7o5Xs7RAOz3G1SKIj8IVDlg==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.2.5", - "jest-mock": "^27.2.5", - "jest-util": "^27.2.5" - } - }, - "@jest/globals": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.5.tgz", - "integrity": "sha512-naRI537GM+enFVJQs6DcwGYPn/0vgJNb06zGVbzXfDfe/epDPV73hP1vqO37PqSKDeOXM2KInr6ymYbL1HTP7g==", - "dev": true, - "requires": { - "@jest/environment": "^27.2.5", - "@jest/types": "^27.2.5", - "expect": "^27.2.5" - } - }, - "@jest/reporters": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.5.tgz", - "integrity": "sha512-zYuR9fap3Q3mxQ454VWF8I6jYHErh368NwcKHWO2uy2fwByqBzRHkf9j2ekMDM7PaSTWcLBSZyd7NNxR1iHxzQ==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.2.5", - "@jest/test-result": "^27.2.5", - "@jest/transform": "^27.2.5", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.2.5", - "jest-resolve": "^27.2.5", - "jest-util": "^27.2.5", - "jest-worker": "^27.2.5", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/source-map": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", - "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.5.tgz", - "integrity": "sha512-ub7j3BrddxZ0BdSnM5JCF6cRZJ/7j3wgdX0+Dtwhw2Po+HKsELCiXUTvh+mgS4/89mpnU1CPhZxe2mTvuLPJJg==", - "dev": true, - "requires": { - "@jest/console": "^27.2.5", - "@jest/types": "^27.2.5", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.5.tgz", - "integrity": "sha512-8j8fHZRfnjbbdMitMAGFKaBZ6YqvFRFJlMJzcy3v75edTOqc7RY65S9JpMY6wT260zAcL2sTQRga/P4PglCu3Q==", - "dev": true, - "requires": { - "@jest/test-result": "^27.2.5", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.5", - "jest-runtime": "^27.2.5" - } - }, - "@jest/transform": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.5.tgz", - "integrity": "sha512-29lRtAHHYGALbZOx343v0zKmdOg4Sb0rsA1uSv0818bvwRhs3TyElOmTVXlrw0v1ZTqXJCAH/cmoDXimBhQOJQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.2.5", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.5", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.2.5", - "micromatch": "^4.0.4", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" - }, - "@jsep-plugin/regex": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.3.tgz", - "integrity": "sha512-XfZgry4DwEZvSFtS/6Y+R48D7qJYJK6R9/yJFyUFHCIUMEEHuJ4X95TDgJp5QkmzfLYvapMPzskV5HpIDrREug==", - "requires": {} - }, - "@jsep-plugin/ternary": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@jsep-plugin/ternary/-/ternary-1.1.3.tgz", - "integrity": "sha512-qtLGzCNzPVJ3kdH6/zoLWDPjauHIKiLSBAR71Wa0+PWvGA8wODUQvRgxtpUA5YqAYL3CQ8S4qXhd/9WuWTZirg==", - "requires": {} - }, - "@netlify/esbuild": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild/-/esbuild-0.14.39.tgz", - "integrity": "sha512-C3xpwdT2xw6SnSb+hLQoxjtikAKiz6BjQjzlIaysHDpGbmIcmUHZ/X+dyLtCqAvf15WNK5GSBZYOlpgcOE0WZA==", - "dev": true, - "requires": { - "@netlify/esbuild-android-64": "0.14.39", - "@netlify/esbuild-android-arm64": "0.14.39", - "@netlify/esbuild-darwin-64": "0.14.39", - "@netlify/esbuild-darwin-arm64": "0.14.39", - "@netlify/esbuild-freebsd-64": "0.14.39", - "@netlify/esbuild-freebsd-arm64": "0.14.39", - "@netlify/esbuild-linux-32": "0.14.39", - "@netlify/esbuild-linux-64": "0.14.39", - "@netlify/esbuild-linux-arm": "0.14.39", - "@netlify/esbuild-linux-arm64": "0.14.39", - "@netlify/esbuild-linux-mips64le": "0.14.39", - "@netlify/esbuild-linux-ppc64le": "0.14.39", - "@netlify/esbuild-linux-riscv64": "0.14.39", - "@netlify/esbuild-linux-s390x": "0.14.39", - "@netlify/esbuild-netbsd-64": "0.14.39", - "@netlify/esbuild-openbsd-64": "0.14.39", - "@netlify/esbuild-sunos-64": "0.14.39", - "@netlify/esbuild-windows-32": "0.14.39", - "@netlify/esbuild-windows-64": "0.14.39", - "@netlify/esbuild-windows-arm64": "0.14.39" - } - }, - "@netlify/esbuild-android-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", - "integrity": "sha512-azq+lsvjRsKLap8ubIwSJXGyknUACqYu5h98Fvyoh40Qk4QXIVKl16JIJ4s+B7jy2k9qblEc5c4nxdDA3aGbVA==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-android-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", - "integrity": "sha512-WhIP7ePq4qMC1sxoaeB9SsJqSW6uzW7XDj/IuWl1l9r94nwxywU1sYdVLaF2mZr15njviazYjVr8x1d+ipwL3w==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-darwin-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", - "integrity": "sha512-eF4GvLYiDxtcyjFT55+h+8c8A2HltjeMezCqkt3AQSgOdu1nhlvwbBhIdg2dyM6gKEaEm5hBtTbicEDSwsLodA==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-darwin-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", - "integrity": "sha512-b7rtnX/VtYwNbUCxs3eulrCWJ+u2YvqDcXiIV1ka+od+N0fTx+4RrVkVp1lha9L0wEJYK9J7UWZOMLMyd1ynRg==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-freebsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", - "integrity": "sha512-XtusxDJt2hUKUdggbTFolMx0kJL2zEa4STI7YwpB+ukEWoW5rODZjiLZbqqYLcjDH8k4YwHaMxs103L8eButEQ==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-freebsd-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", - "integrity": "sha512-A9XZKai+k6kfndCtN6Dh2usT28V0+OGxzFdZsANONPQiEUTrGZCgwcHWiVlVn7SeAwPR1tKZreTnvrfj8cj7hA==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-linux-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", - "integrity": "sha512-ZQnqk/82YRvINY+aF+LlGfRZ19c5mH0jaxsO046GpIOPx6PcXHG8JJ2lg+vLJVe4zFPohxzabcYpwFuT4cg/GA==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-linux-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", - "integrity": "sha512-IQtswVw7GAKNX/3yV390wSfSXvMWy0d5cw8csAffwBk9gupftY2lzepK4Cn6uD/aqLt3Iku33FbHop/2nPGfQA==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-linux-arm": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", - "integrity": "sha512-QdOzQniOed0Bz1cTC9TMMwvtAqKayYv66H4edJlbvElC81yJZF/c9XhmYWJ6P5g4nkChZubQ5RcQwTLmrFGexg==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-linux-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", - "integrity": "sha512-4Jie4QV6pWWuGN7TAshNMGbdTA9+VbRkv3rPIxhgK5gBfmsAV1yRKsumE4Y77J0AZNRiOriyoec4zc1qkmI3zg==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-linux-mips64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", - "integrity": "sha512-Htozxr95tw4tSd86YNbCLs1eoYQzNu/cHpzFIkuJoztZueUhl8XpRvBdob7n3kEjW1gitLWAIn8XUwSt+aJ1Tg==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-linux-ppc64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", - "integrity": "sha512-tFy0ufWIdjeuk1rPHee00TZlhr9OSF00Ufb4ROFyt2ArKuMSkWRJuDgx6MtZcAnCIN4cybo/xWl3MKTM+scnww==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-linux-riscv64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", - "integrity": "sha512-ZzfKvwIxL7wQnYbVFpyNW0wotnLoKageUEM57RbjekesJoNQnqUR6Usm+LDZoB8iRsI58VX1IxnstP0cX8vOHw==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-linux-s390x": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", - "integrity": "sha512-yjC0mFwnuMRoh0WcF0h71MF71ytZBFEQQTRdgiGT0+gbC4UApBqnTkJdLx32RscBKi9skbMChiJ748hDJou6FA==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-netbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", - "integrity": "sha512-mIq4znOoz3YfTVdv3sIWfR4Zx5JgMnT4srlhC5KYVHibhxvyDdin5txldYXmR4Zv4dZd6DSuWFsn441aUegHeA==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-openbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", - "integrity": "sha512-+t6QdzJCngH19hV7ClpFAeFDI2ko/HNcFbiNwaXTMVLB3hWi1sJtn+fzZck5HfzN4qsajAVqZq4nwX69SSt25A==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-sunos-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", - "integrity": "sha512-HLfXG6i2p3wyyyWHeeP4ShGDJ1zRMnf9YLJLe2ezv2KqvcKw/Un/m/FBuDW1p13oSUO7ShISMzgc1dw1GGBEOQ==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-windows-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", - "integrity": "sha512-ZpSQcKbVSCU3ln7mHpsL/5dWsUqCNdTnC5YAArnaOwdrlIunrsbo5j4MOZRRcGExb2uvTc/rb+D3mlGb8j1rkA==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-windows-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", - "integrity": "sha512-I3gCdO8+6IDhT4Y1ZmV4o2Gg0oELv7N4kCcE4kqclz10fWHNjf19HQNHyBJe0AWnFV5ZfT154VVD31dqgwpgFw==", - "dev": true, - "optional": true - }, - "@netlify/esbuild-windows-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/@netlify/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", - "integrity": "sha512-WX52W8U1lsfWcz6NWoSpDs57lgiiMHN23seq8G2bvxzGS/tvYD3dxVLLW5UPoKSnFDyVQT7b6Zkt6AkBten1yQ==", - "dev": true, - "optional": true - }, - "@netlify/functions": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-1.4.0.tgz", - "integrity": "sha512-gy7ULTIRroc2/jyFVGx1djCmmBMVisIwrvkqggq5B6iDcInRSy2Tpkm+V5C63hKJVkNRskKWtLQKm9ecCaQTjA==", - "dev": true, - "requires": { - "is-promise": "^4.0.0" - } - }, - "@netlify/ipx": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@netlify/ipx/-/ipx-1.4.0.tgz", - "integrity": "sha512-Ibqg1W41EVMHNT/W6JSDUyxjhcxsbEL9vL9ZaNjn9tVKnDYxJ8JqRTwSbzfns+K+M3FLqoC4PLW32qW+vT1pKQ==", - "dev": true, - "requires": { - "@netlify/functions": "^1.4.0", - "etag": "^1.8.1", - "fs-extra": "^11.0.0", - "ipx": "^0.9.11", - "micromatch": "^4.0.5", - "mkdirp": "^1.0.4", - "murmurhash": "^2.0.0", - "node-fetch": "^2.0.0", - "ufo": "^1.0.0", - "unstorage": "^1.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@netlify/plugin-nextjs": { - "version": "4.32.2", - "resolved": "https://registry.npmjs.org/@netlify/plugin-nextjs/-/plugin-nextjs-4.32.2.tgz", - "integrity": "sha512-xvFPrF3JPokYDlB+JmBmpsQR1S2HDYpMdTeTG4mbhdEfj+Bet+rLRUhuF1i6B5GVggj1bMzlTHgovCGjDxaZ/Q==", - "dev": true, - "requires": { - "@netlify/esbuild": "0.14.39", - "@netlify/functions": "^1.4.0", - "@netlify/ipx": "^1.3.3", - "@vercel/node-bridge": "^2.1.0", - "chalk": "^4.1.2", - "destr": "^1.1.1", - "execa": "^5.1.1", - "follow-redirects": "^1.15.2", - "fs-extra": "^10.0.0", - "globby": "^11.0.4", - "merge-stream": "^2.0.0", - "moize": "^6.1.0", - "node-fetch": "^2.6.6", - "node-stream-zip": "^1.15.0", - "outdent": "^0.8.0", - "p-limit": "^3.1.0", - "pathe": "^0.2.0", - "pretty-bytes": "^5.6.0", - "regexp-tree": "^0.1.24", - "semver": "^7.3.5", - "slash": "^3.0.0", - "tiny-glob": "^0.2.9" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@openapi-contrib/openapi-schema-to-json-schema": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@openapi-contrib/openapi-schema-to-json-schema/-/openapi-schema-to-json-schema-3.2.0.tgz", - "integrity": "sha512-Gj6C0JwCr8arj0sYuslWXUBSP/KnUlEGnPW4qxlXvAl543oaNQgMgIgkQUA6vs5BCCvwTEiL8m/wdWzfl4UvSw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz", - "integrity": "sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@stoplight/better-ajv-errors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stoplight/better-ajv-errors/-/better-ajv-errors-1.0.3.tgz", - "integrity": "sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==", - "requires": { - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - } - }, - "@stoplight/json": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.20.1.tgz", - "integrity": "sha512-FXfud+uWgIj1xv6nUO9WnmgmnVikaxJcbtR4XQt4C42n5c2qua3U05Z/3B57hP5TJRSj+tpn9ID6/bFeyYYlEg==", - "requires": { - "@stoplight/ordered-object-literal": "^1.0.3", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^13.6.0", - "jsonc-parser": "~2.2.1", - "lodash": "^4.17.21", - "safe-stable-stringify": "^1.1" - }, - "dependencies": { - "safe-stable-stringify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", - "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" - } - } - }, - "@stoplight/json-ref-readers": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@stoplight/json-ref-readers/-/json-ref-readers-1.2.2.tgz", - "integrity": "sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==", - "requires": { - "node-fetch": "^2.6.0", - "tslib": "^1.14.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@stoplight/json-ref-resolver": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@stoplight/json-ref-resolver/-/json-ref-resolver-3.1.5.tgz", - "integrity": "sha512-uaKLITor7UF+JBtI84zs3aOWM0L79zp7w9TrBTwPtx5SLbaQQ4HadDKgX5yhFOLMApLdhwhiftF4c0GFanOxGg==", - "requires": { - "@stoplight/json": "^3.17.0", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^12.3.0 || ^13.0.0", - "@types/urijs": "^1.19.19", - "dependency-graph": "~0.11.0", - "fast-memoize": "^2.5.2", - "immer": "^9.0.6", - "lodash": "^4.17.21", - "tslib": "^2.3.1", - "urijs": "^1.19.11" - } - }, - "@stoplight/ordered-object-literal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.4.tgz", - "integrity": "sha512-OF8uib1jjDs5/cCU+iOVy+GJjU3X7vk/qJIkIJFqwmlJKrrtijFmqwbu8XToXrwTYLQTP+Hebws5gtZEmk9jag==" - }, - "@stoplight/path": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@stoplight/path/-/path-1.3.2.tgz", - "integrity": "sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==" - }, - "@stoplight/spectral-core": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.16.1.tgz", - "integrity": "sha512-zPTM/OpjUySMRLPx6ZYy9Gtw+Rkuwg1/gQTKWta+AaJjVTHrNznYQ05gFLYjWwD/LGJMdjwE2IMi7T+Ntef+kw==", - "requires": { - "@stoplight/better-ajv-errors": "1.0.3", - "@stoplight/json": "~3.20.1", - "@stoplight/path": "1.3.2", - "@stoplight/spectral-parsers": "^1.0.0", - "@stoplight/spectral-ref-resolver": "^1.0.0", - "@stoplight/spectral-runtime": "^1.0.0", - "@stoplight/types": "~13.6.0", - "@types/es-aggregate-error": "^1.0.2", - "@types/json-schema": "^7.0.11", - "ajv": "^8.6.0", - "ajv-errors": "~3.0.0", - "ajv-formats": "~2.1.0", - "es-aggregate-error": "^1.0.7", - "jsonpath-plus": "7.1.0", - "lodash": "~4.17.21", - "lodash.topath": "^4.5.2", - "minimatch": "3.1.2", - "nimma": "0.2.2", - "pony-cause": "^1.0.0", - "simple-eval": "1.0.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "@stoplight/types": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.6.0.tgz", - "integrity": "sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==", - "requires": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" - } - }, - "jsonpath-plus": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.1.0.tgz", - "integrity": "sha512-gTaNRsPWO/K2KY6MrqaUFClF9kmuM6MFH5Dhg1VYDODgFbByw1yb7xu3hrViE/sz+dGOeMWgCzwUwQtAnCTE9g==" - } - } - }, - "@stoplight/spectral-formats": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-formats/-/spectral-formats-1.5.0.tgz", - "integrity": "sha512-VskkdU3qBSvI1dfJ79ysjvTssfNlbA6wrf/XkXK6iTyjfIVqOAWVtjypTb2U95tN/X8IjIBBhNWtZ4tNVZilrA==", - "requires": { - "@stoplight/json": "^3.17.0", - "@stoplight/spectral-core": "^1.8.0", - "@types/json-schema": "^7.0.7", - "tslib": "^2.3.1" - } - }, - "@stoplight/spectral-functions": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-functions/-/spectral-functions-1.7.2.tgz", - "integrity": "sha512-f+61/FtIkQeIo+a269CeaeqjpyRsgDyIk6DGr7iS4hyuk1PPk7Uf6MNRDs9FEIBh7CpdEJ+HSHbMLwgpymWTIw==", - "requires": { - "@stoplight/better-ajv-errors": "1.0.3", - "@stoplight/json": "^3.17.1", - "@stoplight/spectral-core": "^1.7.0", - "@stoplight/spectral-formats": "^1.0.0", - "@stoplight/spectral-runtime": "^1.1.0", - "ajv": "^8.6.3", - "ajv-draft-04": "~1.0.0", - "ajv-errors": "~3.0.0", - "ajv-formats": "~2.1.0", - "lodash": "~4.17.21", - "tslib": "^2.3.0" - } - }, - "@stoplight/spectral-parsers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-parsers/-/spectral-parsers-1.0.2.tgz", - "integrity": "sha512-ZQXknJ+BM5Re4Opj4cgVlHgG2qyOk/wznKJq3Vf1qsBEg2CNzN0pJmSB0deRqW0kArqm44qpb8c+cz3F2rgMtw==", - "requires": { - "@stoplight/json": "~3.20.1", - "@stoplight/types": "^13.6.0", - "@stoplight/yaml": "~4.2.3", - "tslib": "^2.3.1" - } - }, - "@stoplight/spectral-ref-resolver": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-ref-resolver/-/spectral-ref-resolver-1.0.3.tgz", - "integrity": "sha512-pj+bH4SH8hcWlnV787WD7P0/En7LA3EfZMvG1JUGMW/7bFd9AaZZXNkh5j0ve8qnPlwP8F4SH/2Cnr1tXOXCVw==", - "requires": { - "@stoplight/json-ref-readers": "1.2.2", - "@stoplight/json-ref-resolver": "~3.1.5", - "@stoplight/spectral-runtime": "^1.1.2", - "dependency-graph": "0.11.0", - "tslib": "^2.3.1" - } - }, - "@stoplight/spectral-runtime": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-runtime/-/spectral-runtime-1.1.2.tgz", - "integrity": "sha512-fr5zRceXI+hrl82yAVoME+4GvJie8v3wmOe9tU+ZLRRNonizthy8qDi0Z/z4olE+vGreSDcuDOZ7JjRxFW5kTw==", - "requires": { - "@stoplight/json": "^3.17.0", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^12.3.0", - "abort-controller": "^3.0.0", - "lodash": "^4.17.21", - "node-fetch": "^2.6.7", - "tslib": "^2.3.1" - }, - "dependencies": { - "@stoplight/types": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-12.5.0.tgz", - "integrity": "sha512-dwqYcDrGmEyUv5TWrDam5TGOxU72ufyQ7hnOIIDdmW5ezOwZaBFoR5XQ9AsH49w7wgvOqB2Bmo799pJPWnpCbg==", - "requires": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" - } - } - } - }, - "@stoplight/types": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.9.0.tgz", - "integrity": "sha512-o3sg/5aYpnT8jZITjXqBz6MGwuW/RQxjXlcU57bKorCustgBH+TvcI9QFNJSeg4fomAwQo6rk+xmhf93Xf8OzQ==", - "requires": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" - } - }, - "@stoplight/yaml": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.2.3.tgz", - "integrity": "sha512-Mx01wjRAR9C7yLMUyYFTfbUf5DimEpHMkRDQ1PKLe9dfNILbgdxyrncsOXM3vCpsQ1Hfj4bPiGl+u4u6e9Akqw==", - "requires": { - "@stoplight/ordered-object-literal": "^1.0.1", - "@stoplight/types": "^13.0.0", - "@stoplight/yaml-ast-parser": "0.0.48", - "tslib": "^2.2.0" - } - }, - "@stoplight/yaml-ast-parser": { - "version": "0.0.48", - "resolved": "https://registry.npmjs.org/@stoplight/yaml-ast-parser/-/yaml-ast-parser-0.0.48.tgz", - "integrity": "sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg==" - }, - "@swc/core": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.5.tgz", - "integrity": "sha512-H5YNI9rCViudhEmu9g/Yc8ai6k5/pfy+ItYns0SZ+iSZen+bgWeGb+9p4KRQhzNNC8Lfkfw+ENHzSwZltpWG6Q==", - "requires": { - "@swc/core-android-arm-eabi": "1.3.5", - "@swc/core-android-arm64": "1.3.5", - "@swc/core-darwin-arm64": "1.3.5", - "@swc/core-darwin-x64": "1.3.5", - "@swc/core-freebsd-x64": "1.3.5", - "@swc/core-linux-arm-gnueabihf": "1.3.5", - "@swc/core-linux-arm64-gnu": "1.3.5", - "@swc/core-linux-arm64-musl": "1.3.5", - "@swc/core-linux-x64-gnu": "1.3.5", - "@swc/core-linux-x64-musl": "1.3.5", - "@swc/core-win32-arm64-msvc": "1.3.5", - "@swc/core-win32-ia32-msvc": "1.3.5", - "@swc/core-win32-x64-msvc": "1.3.5" - } - }, - "@swc/core-android-arm-eabi": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.3.5.tgz", - "integrity": "sha512-gIq3fuXiRMtVhTf2ZQ9Z6JeuqvL30JOM0L+S6zAZD4v8lpGJ1ejpw7rghpAsGSG9Qc9oaNjx5yayTg3z/EtBzA==", - "optional": true, - "requires": { - "@swc/wasm": "1.2.122" - } - }, - "@swc/core-android-arm64": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.3.5.tgz", - "integrity": "sha512-SsRA6AhNZK8YXBbv7DAp5Zgv4tOWvPJlEBoOZ0uLIot7oYghWvSVs3jOgEzJSbQLU5U7ad6Q6boBdg0Q/kb2Ew==", - "optional": true, - "requires": { - "@swc/wasm": "1.2.130" - }, - "dependencies": { - "@swc/wasm": { - "version": "1.2.130", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.2.130.tgz", - "integrity": "sha512-rNcJsBxS70+pv8YUWwf5fRlWX6JoY/HJc25HD/F8m6Kv7XhJdqPPMhyX6TKkUBPAG7TWlZYoxa+rHAjPy4Cj3Q==", - "optional": true - } - } - }, - "@swc/core-darwin-arm64": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.5.tgz", - "integrity": "sha512-Jyem+f3/aTKJTRzyvdSfYS358jo7245g7nWmwmhQMgZI3/z2VcYHpIIYOi+dgsBaMRevK9tbsW0TSx805Njzjw==", - "optional": true - }, - "@swc/core-darwin-x64": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.5.tgz", - "integrity": "sha512-zW1tfS000RlHcqKp1HJK5vXBR0/AHw74qzOK0uh/G1cTczFDX2Hep4IuOxSJ1+7Zx9oFEOKSEY0lPXYbDAlF2w==", - "optional": true - }, - "@swc/core-freebsd-x64": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.3.5.tgz", - "integrity": "sha512-H2f0NkfqYDC6+vJO6wSBwiGnnR/cK9AQx574izPw3Utmb28zC+FOPAY63QLA/orNHjwHa6B6AuVDNwYuKUrRHQ==", - "optional": true, - "requires": { - "@swc/wasm": "1.2.130" - }, - "dependencies": { - "@swc/wasm": { - "version": "1.2.130", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.2.130.tgz", - "integrity": "sha512-rNcJsBxS70+pv8YUWwf5fRlWX6JoY/HJc25HD/F8m6Kv7XhJdqPPMhyX6TKkUBPAG7TWlZYoxa+rHAjPy4Cj3Q==", - "optional": true - } - } - }, - "@swc/core-linux-arm-gnueabihf": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.5.tgz", - "integrity": "sha512-PvuhjUCsNQDtwSSXWmmF6tU8jnAcFVRZt6bBNltvPW48oHNmIq9lEZ+hJTSPvqqxLvi9W7HG5ADzsTAaciKeRw==", - "optional": true, - "requires": { - "@swc/wasm": "1.2.130" - }, - "dependencies": { - "@swc/wasm": { - "version": "1.2.130", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.2.130.tgz", - "integrity": "sha512-rNcJsBxS70+pv8YUWwf5fRlWX6JoY/HJc25HD/F8m6Kv7XhJdqPPMhyX6TKkUBPAG7TWlZYoxa+rHAjPy4Cj3Q==", - "optional": true - } - } - }, - "@swc/core-linux-arm64-gnu": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.5.tgz", - "integrity": "sha512-NQ1LVrIvAsSwSoKO6DzHQMxzpvo17v/2LREqBiaNuCwDyYg2yFdgUdVW4FcbrdBK4MurRA2HFZZ/rt5DqAg3+A==", - "optional": true - }, - "@swc/core-linux-arm64-musl": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.5.tgz", - "integrity": "sha512-DDcM3ciJRBBjyN7qqw/AEEFh61YjiuxOcZ5SqYR0wyfroqOFX1+5JtCGJ9mU2MZ4Vfmxb1v5IFoQ3nfgJDcd8g==", - "optional": true - }, - "@swc/core-linux-x64-gnu": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.5.tgz", - "integrity": "sha512-AJR0J+b3jMmXuIxqhgrX/7vworHjciUPZuoyY2OrIhSXwMPVbWfb72h9oQdMbARfodTFLVJGQqy2Pij67+C0GQ==", - "optional": true - }, - "@swc/core-linux-x64-musl": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.5.tgz", - "integrity": "sha512-+Ig/rJ/GOZyQgCO72PFR+oJYUee0zQRsd6fpeuE66rn8P07a26WY1ZfMGw8miWcURccjDgAc1XCwVn6wa/OTCw==", - "optional": true - }, - "@swc/core-win32-arm64-msvc": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.5.tgz", - "integrity": "sha512-9Go5jiGWToT+00/J26E92n/JIHqG2wcaw79Z1+Z7GHrrm5TeL0VMyTMGLMeGFvtje/j+Lv0y4XKed+dKnRvc5w==", - "optional": true, - "requires": { - "@swc/wasm": "1.2.130" - }, - "dependencies": { - "@swc/wasm": { - "version": "1.2.130", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.2.130.tgz", - "integrity": "sha512-rNcJsBxS70+pv8YUWwf5fRlWX6JoY/HJc25HD/F8m6Kv7XhJdqPPMhyX6TKkUBPAG7TWlZYoxa+rHAjPy4Cj3Q==", - "optional": true - } - } - }, - "@swc/core-win32-ia32-msvc": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.5.tgz", - "integrity": "sha512-AIeD5uKVkvXTAbKAwyPFubFrXmQR77PNun59DHZWtRpxgOcHqK6xug9DfUSfc2zMw/ftEe9kNruUUS96023jfQ==", - "optional": true, - "requires": { - "@swc/wasm": "1.2.130" - }, - "dependencies": { - "@swc/wasm": { - "version": "1.2.130", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.2.130.tgz", - "integrity": "sha512-rNcJsBxS70+pv8YUWwf5fRlWX6JoY/HJc25HD/F8m6Kv7XhJdqPPMhyX6TKkUBPAG7TWlZYoxa+rHAjPy4Cj3Q==", - "optional": true - } - } - }, - "@swc/core-win32-x64-msvc": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.5.tgz", - "integrity": "sha512-GtrAkUo5xVTogwTDH9Zms7LELdTKyRll+K9o87P+YOEizCUvA0BPE1N4mu+ZqsI/dv56g2N4gNCD8RVLH3HekQ==", - "optional": true - }, - "@swc/jest": { - "version": "0.2.23", - "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.23.tgz", - "integrity": "sha512-ZLj17XjHbPtNsgqjm83qizENw05emLkKGu3WuPUttcy9hkngl0/kcc7fDbcSBpADS0GUtsO+iKPjZFWVAtJSlA==", - "requires": { - "@jest/create-cache-key-function": "^27.4.2", - "jsonc-parser": "^3.2.0" - }, - "dependencies": { - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" - } - } - }, - "@swc/wasm": { - "version": "1.2.122", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.2.122.tgz", - "integrity": "sha512-sM1VCWQxmNhFtdxME+8UXNyPNhxNu7zdb6ikWpz0YKAQQFRGT5ThZgJrubEpah335SUToNg8pkdDF7ibVCjxbQ==", - "optional": true - }, - "@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" - }, - "@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==" - }, - "@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" - }, - "@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" - }, - "@types/babel__core": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/es-aggregate-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/es-aggregate-error/-/es-aggregate-error-1.0.2.tgz", - "integrity": "sha512-erqUpFXksaeR2kejKnhnjZjbFxUpGZx4Z7ydNL9ie8tEhXPiZTsLeUDJ6aR1F8j5wWUAtOAQWUqkc7givBJbBA==", - "requires": { - "@types/node": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz", - "integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==", - "dev": true, - "requires": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/node": { - "version": "20.2.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", - "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==" - }, - "@types/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/urijs": { - "version": "1.19.19", - "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.19.tgz", - "integrity": "sha512-FDJNkyhmKLw7uEvTxx5tSXfPeQpO0iy73Ry+PmYZJvQy0QIWX8a7kJ4kLWRf+EbTPJEPDSgPXHaM7pzr5lmvCg==" - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" - }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - } - }, - "@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@vercel/node-bridge": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@vercel/node-bridge/-/node-bridge-2.2.2.tgz", - "integrity": "sha512-haGBC8noyA5BfjCRXRH+VIkHCDVW5iD5UX24P2nOdilwUxI4qWsattS/co8QBGq64XsNLRAMdM5pQUE3zxkF9Q==", - "dev": true - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "dependencies": { - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } - } - }, - "ajv-draft-04": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", - "requires": {} - }, - "ajv-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", - "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", - "requires": {} - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - } - }, - "alterschema": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/alterschema/-/alterschema-1.1.2.tgz", - "integrity": "sha512-X1g2v1qzYDjpfRUujIjHD1Dt8Mkw9oarfy721cRfKHKXk/Zfh4j5m3gjfOm/f8+f0FZa6c1f2yNFk47RrUKxAg==", - "requires": { - "@hyperjump/json-schema": "0.23.2", - "json-e": "^4.4.3", - "lodash": "^4.17.21", - "object-hash": "^3.0.0" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-sequence-parser": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz", - "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", - "dev": true - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "astring": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.4.tgz", - "integrity": "sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "autolinker": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz", - "integrity": "sha512-zQAFO1Dlsn69eXaO6+7YZc+v84aquQKbwpzCE3L0stj56ERn9hutFxPopViLjo9G+rWwjozRhgS5KJ25Xy19cQ==", - "dev": true, - "requires": { - "gulp-header": "^1.7.1" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "avsc": { - "version": "5.7.7", - "resolved": "https://registry.npmjs.org/avsc/-/avsc-5.7.7.tgz", - "integrity": "sha512-9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==" - }, - "babel-jest": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.5.tgz", - "integrity": "sha512-GC9pWCcitBhSuF7H3zl0mftoKizlswaF0E3qi+rPL417wKkCB0d+Sjjb0OfXvxj7gWiBf497ldgRMii68Xz+2g==", - "dev": true, - "requires": { - "@jest/transform": "^27.2.5", - "@jest/types": "^27.2.5", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.2.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz", - "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz", - "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.2.0", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserslist": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", - "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001265", - "electron-to-chromium": "^1.3.867", - "escalade": "^3.1.1", - "node-releases": "^2.0.0", - "picocolors": "^1.0.0" - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001370", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz", - "integrity": "sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g==", - "dev": true - }, - "capital-case": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "change-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", - "requires": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "clipboardy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", - "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", - "dev": true, - "requires": { - "arch": "^2.2.0", - "execa": "^5.1.1", - "is-wsl": "^2.2.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" - }, - "code-error-fragment": { - "version": "0.0.230", - "resolved": "https://registry.npmjs.org/code-error-fragment/-/code-error-fragment-0.0.230.tgz", - "integrity": "sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==", - "dev": true - }, - "coffee-script": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", - "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dev": true, - "requires": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "dependencies": { - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "concurrently": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", - "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "date-fns": "^2.29.1", - "lodash": "^4.17.21", - "rxjs": "^7.0.0", - "shell-quote": "^1.7.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^17.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yargs": { - "version": "17.6.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", - "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", - "dev": true, - "requires": { - "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" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - } - } - }, - "consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "dev": true - }, - "constant-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "cookie-es": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-0.5.0.tgz", - "integrity": "sha512-RyZrFi6PNpBFbIaQjXDlFIhFVqV42QeKSZX1yQIl6ihImq6vcHNGMtqQ/QzY3RMPuYSkvsRwtnt5M9NeYxKt0g==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.1" - } - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "cssfilter": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", - "dev": true - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "dependencies": { - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - } - } - }, - "date-fns": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", - "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "requires": { - "mimic-response": "^3.1.0" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "defu": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.2.tgz", - "integrity": "sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "dev": true - }, - "dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==" - }, - "destr": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/destr/-/destr-1.2.2.tgz", - "integrity": "sha512-lrbCJwD9saUQrqUfXvl6qoM+QN3W7tLV5pAOs+OqOmopCCz/JkE05MHedJR1xfk4IAnZuJXPVuN5+7jNA2ZCiA==", - "dev": true - }, - "detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "devtools-protocol": { - "version": "0.0.1019158", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz", - "integrity": "sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ==", - "dev": true - }, - "diacritics-map": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/diacritics-map/-/diacritics-map-0.1.0.tgz", - "integrity": "sha512-3omnDTYrGigU0i4cJjvaKwD52B8aoqyX/NEIkukFFkogBemsIbhSa1O414fpTp5nuszJG6lvQ5vBvDVNCbSsaQ==", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - }, - "diff-sequences": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", - "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "electron-to-chromium": { - "version": "1.3.868", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.868.tgz", - "integrity": "sha512-kZYCHqwJ1ctGrYDlOcWQH+/AftAm/KD4lEnLDNwS0kKwx1x6dU4zv+GuDjsPPOGn/2TjnKBaZjDyjXaoix0q/A==", - "dev": true - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "es-abstract": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz", - "integrity": "sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.6", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-aggregate-error": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.9.tgz", - "integrity": "sha512-fvnX40sb538wdU6r4s35cq4EY6Lr09Upj40BEVem4LEsuW8XgQep9yD5Q1U2KftokNp1rWODFJ2qwZSsAjFpbg==", - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "function-bind": "^1.1.1", - "functions-have-names": "^1.2.3", - "get-intrinsic": "^1.1.3", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - } - }, - "internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - } - } - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "requires": {} - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz", - "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "eslint-plugin-eslint-comments": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", - "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "ignore": "^5.0.5" - } - }, - "eslint-plugin-filenames": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz", - "integrity": "sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w==", - "dev": true, - "requires": { - "lodash.camelcase": "4.3.0", - "lodash.kebabcase": "4.1.1", - "lodash.snakecase": "4.1.1", - "lodash.upperfirst": "4.3.1" - } - }, - "eslint-plugin-github": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-4.3.2.tgz", - "integrity": "sha512-hlj7fGLuxornhaWtUYXHO+dOP1R7YyGgLRuN0qYioPMt861YOkbJJemW5M9z/EHSDv9RBzD9H4AGn9raGJ+lTg==", - "dev": true, - "requires": { - "@typescript-eslint/eslint-plugin": "^4.33.0", - "@typescript-eslint/parser": "^4.33.0", - "eslint-config-prettier": ">=8.0.0", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-filenames": "^1.3.2", - "eslint-plugin-i18n-text": "^1.0.1", - "eslint-plugin-import": "^2.24.2", - "eslint-plugin-no-only-tests": "^2.6.0", - "eslint-plugin-prettier": "^3.3.1", - "eslint-rule-documentation": ">=1.0.0", - "prettier": "^2.2.1", - "svg-element-attributes": "^1.3.1" - }, - "dependencies": { - "eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - } - } - }, - "eslint-plugin-i18n-text": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-i18n-text/-/eslint-plugin-i18n-text-1.0.1.tgz", - "integrity": "sha512-3G3UetST6rdqhqW9SfcfzNYMpQXS7wNkJvp6dsXnjzGiku6Iu5hl3B0kmk6lIcFPwYjhQIY+tXVRtK9TlGT7RA==", - "dev": true, - "requires": {} - }, - "eslint-plugin-import": { - "version": "2.25.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz", - "integrity": "sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.0", - "has": "^1.0.3", - "is-core-module": "^2.7.0", - "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.11.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-no-only-tests": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-2.6.0.tgz", - "integrity": "sha512-T9SmE/g6UV1uZo1oHAqOvL86XWl7Pl2EpRpnLI8g/bkJu+h7XBCB+1LnubRZ2CUQXj805vh4/CYZdnqtVaEo2Q==", - "dev": true - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-security": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", - "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", - "dev": true, - "requires": { - "safe-regex": "^1.1.0" - } - }, - "eslint-plugin-sonarjs": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.10.0.tgz", - "integrity": "sha512-FBRIBmWQh2UAfuLSnuYEfmle33jIup9hfkR0X8pkfjeCKNpHUG8qyZI63ahs3aw8CJrv47QJ9ccdK3ZxKH016A==", - "dev": true, - "requires": {} - }, - "eslint-rule-documentation": { - "version": "1.0.23", - "resolved": "https://registry.npmjs.org/eslint-rule-documentation/-/eslint-rule-documentation-1.0.23.tgz", - "integrity": "sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - }, - "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true - }, - "expect": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.5.tgz", - "integrity": "sha512-ZrO0w7bo8BgGoP/bLz+HDCI+0Hfei9jUSZs5yI/Wyn9VkG9w8oJ7rHRgYj+MA7yqqFa0IwHA3flJzZtYugShJA==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.2.5", - "jest-message-util": "^27.2.5", - "jest-regex-util": "^27.0.6" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-equals": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-3.0.3.tgz", - "integrity": "sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fast-memoize": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", - "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" - }, - "fastest-stable-stringify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz", - "integrity": "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==" - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-memo": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fs-memo/-/fs-memo-1.2.0.tgz", - "integrity": "sha512-YEexkCpL4j03jn5SxaMHqcO6IuWuqm8JFUYhyCep7Ao89JIYmB8xoKhK7zXXJ9cCaNXpyNH5L3QtAmoxjoHW2w==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-port-please": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-2.6.1.tgz", - "integrity": "sha512-4PDSrL6+cuMM1xs6w36ZIkaKzzE0xzfVBCfebHIJ3FE8iB9oic/ECwPw3iNiD4h1AoJ5XLLBhEviFAVrZsDC5A==", - "dev": true, - "requires": { - "fs-memo": "^1.2.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "requires": { - "define-properties": "^1.1.3" - } - }, - "globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "gray-matter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-2.1.1.tgz", - "integrity": "sha512-vbmvP1Fe/fxuT2QuLVcqb2BfK7upGhhbLIt9/owWEvPYrZZEkelLcq2HqzxosV+PQ67dUFLaAeNpH7C4hhICAA==", - "dev": true, - "requires": { - "ansi-red": "^0.1.1", - "coffee-script": "^1.12.4", - "extend-shallow": "^2.0.1", - "js-yaml": "^3.8.1", - "toml": "^2.3.2" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "gulp-header": { - "version": "1.8.12", - "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz", - "integrity": "sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==", - "dev": true, - "requires": { - "concat-with-sourcemaps": "*", - "lodash.template": "^4.4.0", - "through2": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "h3": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.6.4.tgz", - "integrity": "sha512-uoDNeaoeDRwWBtwwi4siZ6l5sBmDJpnpcBssuAbvsaPBonl8vP7Ym4tFPe+tAvGM0GbUoC24wYcloCG+J9hqmA==", - "dev": true, - "requires": { - "cookie-es": "^0.5.0", - "defu": "^6.1.2", - "destr": "^1.2.2", - "iron-webcrypto": "^0.6.0", - "radix3": "^1.0.1", - "ufo": "^1.1.1", - "uncrypto": "^0.1.2" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "header-case": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", - "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", - "requires": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" - } - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-shutdown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", - "integrity": "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==", - "dev": true - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "image-meta": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.1.1.tgz", - "integrity": "sha512-+oXiHwOEPr1IE5zY0tcBLED/CYcre15J4nwL50x3o0jxWqEkyjrusiKP3YSU+tr9fvJp33ZcP5Gpj2295g3aEw==", - "dev": true - }, - "immer": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz", - "integrity": "sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "dependencies": { - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "ioredis": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.1.tgz", - "integrity": "sha512-C+IBcMysM6v52pTLItYMeV4Hz7uriGtoJdz7SSBDX6u+zwSYGirLdQh3L7t/OItWITcw3gTFMjJReYUwS4zihg==", - "dev": true, - "requires": { - "@ioredis/commands": "^1.1.1", - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.4", - "denque": "^2.1.0", - "lodash.defaults": "^4.2.0", - "lodash.isarguments": "^3.1.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" - } - }, - "ip-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", - "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", - "dev": true - }, - "ipx": { - "version": "0.9.11", - "resolved": "https://registry.npmjs.org/ipx/-/ipx-0.9.11.tgz", - "integrity": "sha512-/wsBt7hV8rvNR6O4kwgOUAhtm0F/M/mXaolXot/Bz7fdOD+W7i9OtWuoASWv1PFwwtOunhZGaoCx8BOpSdG2VQ==", - "dev": true, - "requires": { - "consola": "^2.15.3", - "defu": "^6.1.0", - "destr": "^1.1.1", - "etag": "^1.8.1", - "image-meta": "^0.1.1", - "listhen": "^0.2.15", - "ohmyfetch": "^0.4.18", - "pathe": "^0.3.5", - "sharp": "^0.30.7", - "ufo": "^0.8.5", - "xss": "^1.0.14" - }, - "dependencies": { - "pathe": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.3.9.tgz", - "integrity": "sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g==", - "dev": true - }, - "ufo": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-0.8.6.tgz", - "integrity": "sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==", - "dev": true - } - } - }, - "iron-webcrypto": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-0.6.0.tgz", - "integrity": "sha512-WYgEQttulX/+JTv1BTJFYY3OsAb+ZnCuA53IjppZMyiRsVdGeEuZ/k4fJrg77Rzn0pp9/PgWtXUF+5HndDA5SQ==", - "dev": true - }, - "is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - }, - "is-ci": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", - "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", - "dev": true, - "requires": { - "ci-info": "^3.1.1" - } - }, - "is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "istanbul-lib-coverage": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.2.tgz", - "integrity": "sha512-o5+eTUYzCJ11/+JhW5/FUCdfsdoYVdQ/8I/OveE2XsjehYn5DdeSnNQAbjYaO8gQ6hvGTN6GM6ddQqpTVG5j8g==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.5.tgz", - "integrity": "sha512-vDMzXcpQN4Ycaqu+vO7LX8pZwNNoKMhc+gSp6q1D8S6ftRk8gNW8cni3YFxknP95jxzQo23Lul0BI2FrWgnwYQ==", - "dev": true, - "requires": { - "@jest/core": "^27.2.5", - "import-local": "^3.0.2", - "jest-cli": "^27.2.5" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-cli": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.5.tgz", - "integrity": "sha512-XzfcOXi5WQrXqFYsDxq5RDOKY4FNIgBgvgf3ZBz4e/j5/aWep5KnsAYH5OFPMdX/TP/LFsYQMRH7kzJUMh6JKg==", - "dev": true, - "requires": { - "@jest/core": "^27.2.5", - "@jest/test-result": "^27.2.5", - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.2.5", - "jest-util": "^27.2.5", - "jest-validate": "^27.2.5", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-changed-files": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.2.5.tgz", - "integrity": "sha512-jfnNJzF89csUKRPKJ4MwZ1SH27wTmX2xiAIHUHrsb/OYd9Jbo4/SXxJ17/nnx6RIifpthk3Y+LEeOk+/dDeGdw==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.5.tgz", - "integrity": "sha512-eyL9IcrAxm3Saq3rmajFCwpaxaRMGJ1KJs+7hlTDinXpJmeR3P02bheM3CYohE7UfwOBmrFMJHjgo/WPcLTM+Q==", - "dev": true, - "requires": { - "@jest/environment": "^27.2.5", - "@jest/test-result": "^27.2.5", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.2.5", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.2.5", - "jest-matcher-utils": "^27.2.5", - "jest-message-util": "^27.2.5", - "jest-runtime": "^27.2.5", - "jest-snapshot": "^27.2.5", - "jest-util": "^27.2.5", - "pretty-format": "^27.2.5", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-config": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.5.tgz", - "integrity": "sha512-QdENtn9b5rIIYGlbDNEcgY9LDL5kcokJnXrp7x8AGjHob/XFqw1Z6p+gjfna2sUulQsQ3ce2Fvntnv+7fKYDhQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.2.5", - "@jest/types": "^27.2.5", - "babel-jest": "^27.2.5", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "jest-circus": "^27.2.5", - "jest-environment-jsdom": "^27.2.5", - "jest-environment-node": "^27.2.5", - "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.2.5", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.5", - "jest-runner": "^27.2.5", - "jest-util": "^27.2.5", - "jest-validate": "^27.2.5", - "micromatch": "^4.0.4", - "pretty-format": "^27.2.5" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-diff": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.5.tgz", - "integrity": "sha512-7gfwwyYkeslOOVQY4tVq5TaQa92mWfC9COsVYMNVYyJTOYAqbIkoD3twi5A+h+tAPtAelRxkqY6/xu+jwTr0dA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.6", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.5" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-docblock": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", - "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.5.tgz", - "integrity": "sha512-HUPWIbJT0bXarRwKu/m7lYzqxR4GM5EhKOsu0z3t0SKtbFN6skQhpAUADM4qFShBXb9zoOuag5lcrR1x/WM+Ag==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "jest-get-type": "^27.0.6", - "jest-util": "^27.2.5", - "pretty-format": "^27.2.5" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-jsdom": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.5.tgz", - "integrity": "sha512-QtRpOh/RQKuXniaWcoFE2ElwP6tQcyxHu0hlk32880g0KczdonCs5P1sk5+weu/OVzh5V4Bt1rXuQthI01mBLg==", - "dev": true, - "requires": { - "@jest/environment": "^27.2.5", - "@jest/fake-timers": "^27.2.5", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.2.5", - "jest-util": "^27.2.5", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.5.tgz", - "integrity": "sha512-0o1LT4grm7iwrS8fIoLtwJxb/hoa3GsH7pP10P02Jpj7Mi4BXy65u46m89vEM2WfD1uFJQ2+dfDiWZNA2e6bJg==", - "dev": true, - "requires": { - "@jest/environment": "^27.2.5", - "@jest/fake-timers": "^27.2.5", - "@jest/types": "^27.2.5", - "@types/node": "*", - "jest-mock": "^27.2.5", - "jest-util": "^27.2.5" - } - }, - "jest-get-type": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", - "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", - "dev": true - }, - "jest-haste-map": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.5.tgz", - "integrity": "sha512-pzO+Gw2WLponaSi0ilpzYBE0kuVJstoXBX8YWyUebR8VaXuX4tzzn0Zp23c/WaETo7XYTGv2e8KdnpiskAFMhQ==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.6", - "jest-serializer": "^27.0.6", - "jest-util": "^27.2.5", - "jest-worker": "^27.2.5", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.5.tgz", - "integrity": "sha512-hdxY9Cm/CjLqu2tXeAoQHPgA4vcqlweVXYOg1+S9FeFdznB9Rti+eEBKDDkmOy9iqr4Xfbq95OkC4NFbXXPCAQ==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.2.5", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.2.5", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.2.5", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.2.5", - "jest-matcher-utils": "^27.2.5", - "jest-message-util": "^27.2.5", - "jest-runtime": "^27.2.5", - "jest-snapshot": "^27.2.5", - "jest-util": "^27.2.5", - "pretty-format": "^27.2.5", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-leak-detector": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.5.tgz", - "integrity": "sha512-HYsi3GUR72bYhOGB5C5saF9sPdxGzSjX7soSQS+BqDRysc7sPeBwPbhbuT8DnOpijnKjgwWQ8JqvbmReYnt3aQ==", - "dev": true, - "requires": { - "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.5" - } - }, - "jest-matcher-utils": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.5.tgz", - "integrity": "sha512-qNR/kh6bz0Dyv3m68Ck2g1fLW5KlSOUNcFQh87VXHZwWc/gY6XwnKofx76Qytz3x5LDWT09/2+yXndTkaG4aWg==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.2.5", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.5" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-message-util": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.5.tgz", - "integrity": "sha512-ggXSLoPfIYcbmZ8glgEJZ8b+e0Msw/iddRmgkoO7lDAr9SmI65IIfv7VnvTnV4FGnIIUIjzM+fHRHO5RBvyAbQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.2.5", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.2.5", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-mock": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.2.5.tgz", - "integrity": "sha512-HiMB3LqE9RzmeMzZARi2Bz3NoymxyP0gCid4y42ca1djffNtYFKgI220aC1VP1mUZ8rbpqZbHZOJ15093bZV/Q==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", - "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", - "dev": true - }, - "jest-resolve": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.5.tgz", - "integrity": "sha512-q5irwS3oS73SKy3+FM/HL2T7WJftrk9BRzrXF92f7net5HMlS7lJMg/ZwxLB4YohKqjSsdksEw7n/jvMxV7EKg==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "chalk": "^4.0.0", - "escalade": "^3.1.1", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.5", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.2.5", - "jest-validate": "^27.2.5", - "resolve": "^1.20.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.5.tgz", - "integrity": "sha512-BSjefped31bcvvCh++/pN9ueqqN1n0+p8/58yScuWfklLm2tbPbS9d251vJhAy0ZI2pL/0IaGhOTJrs9Y4FJlg==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.2.5" - } - }, - "jest-runner": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.5.tgz", - "integrity": "sha512-n41vw9RLg5TKAnEeJK9d6pGOsBOpwE89XBniK+AD1k26oIIy3V7ogM1scbDjSheji8MUPC9pNgCrZ/FHLVDNgg==", - "dev": true, - "requires": { - "@jest/console": "^27.2.5", - "@jest/environment": "^27.2.5", - "@jest/test-result": "^27.2.5", - "@jest/transform": "^27.2.5", - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.2.5", - "jest-environment-node": "^27.2.5", - "jest-haste-map": "^27.2.5", - "jest-leak-detector": "^27.2.5", - "jest-message-util": "^27.2.5", - "jest-resolve": "^27.2.5", - "jest-runtime": "^27.2.5", - "jest-util": "^27.2.5", - "jest-worker": "^27.2.5", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runtime": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.5.tgz", - "integrity": "sha512-N0WRZ3QszKyZ3Dm27HTBbBuestsSd3Ud5ooVho47XZJ8aSKO/X1Ag8M1dNx9XzfGVRNdB/xCA3lz8MJwIzPLLA==", - "dev": true, - "requires": { - "@jest/console": "^27.2.5", - "@jest/environment": "^27.2.5", - "@jest/fake-timers": "^27.2.5", - "@jest/globals": "^27.2.5", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.2.5", - "@jest/transform": "^27.2.5", - "@jest/types": "^27.2.5", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.2.5", - "jest-message-util": "^27.2.5", - "jest-mock": "^27.2.5", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.2.5", - "jest-snapshot": "^27.2.5", - "jest-util": "^27.2.5", - "jest-validate": "^27.2.5", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-serializer": { - "version": "27.0.6", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", - "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.5.tgz", - "integrity": "sha512-2/Jkn+VN6Abwz0llBltZaiJMnL8b1j5Bp/gRIxe9YR3FCEh9qp0TXVV0dcpTGZ8AcJV1SZGQkczewkI9LP5yGw==", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.2.5", - "@jest/types": "^27.2.5", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.2.5", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.2.5", - "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.2.5", - "jest-matcher-utils": "^27.2.5", - "jest-message-util": "^27.2.5", - "jest-resolve": "^27.2.5", - "jest-util": "^27.2.5", - "natural-compare": "^1.4.0", - "pretty-format": "^27.2.5", - "semver": "^7.3.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-util": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.5.tgz", - "integrity": "sha512-QRhDC6XxISntMzFRd/OQ6TGsjbzA5ONO0tlAj2ElHs155x1aEr0rkYJBEysG6H/gZVH3oGFzCdAB/GA8leh8NQ==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "picomatch": "^2.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "jest-validate": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.5.tgz", - "integrity": "sha512-XgYtjS89nhVe+UfkbLgcm+GgXKWgL80t9nTcNeejyO3t0Sj/yHE8BtIJqjZu9NXQksYbGImoQRXmQ1gP+Guffw==", + "node_modules/jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.0.6", - "leven": "^3.1.0", - "pretty-format": "^27.2.5" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" } }, - "jest-watcher": { + "node_modules/jest/node_modules/jest-cli": { "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.5.tgz", - "integrity": "sha512-umV4qGozg2Dn6DTTtqAh9puPw+DGLK9AQas7+mWjiK8t0fWMpxKg8ZXReZw7L4C88DqorsGUiDgwHNZ+jkVrkQ==", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.5.tgz", + "integrity": "sha512-XzfcOXi5WQrXqFYsDxq5RDOKY4FNIgBgvgf3ZBz4e/j5/aWep5KnsAYH5OFPMdX/TP/LFsYQMRH7kzJUMh6JKg==", "dev": true, - "requires": { + "dependencies": { + "@jest/core": "^27.2.5", "@jest/test-result": "^27.2.5", "@jest/types": "^27.2.5", - "@types/node": "*", - "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.2.5", "jest-util": "^27.2.5", - "string-length": "^4.0.1" + "jest-validate": "^27.2.5", + "prompts": "^2.0.1", + "yargs": "^16.2.0" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true } } }, - "jest-worker": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.5.tgz", - "integrity": "sha512-HTjEPZtcNKZ4LnhSp02NEH4vE+5OpJ0EsOWYvGQpHgUMLngydESAAMH5Wd/asPf29+XUDQZszxpLg1BkIIA2aw==", + "node_modules/jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "js-yaml": { + "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { + "dependencies": { "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jsdom": { + "node_modules/jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, - "requires": { + "dependencies": { "abab": "^2.0.5", "acorn": "^8.2.4", "acorn-globals": "^6.0.0", @@ -19423,432 +8424,501 @@ "ws": "^7.4.6", "xml-name-validator": "^3.0.0" }, - "dependencies": { - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true } } }, - "jsep": { + "node_modules/jsdom/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsdom/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsep": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.3.8.tgz", - "integrity": "sha512-qofGylTGgYj9gZFsHuyWAN4jr35eJ66qJCK4eKDnldohuUoQFbU3iZn2zjvEbd9wOAhP9Wx5DsAAduTyE1PSWQ==" + "integrity": "sha512-qofGylTGgYj9gZFsHuyWAN4jr35eJ66qJCK4eKDnldohuUoQFbU3iZn2zjvEbd9wOAhP9Wx5DsAAduTyE1PSWQ==", + "engines": { + "node": ">= 10.16.0" + } }, - "jsesc": { + "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } }, - "json-e": { + "node_modules/json-e": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/json-e/-/json-e-4.4.3.tgz", "integrity": "sha512-G2tp4fkEzN6hlya4J9dNaRbIxxTW+Lqu+An40E36SNZYexIGPPuNU30VuS0eZam4AieV0R+fvRxZrVFPJEvUbA==", - "requires": { + "dependencies": { "json-stable-stringify-without-jsonify": "^1.0.1" + }, + "engines": { + "node": ">=10" } }, - "json-schema-migrate": { + "node_modules/json-schema-migrate": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/json-schema-migrate/-/json-schema-migrate-0.2.0.tgz", "integrity": "sha512-dq4/oHWmtw/+0ytnXsDqVn+VsVweTEmzm5jLgguPn9BjSzn6/q58ZiZx3BHiQyJs612f0T5Z+MrUEUUY5DHsRg==", - "requires": { + "dependencies": { "ajv": "^5.0.0" - }, + } + }, + "node_modules/json-schema-migrate/node_modules/ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==" - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==" - } + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, - "json-schema-traverse": { + "node_modules/json-schema-migrate/node_modules/fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==" + }, + "node_modules/json-schema-migrate/node_modules/json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==" + }, + "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "json-stable-stringify-without-jsonify": { + "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, - "json-to-ast": { + "node_modules/json-to-ast": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/json-to-ast/-/json-to-ast-2.1.0.tgz", "integrity": "sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ==", "dev": true, - "requires": { + "dependencies": { "code-error-fragment": "0.0.230", "grapheme-splitter": "^1.0.4" + }, + "engines": { + "node": ">= 4" } }, - "json5": { + "node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "requires": { + "dependencies": { "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "jsonc-parser": { + "node_modules/jsonc-parser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==" }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonpath-plus": { + "node_modules/jsonpath-plus": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.2.0.tgz", - "integrity": "sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA==" + "integrity": "sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA==", + "engines": { + "node": ">=12.0.0" + } }, - "jsonpointer": { + "node_modules/jsonpointer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==" + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } }, - "just-curry-it": { + "node_modules/just-curry-it": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/just-curry-it/-/just-curry-it-5.2.1.tgz", "integrity": "sha512-M8qhhO9WVNc3yZgf3qfiNxMIsQlHqFHJ3vMI8N/rkp852h1utOB/N3ebS8jeXGAwYSbkdd0K6zP9eZneUtjHwA==" }, - "kind-of": { + "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "kleur": { + "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", "dev": true }, - "lazy-cache": { + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/lazy-cache": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", "dev": true, - "requires": { + "dependencies": { "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "leven": { + "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } }, - "levn": { + "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "requires": { + "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "list-item": { + "node_modules/list-item": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz", "integrity": "sha512-S3D0WZ4J6hyM8o5SNKWaMYB1ALSacPZ2nHGEuCjmHZ+dc03gFeNZoNDcqfcnO4vDhTZmNrqrpYZCdXsRh22bzw==", "dev": true, - "requires": { + "dependencies": { "expand-range": "^1.8.1", "extend-shallow": "^2.0.1", "is-number": "^2.1.0", "repeat-string": "^1.5.2" }, - "dependencies": { - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "engines": { + "node": ">=0.10.0" } }, - "listhen": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/listhen/-/listhen-0.2.15.tgz", - "integrity": "sha512-F/IWj/aJLeokHAIVY+l3JoWRUnbRaf2F0cr+Ybc1YyozMA/yP0C2nf3c0Oi7vAbFvtfiwfWWfP7bIrQc/u5L1A==", + "node_modules/list-item/node_modules/is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", "dev": true, - "requires": { - "clipboardy": "^3.0.0", - "colorette": "^2.0.19", - "defu": "^6.0.0", - "get-port-please": "^2.6.1", - "http-shutdown": "^1.2.2", - "selfsigned": "^2.0.1", - "ufo": "^0.8.5" + "dependencies": { + "kind-of": "^3.0.2" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/list-item/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, "dependencies": { - "ufo": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-0.8.6.tgz", - "integrity": "sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==", - "dev": true - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "locate-path": { + "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "requires": { + "dependencies": { "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "lodash": { + "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash._reinterpolate": { + "node_modules/lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", "dev": true }, - "lodash.camelcase": { + "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true }, - "lodash.clonedeep": { + "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", "dev": true }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true - }, - "lodash.get": { + "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "dev": true - }, - "lodash.isequal": { + "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, - "lodash.kebabcase": { + "node_modules/lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", "dev": true }, - "lodash.merge": { + "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.snakecase": { + "node_modules/lodash.snakecase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", "dev": true }, - "lodash.template": { + "node_modules/lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "dev": true, - "requires": { + "dependencies": { "lodash._reinterpolate": "^3.0.0", "lodash.templatesettings": "^4.0.0" } }, - "lodash.templatesettings": { + "node_modules/lodash.templatesettings": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", "dev": true, - "requires": { + "dependencies": { "lodash._reinterpolate": "^3.0.0" } }, - "lodash.topath": { + "node_modules/lodash.topath": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", "integrity": "sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==" }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "lodash.upperfirst": { + "node_modules/lodash.upperfirst": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", "dev": true }, - "lower-case": { + "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { + "dependencies": { "tslib": "^2.0.3" } }, - "lru-cache": { + "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "requires": { + "dependencies": { "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "lunr": { + "node_modules/lunr": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", "dev": true }, - "make-dir": { + "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, - "requires": { + "dependencies": { "semver": "^6.0.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "make-error": { + "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, - "makeerror": { + "node_modules/makeerror": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", "dev": true, - "requires": { + "dependencies": { "tmpl": "1.0.x" } }, - "markdown-link": { + "node_modules/markdown-link": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz", "integrity": "sha512-TurLymbyLyo+kAUUAV9ggR9EPcDjP/ctlv9QAFiqUH7c+t6FlsbivPo9OKTU8xdOx9oNd2drW/Fi5RRElQbUqA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "markdown-toc": { + "node_modules/markdown-toc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/markdown-toc/-/markdown-toc-1.2.0.tgz", "integrity": "sha512-eOsq7EGd3asV0oBfmyqngeEIhrbkc7XVP63OwcJBIhH2EpG2PzFcbZdhy1jutXSlRBBVMNXHvMtSr5LAxSUvUg==", "dev": true, - "requires": { + "dependencies": { "concat-stream": "^1.5.2", "diacritics-map": "^0.1.0", "gray-matter": "^2.1.0", @@ -19861,1678 +8931,1753 @@ "remarkable": "^1.7.1", "repeat-string": "^1.6.1", "strip-color": "^0.1.0" + }, + "bin": { + "markdown-toc": "cli.js" + }, + "engines": { + "node": ">=0.10.0" } }, - "math-random": { + "node_modules/math-random": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", "dev": true }, - "merge-stream": { + "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "merge2": { + "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micro-memoize": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.0.14.tgz", - "integrity": "sha512-2tzWP1w2Hh+r7kCYa4f//jpBEA6dAueiuLco38NxfjF9Py3KCCI7wVOTdCvOhmTC043t+ulclVBdl3v+s+UJIQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 8" + } }, - "micromatch": { + "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "requires": { + "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "mime-db": { + "node_modules/mime-db": { "version": "1.50.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.33", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "dev": true, - "requires": { + "dependencies": { "mime-db": "1.50.0" + }, + "engines": { + "node": ">= 0.6" } }, - "mimic-fn": { + "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "minimatch": { + "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { + "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, - "mixin-deep": { + "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, - "requires": { + "dependencies": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - } + "engines": { + "node": ">=0.10.0" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true + "node_modules/mixin-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "moize": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.5.tgz", - "integrity": "sha512-Fu46qKV9F8DOi2vXimR3yRw/JAJfFRQEFZeclvOFnG92AEFERqwFtu4PIxETYFtCghHGlU1itKcvvNioKgWGIw==", + "node_modules/mixin-deep/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, - "requires": { - "fast-equals": "^3.0.1", - "micro-memoize": "^4.0.11" + "engines": { + "node": ">=0.10.0" } }, - "moo": { + "node_modules/moo": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==" }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true - }, - "ms": { + "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "murmurhash": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/murmurhash/-/murmurhash-2.0.1.tgz", - "integrity": "sha512-5vQEh3y+DG/lMPM0mCGPDnyV8chYg/g7rl6v3Gd8WMF9S429ox3Xk8qrk174kWhG767KQMqqxLD1WnGd77hiew==", - "dev": true - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "natural-compare": { + "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "nimma": { + "node_modules/nimma": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/nimma/-/nimma-0.2.2.tgz", "integrity": "sha512-V52MLl7BU+tH2Np9tDrIXK8bql3MVUadnMIl/0/oZSGC9keuro0O9UUv9QKp0aMvtN8HRew4G7byY7H4eWsxaQ==", - "requires": { + "dependencies": { "@jsep-plugin/regex": "^1.0.1", "@jsep-plugin/ternary": "^1.0.2", "astring": "^1.8.1", - "jsep": "^1.2.0", + "jsep": "^1.2.0" + }, + "engines": { + "node": "^12.20 || >=14.13" + }, + "optionalDependencies": { "jsonpath-plus": "^6.0.1", "lodash.topath": "^4.5.2" - }, - "dependencies": { - "jsonpath-plus": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", - "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==", - "optional": true - } } }, - "no-case": { + "node_modules/nimma/node_modules/jsonpath-plus": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", + "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==", + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { + "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, - "node-abi": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.35.0.tgz", - "integrity": "sha512-jAlSOFR1Bls963NmFwxeQkNTzqjUF0NThm8Le7eRIRGzFUVJuMOFZDLv5Y30W/Oaw+KEebEJLAigwO9gQHoEmw==", - "dev": true, - "requires": { - "semver": "^7.3.5" - } - }, - "node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "dev": true - }, - "node-fetch": { + "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { + "dependencies": { "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node-fetch-native": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-0.1.8.tgz", - "integrity": "sha512-ZNaury9r0NxaT2oL65GvdGDy+5PlSaHTovT6JV5tOW07k1TQmgC0olZETa4C9KZg0+6zBr99ctTYa3Utqj9P/Q==", - "dev": true - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true - }, - "node-int64": { + "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, - "node-modules-regexp": { + "node_modules/node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-releases": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", - "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node-stream-zip": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", - "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, - "normalize-path": { + "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "npm-run-path": { + "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "requires": { + "dependencies": { "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "nwsapi": { + "node_modules/nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, - "object-hash": { + "node_modules/object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "object-keys": { + "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } }, - "object.assign": { + "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", "dev": true, - "requires": { - "isobject": "^3.0.1" - }, "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" } }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "ofetch": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.0.1.tgz", - "integrity": "sha512-icBz2JYfEpt+wZz1FRoGcrMigjNKjzvufE26m9+yUiacRQRHwnNlGRPiDnW4op7WX/MR6aniwS8xw8jyVelF2g==", + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, - "requires": { - "destr": "^1.2.2", - "node-fetch-native": "^1.0.2", - "ufo": "^1.1.0" - }, "dependencies": { - "node-fetch-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.1.0.tgz", - "integrity": "sha512-nl5goFCig93JZ9FIV8GHT9xpNqXbxQUzkOmKIMKmncsBH9jhg7qKex8hirpymkBFmNQ114chEEG5lS4wgK2I+Q==", - "dev": true - } + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "ohmyfetch": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/ohmyfetch/-/ohmyfetch-0.4.21.tgz", - "integrity": "sha512-VG7f/JRvqvBOYvL0tHyEIEG7XHWm7OqIfAs6/HqwWwDfjiJ1g0huIpe5sFEmyb+7hpFa1EGNH2aERWR72tlClw==", + "node_modules/object.pick/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, - "requires": { - "destr": "^1.2.0", - "node-fetch-native": "^0.1.8", - "ufo": "^0.8.6", - "undici": "^5.12.0" - }, "dependencies": { - "ufo": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-0.8.6.tgz", - "integrity": "sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { + "dependencies": { "wrappy": "1" } }, - "onetime": { + "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "requires": { + "dependencies": { "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "openapi-types": { + "node_modules/openapi-types": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-9.3.0.tgz", "integrity": "sha512-sR23YjmuwDSMsQVZDHbV9mPgi0RyniQlqR0AQxTC2/F3cpSjRFMH3CFPjoWvNqhC4OxPkDYNb2l8Mc1Me6D/KQ==" }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "requires": { + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "outdent": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", - "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==", - "dev": true - }, - "p-limit": { + "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "requires": { + "dependencies": { "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-locate": { + "node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "requires": { + "dependencies": { "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "p-try": { + "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "param-case": { + "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "requires": { + "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, - "parent-module": { + "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "requires": { + "dependencies": { "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "parse5": { + "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, - "pascal-case": { + "node_modules/pascal-case": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "requires": { + "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, - "path-case": { + "node_modules/path-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", - "requires": { + "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, - "path-equal": { + "node_modules/path-equal": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/path-equal/-/path-equal-1.2.5.tgz", "integrity": "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==" }, - "path-exists": { + "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } }, - "path-key": { + "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "engines": { + "node": ">=8" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-type": { + "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pathe": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.2.0.tgz", - "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "picocolors": { + "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "pkg-dir": { + "node_modules/pkg-dir/node_modules/p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, - "requires": { - "find-up": "^2.1.0" - }, "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" } }, - "pony-cause": { + "node_modules/pony-cause": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-1.1.1.tgz", - "integrity": "sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==" - }, - "prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dev": true, - "requires": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - } - }, - "prelude-ls": { + "integrity": "sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", - "dev": true + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } }, - "prettier-linter-helpers": { + "node_modules/prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, - "requires": { + "dependencies": { "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "pretty-format": { + "node_modules/pretty-format": { "version": "27.2.5", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.5.tgz", "integrity": "sha512-+nYn2z9GgicO9JiqmY25Xtq8SYfZ/5VCpEU3pppHHNAhd1y+ZXxmNPd1evmNcAd6Hz4iBV2kf0UpGth5A/VJ7g==", "dev": true, - "requires": { + "dependencies": { "@jest/types": "^27.2.5", "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "process-nextick-args": { + "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "prompts": { + "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, - "requires": { + "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" } }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "psl": { + "node_modules/psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, - "pubsub-js": { + "node_modules/pubsub-js": { "version": "1.9.4", "resolved": "https://registry.npmjs.org/pubsub-js/-/pubsub-js-1.9.4.tgz", "integrity": "sha512-hJYpaDvPH4w8ZX/0Fdf9ma1AwRgU353GfbaVfPjfJQf1KxZ2iHaHl3fAUw1qlJIR5dr4F3RzjGaWohYUEyoh7A==" }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { + "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "puppeteer": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-16.0.0.tgz", - "integrity": "sha512-FgSe21IHNHkqv1SiJiob4ANsxVujcINa4p3MaDEMyoZsocbgSgwYE0c9lnF8eoinw4id3vx4DOXwhFdOOwVlDg==", - "dev": true, - "requires": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.1019158", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.8.1" - }, - "dependencies": { - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "dev": true, - "requires": {} - } + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" } }, - "queue-microtask": { + "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "radix3": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.0.1.tgz", - "integrity": "sha512-y+AcwZ3HcUIGc9zGsNVf5+BY/LxL+z+4h4J3/pp8jxSmy1STaCocPS3qrj4tA5ehUSzqtqK+0Aygvz/r/8vy4g==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "ramldt2jsonschema": { + "node_modules/ramldt2jsonschema": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/ramldt2jsonschema/-/ramldt2jsonschema-1.2.3.tgz", "integrity": "sha512-+wLDAV2NNv9NkfEUOYStaDu/6RYgYXeC1zLtXE+dMU/jDfjpN4iJnBGycDwFTFaIQGosOQhxph7fEX6Mpwxdug==", - "requires": { + "dependencies": { "commander": "^5.0.0", "js-yaml": "^3.14.0", "json-schema-migrate": "^0.2.0", "webapi-parser": "^0.5.0" }, + "bin": { + "dt2js": "bin/dt2js.js", + "js2dt": "bin/js2dt.js" + } + }, + "node_modules/ramldt2jsonschema/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } + "sprintf-js": "~1.0.2" + } + }, + "node_modules/ramldt2jsonschema/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/ramldt2jsonschema/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "randomatic": { + "node_modules/randomatic": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, - "requires": { + "dependencies": { "is-number": "^4.0.0", "kind-of": "^6.0.0", "math-random": "^1.0.1" }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "engines": { + "node": ">= 0.10.0" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/randomatic/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "engines": { + "node": ">=0.10.0" } }, - "react-is": { + "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", "dev": true }, - "redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", - "dev": true, - "requires": { - "redis-errors": "^1.0.0" - } - }, - "regexp-tree": { + "node_modules/regexp-tree": { "version": "0.1.24", "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", - "dev": true + "dev": true, + "bin": { + "regexp-tree": "bin/regexp-tree" + } }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "node_modules/remarkable": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.4.tgz", + "integrity": "sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg==", + "dev": true, + "dependencies": { + "argparse": "^1.0.10", + "autolinker": "~0.28.0" + }, + "bin": { + "remarkable": "bin/remarkable.js" + }, + "engines": { + "node": ">= 0.10.0" + } }, - "remarkable": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.4.tgz", - "integrity": "sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg==", + "node_modules/remarkable/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "requires": { - "argparse": "^1.0.10", - "autolinker": "~0.28.0" - }, "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - } + "sprintf-js": "~1.0.2" } }, - "repeat-element": { + "node_modules/repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "repeat-string": { + "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10" + } }, - "require-directory": { + "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } }, - "require-from-string": { + "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } }, - "resolve": { + "node_modules/resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, - "requires": { + "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "resolve-cwd": { + "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, - "requires": { + "dependencies": { "resolve-from": "^5.0.0" }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" } }, - "resolve-from": { + "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "reusify": { + "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, - "rimraf": { + "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "requires": { + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "run-parallel": { + "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "requires": { + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { "queue-microtask": "^1.2.2" } }, - "rxjs": { + "node_modules/rxjs": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.6.0.tgz", "integrity": "sha512-DDa7d8TFNUalGC9VqXvQ1euWNN7sc63TrUCuM9J998+ViviahMIjKSOU7rfcgFOF+FCD71BhDRv4hrFz+ImDLQ==", "dev": true, - "requires": { + "dependencies": { "tslib": "^2.1.0" } }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/safe-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", + "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", "dev": true, - "requires": { - "ret": "~0.1.10" + "dependencies": { + "regexp-tree": "~0.1.1" } }, - "safe-regex-test": { + "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "safe-stable-stringify": { + "node_modules/safe-stable-stringify": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", - "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==" + "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==", + "engines": { + "node": ">=10" + } }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "saxes": { + "node_modules/saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, - "requires": { + "dependencies": { "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" } }, - "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "requires": { + "dependencies": { "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "sentence-case": { + "node_modules/sentence-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", - "requires": { + "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", "upper-case-first": "^2.0.2" } }, - "set-getter": { + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-getter": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.1.tgz", "integrity": "sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw==", "dev": true, - "requires": { + "dependencies": { "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "sharp": { - "version": "0.30.7", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz", - "integrity": "sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==", - "dev": true, - "requires": { - "color": "^4.2.3", - "detect-libc": "^2.0.1", - "node-addon-api": "^5.0.0", - "prebuild-install": "^7.1.1", - "semver": "^7.3.7", - "simple-get": "^4.0.1", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - } - }, - "shebang-command": { + "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { + "dependencies": { "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "shebang-regex": { + "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "engines": { + "node": ">=8" + } }, - "shell-quote": { + "node_modules/shell-quote": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "shiki": { + "node_modules/shiki": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.2.tgz", "integrity": "sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==", "dev": true, - "requires": { + "dependencies": { "ansi-sequence-parser": "^1.1.0", "jsonc-parser": "^3.2.0", "vscode-oniguruma": "^1.7.0", "vscode-textmate": "^8.0.0" - }, - "dependencies": { - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - } } }, - "side-channel": { + "node_modules/shiki/node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { + "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "signal-exit": { + "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true - }, - "simple-eval": { + "node_modules/simple-eval": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/simple-eval/-/simple-eval-1.0.0.tgz", "integrity": "sha512-kpKJR+bqTscgC0xuAl2xHN6bB12lHjC2DCUfqjAx19bQyO3R2EVLOurm3H9AUltv/uFVcSCVNc6faegR+8NYLw==", - "requires": { + "dependencies": { "jsep": "^1.1.2" - } - }, - "simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "dev": true, - "requires": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } + "engines": { + "node": ">=12" } }, - "sisteransi": { + "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, - "slash": { + "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "snake-case": { + "node_modules/snake-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "requires": { + "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, - "source-map": { + "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "source-map-support": { + "node_modules/source-map-support": { "version": "0.5.20", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, - "requires": { + "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "spawn-command": { + "node_modules/spawn-command": { "version": "0.0.2-1", "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", "dev": true }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, - "stack-utils": { + "node_modules/stack-utils": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, - "requires": { + "dependencies": { "escape-string-regexp": "^2.0.0" }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "standard-as-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", - "dev": true + "engines": { + "node": ">=10" + } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, - "requires": { - "safe-buffer": "~5.2.0" + "engines": { + "node": ">=8" } }, - "string-length": { + "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, - "requires": { + "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "string-width": { + "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { + "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "strip-ansi": { + "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { + "dependencies": { "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-bom": { + "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "strip-color": { + "node_modules/strip-color": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", "integrity": "sha512-p9LsUieSjWNNAxVCXLeilaDlmuUOrDS5/dF9znM1nZc7EGX5+zEFC0bEevsNIaldjlks+2jns5Siz6F9iK6jwA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "strip-final-newline": { + "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "supports-color": { + "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { + "dependencies": { "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "supports-hyperlinks": { + "node_modules/supports-hyperlinks": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, - "requires": { + "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "svg-element-attributes": { + "node_modules/svg-element-attributes": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz", "integrity": "sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==", - "dev": true + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "symbol-tree": { + "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "table": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", - "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - } - }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "terminal-link": { + "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dev": true, - "requires": { + "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "test-exclude": { + "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "requires": { + "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" } }, - "text-table": { + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "throat": { + "node_modules/throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "requires": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "tiny-merge-patch": { + "node_modules/tiny-merge-patch": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/tiny-merge-patch/-/tiny-merge-patch-0.1.2.tgz", "integrity": "sha512-NLoA//tTMBPTr0oGdq+fxnvVR0tDa8tOcG9ZGbuovGzROadZ404qOV4g01jeWa5S8MC9nAOvu5bQgCW7s8tlWQ==", "dev": true }, - "tmpl": { + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "to-fast-properties": { + "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "to-object-path": { + "node_modules/to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", "dev": true, - "requires": { + "dependencies": { "kind-of": "^3.0.2" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "toml": { + "node_modules/toml": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/toml/-/toml-2.3.6.tgz", "integrity": "sha512-gVweAectJU3ebq//Ferr2JUY4WKSDe5N+z0FvjDncLGyHmIDoxgY/2Ie4qfEIDm4IS7OA6Rmdm7pdEEdMcV/xQ==", "dev": true }, - "tough-cookie": { + "node_modules/tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, - "requires": { + "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", "universalify": "^0.1.2" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-jest": { + "version": "27.0.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", + "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", + "dev": true, "dependencies": { - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": ">=27.0.0 <28", + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true } } }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, - "ts-jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", - "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", + "node_modules/ts-jest/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" + "bin": { + "json5": "lib/cli.js" }, - "dependencies": { - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - } + "engines": { + "node": ">=6" } }, - "ts-node": { + "node_modules/ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "requires": { + "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", @@ -21547,150 +10692,269 @@ "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, - "dependencies": { - "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==" + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + "@swc/wasm": { + "optional": true } } }, - "tsconfig-paths": { + "node_modules/ts-node/node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/tsconfig-paths": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", "dev": true, - "requires": { + "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.1", "minimist": "^1.2.0", "strip-bom": "^3.0.0" } }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "tsutils": { + "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, - "requires": { + "dependencies": { "tslib": "^1.8.1" }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, - "type-check": { + "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "requires": { + "dependencies": { "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "type-detect": { + "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "typed-array-length": { + "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "typedarray": { + "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "typedarray-to-buffer": { + "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, - "requires": { + "dependencies": { "is-typedarray": "^1.0.0" } }, - "typedoc": { + "node_modules/typedoc": { "version": "0.24.8", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", "dev": true, - "requires": { + "dependencies": { "lunr": "^2.3.9", "marked": "^4.3.0", "minimatch": "^9.0.0", "shiki": "^0.14.1" }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 14.14" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" + } + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true - }, - "minimatch": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", - "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", + "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "typescript": { + "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, - "typescript-json-schema": { - "version": "0.57.0", - "resolved": "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.57.0.tgz", - "integrity": "sha512-xirQK0s95K3OL7Knve0OOxQHErByCxUsgXr5oCHa9J0jWgiA+9/tidHWPu1UMjRv7MoX5ViP6QmOrWCi+dvRew==", - "requires": { + "node_modules/typescript-json-schema": { + "version": "0.58.1", + "resolved": "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.58.1.tgz", + "integrity": "sha512-EcmquhfGEmEJOAezLZC6CzY0rPNzfXuky+Z3zoXULEEncW8e13aAjmC2r8ppT1bvvDekJj1TJ4xVhOdkjYtkUA==", + "dependencies": { "@types/json-schema": "^7.0.9", "@types/node": "^16.9.2", "glob": "^7.1.7", @@ -21700,453 +10964,460 @@ "typescript": "~4.9.5", "yargs": "^17.1.1" }, + "bin": { + "typescript-json-schema": "bin/typescript-json-schema" + } + }, + "node_modules/typescript-json-schema/node_modules/@types/node": { + "version": "16.18.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.34.tgz", + "integrity": "sha512-VmVm7gXwhkUimRfBwVI1CHhwp86jDWR04B5FGebMMyxV90SlCmFujwUHrxTD4oO+SOYU86SoxvhgeRQJY7iXFg==" + }, + "node_modules/typescript-json-schema/node_modules/yargs": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", "dependencies": { - "@types/node": { - "version": "16.18.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.34.tgz", - "integrity": "sha512-VmVm7gXwhkUimRfBwVI1CHhwp86jDWR04B5FGebMMyxV90SlCmFujwUHrxTD4oO+SOYU86SoxvhgeRQJY7iXFg==" - }, - "yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", - "requires": { - "cliui": "^7.0.2", - "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.0.0" - } - }, - "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" - } + "cliui": "^7.0.2", + "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.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/typescript-json-schema/node_modules/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "engines": { + "node": ">=12" } }, - "ufo": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.1.tgz", - "integrity": "sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==", - "dev": true - }, - "unbox-primitive": { + "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "uncrypto": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.2.tgz", - "integrity": "sha512-kuZwRKV615lEw/Xx3Iz56FKk3nOeOVGaVmw0eg+x4Mne28lCotNFbBhDW7dEBCBKyKbRQiCadEZeNAFPVC5cgw==", - "dev": true + "node_modules/undici-types": { + "version": "5.25.3", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==" }, - "undici": { - "version": "5.26.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.3.tgz", - "integrity": "sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==", + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true, - "requires": { - "@fastify/busboy": "^2.0.0" + "engines": { + "node": ">=8" } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "unstorage": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.4.1.tgz", - "integrity": "sha512-ETLczXBd7sjJZuA3oIzaYwhMShiGlo7cGx01Ww23x2ehlk6WiRR1YsmjDBipoiGorq8pX1RRoMQFp/n3me7QOg==", - "dev": true, - "requires": { - "anymatch": "^3.1.3", - "chokidar": "^3.5.3", - "destr": "^1.2.2", - "h3": "^1.5.0", - "ioredis": "^5.3.1", - "listhen": "^1.0.3", - "lru-cache": "^7.18.3", - "mri": "^1.2.0", - "node-fetch-native": "^1.0.2", - "ofetch": "^1.0.1", - "ufo": "^1.1.1" - }, - "dependencies": { - "get-port-please": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.0.1.tgz", - "integrity": "sha512-R5pcVO8Z1+pVDu8Ml3xaJCEkBiiy1VQN9za0YqH8GIi1nIqD4IzQhzY6dDzMRtdS1lyiGlucRzm8IN8wtLIXng==", - "dev": true - }, - "listhen": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.0.4.tgz", - "integrity": "sha512-r94k7kmXHb8e8wpv7+UP/qqhhD+j/9TgX19QKim2cEJuWCLwlTw+5BkCFmYyjhQ7Bt8KdVun/2DcD7MF2Fe3+g==", - "dev": true, - "requires": { - "clipboardy": "^3.0.0", - "colorette": "^2.0.19", - "defu": "^6.1.2", - "get-port-please": "^3.0.1", - "http-shutdown": "^1.2.2", - "ip-regex": "^5.0.0", - "node-forge": "^1.3.1", - "ufo": "^1.1.1" - } + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" }, - "node-fetch-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.1.0.tgz", - "integrity": "sha512-nl5goFCig93JZ9FIV8GHT9xpNqXbxQUzkOmKIMKmncsBH9jhg7qKex8hirpymkBFmNQ114chEEG5lS4wgK2I+Q==", - "dev": true + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "upper-case": { + "node_modules/upper-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", - "requires": { + "dependencies": { "tslib": "^2.0.3" } }, - "upper-case-first": { + "node_modules/upper-case-first": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", - "requires": { + "dependencies": { "tslib": "^2.0.3" } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { + "dependencies": { "punycode": "^2.1.0" } }, - "urijs": { + "node_modules/urijs": { "version": "1.19.11", "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "utility-types": { + "node_modules/utility-types": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" + } }, - "v8-compile-cache-lib": { + "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, - "v8-to-istanbul": { + "node_modules/v8-to-istanbul": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", "dev": true, - "requires": { + "dependencies": { "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0", "source-map": "^0.7.3" }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" } }, - "validator": { + "node_modules/validator": { "version": "13.7.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "engines": { + "node": ">= 0.10" + } }, - "vscode-oniguruma": { + "node_modules/vscode-oniguruma": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", "dev": true }, - "vscode-textmate": { + "node_modules/vscode-textmate": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", "dev": true }, - "w3c-hr-time": { + "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", "dev": true, - "requires": { + "dependencies": { "browser-process-hrtime": "^1.0.0" } }, - "w3c-xmlserializer": { + "node_modules/w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, - "requires": { + "dependencies": { "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" } }, - "walker": { + "node_modules/walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", "dev": true, - "requires": { + "dependencies": { "makeerror": "1.0.x" } }, - "webapi-parser": { + "node_modules/webapi-parser": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/webapi-parser/-/webapi-parser-0.5.0.tgz", "integrity": "sha512-fPt6XuMqLSvBz8exwX4QE1UT+pROLHa00EMDCdO0ybICduwQ1V4f7AWX4pNOpCp+x+0FjczEsOxtQU0d8L3QKw==", - "requires": { + "dependencies": { "ajv": "6.5.2" - }, + } + }, + "node_modules/webapi-parser/node_modules/ajv": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", + "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", "dependencies": { - "ajv": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", - "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.1" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==" - } + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" } }, - "webidl-conversions": { + "node_modules/webapi-parser/node_modules/fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==" + }, + "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "whatwg-encoding": { + "node_modules/whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, - "requires": { + "dependencies": { "iconv-lite": "0.4.24" } }, - "whatwg-mimetype": { + "node_modules/whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { + "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "which-boxed-primitive": { + "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { + "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "requires": { + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "word-wrap": { + "node_modules/word-wrap": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "wrap-ansi": { + "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { + "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "wrappy": { + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "write-file-atomic": { + "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "requires": { + "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, - "ws": { + "node_modules/ws": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", "dev": true, - "requires": {} + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } }, - "xml-name-validator": { + "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, - "xmlchars": { + "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, - "xss": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", - "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", - "dev": true, - "requires": { - "commander": "^2.20.3", - "cssfilter": "0.0.10" - } - }, - "xtend": { + "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4" + } }, - "y18n": { + "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } }, - "yallist": { + "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "yaml-ast-parser": { + "node_modules/yaml-ast-parser": { "version": "0.0.43", "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", "dev": true }, - "yargs": { + "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "requires": { + "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", @@ -22154,44 +11425,57 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "engines": { + "node": ">=10" } }, - "yn": { + "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } }, - "yocto-queue": { + "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "z-schema": { + "node_modules/z-schema": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.1.tgz", "integrity": "sha512-Gp8xU2lULhREqTWj9t4BEAeA7M835n4fWJ9KjGWksV3wmLUdOJo2hAr+QYvkVZIGOOTyeN274g1f95dKRsgYgQ==", - "requires": { - "commander": "^2.7.1", + "dependencies": { "lodash.get": "^4.4.2", "lodash.isequal": "^4.5.0", "validator": "^13.6.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^2.7.1" } } } diff --git a/package.json b/package.json index 0381f94ea4..377145b8ac 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@asyncapi/modelina", - "version": "1.9.1", + "version": "2.0.0-next.25", "description": "Library for generating data models based on inputs such as AsyncAPI, OpenAPI, or JSON Schema documents", "license": "Apache-2.0", "homepage": "https://www.modelina.org", @@ -8,7 +8,7 @@ "url": "https://github.com/asyncapi/modelina/issues" }, "engines": { - "node": ">=14" + "node": ">=18" }, "repository": { "type": "git", @@ -43,29 +43,29 @@ "@asyncapi/raml-dt-schema-parser": "^4.0.4", "@swc/core": "^1.3.5", "@swc/jest": "^0.2.23", + "@types/node": "^20.3.3", "alterschema": "^1.1.2", "change-case": "^4.1.2", + "cross-env": "^7.0.3", "openapi-types": "9.3.0", - "typescript-json-schema": "^0.57.0" + "typescript-json-schema": "^0.58.1" }, "devDependencies": { "@asyncapi/parserV1": "npm:@asyncapi/parser@^1.17.2", - "@netlify/plugin-nextjs": "4.32.2", "@types/jest": "^27.0.2", - "@typescript-eslint/eslint-plugin": "^4.33.0", - "@typescript-eslint/parser": "^4.33.0", + "@typescript-eslint/eslint-plugin": "^6.7.5", + "@typescript-eslint/parser": "^6.7.5", "ajv": "^8.6.3", "concurrently": "^7.5.0", - "cross-env": "^7.0.3", - "eslint": "7.32.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-github": "^4.3.2", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-security": "^1.4.0", - "eslint-plugin-sonarjs": "^0.10.0", + "eslint": "^8.51.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-github": "^4.10.1", + "eslint-plugin-jest": "^27.2.1", + "eslint-plugin-prettier": "^5.0.1", + "eslint-plugin-security": "^1.7.1", + "eslint-plugin-sonarjs": "^0.19.0", "jest": "^27.2.5", "markdown-toc": "^1.2.0", - "puppeteer": "^16.0.0", "ts-jest": "^27.0.5", "ts-node": "^10.3.0", "typedoc": "^0.24.8", @@ -85,8 +85,11 @@ "test:library": "cross-env CI=true jest --coverage --testPathIgnorePatterns ./test/blackbox --testPathIgnorePatterns ./test/runtime --testPathIgnorePatterns ./examples", "test:examples": "npm run test:examples:regular && npm run test:examples:websites", "test:examples:update": "npm run test:examples:regular -- -u && npm run test:examples:websites -- -u", - "test:examples:regular": "cross-env CI=true jest ./examples --testPathIgnorePatterns ./examples/integrate-with-react", - "test:examples:websites": "cd ./examples/integrate-with-react && npm i && npm run test", + "test:examples:regular": "cross-env CI=true jest ./examples --testPathIgnorePatterns ./examples/integrate-with-react --testPathIgnorePatterns ./examples/integrate-with-next", + "test:examples:websites": "npm run test:examples:react && npm run test:examples:next", + "test:examples:websites:update": "npm run test:examples:react -- -u && npm run test:examples:next -- -u", + "test:examples:react": "cd ./examples/integrate-with-react && npm i && npm run test", + "test:examples:next": "cd ./examples/integrate-with-next && npm i && npm run test", "test:blackbox": "concurrently --group -n csharp,go,java,javascript,php,python,rust,typescript,kotlin,cplusplus \"npm run test:blackbox:csharp\" \"npm run test:blackbox:go\" \"npm run test:blackbox:java\" \"npm run test:blackbox:javascript\" \"npm run test:blackbox:php\" \"npm run test:blackbox:python\" \"npm run test:blackbox:rust\" \"npm run test:blackbox:typescript\" \"npm run test:blackbox:kotlin\" \"npm run test:blackbox:cplusplus\"", "test:blackbox:csharp": "cross-env CI=true jest ./test/blackbox/blackbox-csharp.spec.ts", "test:blackbox:go": "cross-env CI=true jest ./test/blackbox/blackbox-go.spec.ts", diff --git a/src/generators/AbstractGenerator.ts b/src/generators/AbstractGenerator.ts index 57fc528795..e3d238f73c 100644 --- a/src/generators/AbstractGenerator.ts +++ b/src/generators/AbstractGenerator.ts @@ -6,7 +6,9 @@ import { RenderOutput, ProcessorOptions, MetaModel, - ConstrainedMetaModel + ConstrainedMetaModel, + UnionModel, + ConstrainedUnionModel } from '../models'; import { InputProcessor } from '../processors'; import { IndentationTypes } from '../helpers'; @@ -15,7 +17,8 @@ import { AbstractDependencyManager } from './AbstractDependencyManager'; export interface CommonGeneratorOptions< P extends Preset = Preset, - DependencyManager extends AbstractDependencyManager = AbstractDependencyManager + DependencyManager extends + AbstractDependencyManager = AbstractDependencyManager > { indentation?: { type: IndentationTypes; @@ -41,6 +44,25 @@ export const defaultGeneratorOptions: CommonGeneratorOptions = { } }; +export interface AbstractGeneratorRenderArgs< + Options extends CommonGeneratorOptions, + ConstrainedModel = ConstrainedMetaModel +> { + constrainedModel: ConstrainedModel; + inputModel: InputMetaModel; + options?: DeepPartial; +} + +export interface AbstractGeneratorRenderCompleteModelArgs< + Options extends CommonGeneratorOptions, + RenderCompleteModelOptions +> { + constrainedModel: ConstrainedMetaModel; + inputModel: InputMetaModel; + completeOptions: Partial; + options?: DeepPartial; +} + /** * Abstract generator which must be implemented by each language */ @@ -54,15 +76,13 @@ export abstract class AbstractGenerator< ) {} public abstract render( - model: MetaModel, - inputModel: InputMetaModel, - options?: DeepPartial + args: AbstractGeneratorRenderArgs ): Promise; public abstract renderCompleteModel( - model: MetaModel, - inputModel: InputMetaModel, - completeOptions: Partial, - options?: DeepPartial + args: AbstractGeneratorRenderCompleteModelArgs< + Options, + RenderCompleteModelOptions + > ): Promise; public abstract constrainToMetaModel( model: MetaModel, @@ -97,6 +117,78 @@ export abstract class AbstractGenerator< return options.dependencyManager; } + /** + * Generates an array of ConstrainedMetaModel with its dependency manager from an InputMetaModel. + * It also adds parents to the ConstrainedMetaModel's which can be used in renderers which needs to know what parents they belong to. + */ + private getConstrainedModels(inputModel: InputMetaModel): Array<{ + constrainedModel: ConstrainedMetaModel; + dependencyManager: AbstractDependencyManager; + }> { + interface ConstrainedMetaModelWithDepManager { + constrainedModel: ConstrainedMetaModel; + dependencyManager: AbstractDependencyManager; + } + + const getConstrainedMetaModelWithDepManager = ( + model: MetaModel + ): ConstrainedMetaModelWithDepManager => { + const dependencyManager = this.getDependencyManager(this.options); + const constrainedModel = this.constrainToMetaModel(model, { + dependencyManager + } as DeepPartial); + return { + constrainedModel, + dependencyManager + }; + }; + + const unionConstrainedModelsWithDepManager: ConstrainedMetaModelWithDepManager[] = + []; + const constrainedModelsWithDepManager: ConstrainedMetaModelWithDepManager[] = + []; + + for (const model of Object.values(inputModel.models)) { + if (model instanceof UnionModel) { + unionConstrainedModelsWithDepManager.push( + getConstrainedMetaModelWithDepManager(model) + ); + continue; + } + + constrainedModelsWithDepManager.push( + getConstrainedMetaModelWithDepManager(model) + ); + } + + for (const { constrainedModel } of constrainedModelsWithDepManager) { + for (const unionConstrainedModel of unionConstrainedModelsWithDepManager) { + if ( + unionConstrainedModel.constrainedModel instanceof + ConstrainedUnionModel && + unionConstrainedModel.constrainedModel.union.some( + (m) => + m.name === constrainedModel.name && + m.type === constrainedModel.type + ) + ) { + if (!constrainedModel.options.parents) { + constrainedModel.options.parents = []; + } + + constrainedModel.options.parents.push( + unionConstrainedModel.constrainedModel + ); + } + } + } + + return [ + ...unionConstrainedModelsWithDepManager, + ...constrainedModelsWithDepManager + ]; + } + /** * Generates the full output of a model, instead of a scattered model. * @@ -108,26 +200,26 @@ export abstract class AbstractGenerator< completeOptions: Partial ): Promise { const inputModel = await this.processInput(input); - const renders = Object.values(inputModel.models).map(async (model) => { - const dependencyManager = this.getDependencyManager(this.options); - const constrainedModel = this.constrainToMetaModel(model, { - dependencyManager - } as DeepPartial); - const renderedOutput = await this.renderCompleteModel( - constrainedModel, - inputModel, - completeOptions, - { dependencyManager } as DeepPartial - ); - return OutputModel.toOutputModel({ - result: renderedOutput.result, - modelName: renderedOutput.renderedName, - dependencies: renderedOutput.dependencies, - model: constrainedModel, - inputModel - }); - }); - return Promise.all(renders); + + return Promise.all( + this.getConstrainedModels(inputModel).map( + async ({ constrainedModel, dependencyManager }) => { + const renderedOutput = await this.renderCompleteModel({ + constrainedModel, + inputModel, + completeOptions, + options: { dependencyManager } as DeepPartial + }); + return OutputModel.toOutputModel({ + result: renderedOutput.result, + modelName: renderedOutput.renderedName, + dependencies: renderedOutput.dependencies, + model: constrainedModel, + inputModel + }); + } + ) + ); } /** @@ -135,23 +227,27 @@ export abstract class AbstractGenerator< */ public async generate(input: any | InputMetaModel): Promise { const inputModel = await this.processInput(input); - const renders = Object.values(inputModel.models).map(async (model) => { - const dependencyManager = this.getDependencyManager(this.options); - const constrainedModel = this.constrainToMetaModel(model, { - dependencyManager - } as DeepPartial); - const renderedOutput = await this.render(constrainedModel, inputModel, { - dependencyManager - } as DeepPartial); - return OutputModel.toOutputModel({ - result: renderedOutput.result, - modelName: renderedOutput.renderedName, - dependencies: renderedOutput.dependencies, - model: constrainedModel, - inputModel - }); - }); - return Promise.all(renders); + + return Promise.all( + this.getConstrainedModels(inputModel).map( + async ({ constrainedModel, dependencyManager }) => { + const renderedOutput = await this.render({ + constrainedModel, + inputModel, + options: { + dependencyManager + } as DeepPartial + }); + return OutputModel.toOutputModel({ + result: renderedOutput.result, + modelName: renderedOutput.renderedName, + dependencies: renderedOutput.dependencies, + model: constrainedModel, + inputModel + }); + } + ) + ); } /** diff --git a/src/generators/cplusplus/CplusplusConstrainer.ts b/src/generators/cplusplus/CplusplusConstrainer.ts index b513a2b25c..e45eba2864 100644 --- a/src/generators/cplusplus/CplusplusConstrainer.ts +++ b/src/generators/cplusplus/CplusplusConstrainer.ts @@ -8,6 +8,7 @@ import { defaultModelNameConstraints } from './constrainer/ModelNameConstrainer' import { defaultPropertyKeyConstraints } from './constrainer/PropertyKeyConstrainer'; import { CplusplusDependencyManager } from './CplusplusDependencyManager'; import { CplusplusOptions } from './CplusplusGenerator'; +import { defaultConstantConstraints } from './constrainer/ConstantConstrainer'; function ensureOptional( type: string, @@ -106,5 +107,6 @@ export const CplusplusDefaultConstraints = { enumKey: defaultEnumKeyConstraints(), enumValue: defaultEnumValueConstraints(), modelName: defaultModelNameConstraints(), - propertyKey: defaultPropertyKeyConstraints() + propertyKey: defaultPropertyKeyConstraints(), + constant: defaultConstantConstraints() }; diff --git a/src/generators/cplusplus/CplusplusDependencyManager.ts b/src/generators/cplusplus/CplusplusDependencyManager.ts index 8d30874de7..7cc281d4ea 100644 --- a/src/generators/cplusplus/CplusplusDependencyManager.ts +++ b/src/generators/cplusplus/CplusplusDependencyManager.ts @@ -2,7 +2,10 @@ import { AbstractDependencyManager } from '../AbstractDependencyManager'; import { CplusplusOptions } from './CplusplusGenerator'; export class CplusplusDependencyManager extends AbstractDependencyManager { - constructor(public options: CplusplusOptions, dependencies: string[] = []) { + constructor( + public options: CplusplusOptions, + dependencies: string[] = [] + ) { super(dependencies); } } diff --git a/src/generators/cplusplus/CplusplusGenerator.ts b/src/generators/cplusplus/CplusplusGenerator.ts index d3d2e57604..77654d8e24 100644 --- a/src/generators/cplusplus/CplusplusGenerator.ts +++ b/src/generators/cplusplus/CplusplusGenerator.ts @@ -1,5 +1,7 @@ import { AbstractGenerator, + AbstractGeneratorRenderArgs, + AbstractGeneratorRenderCompleteModelArgs, CommonGeneratorOptions, defaultGeneratorOptions } from '../AbstractGenerator'; @@ -121,26 +123,32 @@ export class CplusplusGenerator extends AbstractGenerator< * @param inputModel */ render( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - options?: DeepPartial + args: AbstractGeneratorRenderArgs ): Promise { const optionsToUse = CplusplusGenerator.getOptions({ ...this.options, - ...options + ...args.options }); if (isReservedCplusplusKeyword(optionsToUse.namespace)) { throw new Error( `You cannot use reserved C++ keyword (${optionsToUse.namespace}) as namespace, please use another.` ); } - if (model instanceof ConstrainedObjectModel) { - return this.renderClass(model, inputModel, optionsToUse); - } else if (model instanceof ConstrainedEnumModel) { - return this.renderEnum(model, inputModel, optionsToUse); + if (args.constrainedModel instanceof ConstrainedObjectModel) { + return this.renderClass( + args.constrainedModel, + args.inputModel, + optionsToUse + ); + } else if (args.constrainedModel instanceof ConstrainedEnumModel) { + return this.renderEnum( + args.constrainedModel, + args.inputModel, + optionsToUse + ); } Logger.warn( - `C++ generator, cannot generate this type of model, ${model.name}` + `C++ generator, cannot generate this type of model, ${args.constrainedModel.name}` ); return Promise.resolve( RenderOutput.toRenderOutput({ @@ -161,30 +169,35 @@ export class CplusplusGenerator extends AbstractGenerator< * @param options used to render the full output */ async renderCompleteModel( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - completeModelOptions: Partial, - options: DeepPartial + args: AbstractGeneratorRenderCompleteModelArgs< + CplusplusOptions, + CplusplusRenderCompleteModelOptions + > ): Promise { // eslint-disable-next-line @typescript-eslint/no-unused-vars const completeModelOptionsToUse = mergePartialAndDefault( CplusplusGenerator.defaultCompleteModelOptions, - completeModelOptions + args.completeOptions ) as CplusplusRenderCompleteModelOptions; const optionsToUse = CplusplusGenerator.getOptions({ ...this.options, - ...options + ...args.options }); const dependencyManagerToUse = this.getDependencyManager(optionsToUse); - const outputModel = await this.render(model, inputModel, { - ...optionsToUse, - dependencyManager: dependencyManagerToUse + const outputModel = await this.render({ + ...args, + options: { + ...optionsToUse, + dependencyManager: dependencyManagerToUse + } }); - const imports = model.getNearestDependencies().map((model) => { - return `#include "${model.name}.hpp"`; - }); + const imports = args.constrainedModel + .getNearestDependencies() + .map((model) => { + return `#include "${model.name}.hpp"`; + }); const formattedOutputResult = FormatHelpers.indent( outputModel.result, 2, diff --git a/src/generators/cplusplus/constrainer/ConstantConstrainer.ts b/src/generators/cplusplus/constrainer/ConstantConstrainer.ts new file mode 100644 index 0000000000..2c076ad46d --- /dev/null +++ b/src/generators/cplusplus/constrainer/ConstantConstrainer.ts @@ -0,0 +1,7 @@ +import { ConstantConstraint } from '../../../helpers'; + +export function defaultConstantConstraints(): ConstantConstraint { + return () => { + return undefined; + }; +} diff --git a/src/generators/csharp/CSharpConstrainer.ts b/src/generators/csharp/CSharpConstrainer.ts index cc4ee0b766..463cf8b784 100644 --- a/src/generators/csharp/CSharpConstrainer.ts +++ b/src/generators/csharp/CSharpConstrainer.ts @@ -1,3 +1,4 @@ +import { Constraints } from '../../helpers'; import { ConstrainedEnumValueModel, ConstrainedObjectPropertyModel @@ -8,6 +9,7 @@ import { } from './constrainer/EnumConstrainer'; import { defaultModelNameConstraints } from './constrainer/ModelNameConstrainer'; import { defaultPropertyKeyConstraints } from './constrainer/PropertyKeyConstrainer'; +import { defaultConstantConstraints } from './constrainer/ConstantConstrainer'; import { CSharpTypeMapping } from './CSharpGenerator'; function getFullTypeDefinition( @@ -100,9 +102,10 @@ export const CSharpDefaultTypeMapping: CSharpTypeMapping = { } }; -export const CSharpDefaultConstraints = { +export const CSharpDefaultConstraints: Constraints = { enumKey: defaultEnumKeyConstraints(), enumValue: defaultEnumValueConstraints(), modelName: defaultModelNameConstraints(), - propertyKey: defaultPropertyKeyConstraints() + propertyKey: defaultPropertyKeyConstraints(), + constant: defaultConstantConstraints() }; diff --git a/src/generators/csharp/CSharpDependencyManager.ts b/src/generators/csharp/CSharpDependencyManager.ts index 50d578606b..34e3345e31 100644 --- a/src/generators/csharp/CSharpDependencyManager.ts +++ b/src/generators/csharp/CSharpDependencyManager.ts @@ -2,7 +2,10 @@ import { AbstractDependencyManager } from '../AbstractDependencyManager'; import { CSharpOptions } from './CSharpGenerator'; export class CSharpDependencyManager extends AbstractDependencyManager { - constructor(public options: CSharpOptions, dependencies: string[] = []) { + constructor( + public options: CSharpOptions, + dependencies: string[] = [] + ) { super(dependencies); } } diff --git a/src/generators/csharp/CSharpGenerator.ts b/src/generators/csharp/CSharpGenerator.ts index b9018b88eb..39d14f7c2e 100644 --- a/src/generators/csharp/CSharpGenerator.ts +++ b/src/generators/csharp/CSharpGenerator.ts @@ -1,5 +1,7 @@ import { AbstractGenerator, + AbstractGeneratorRenderArgs, + AbstractGeneratorRenderCompleteModelArgs, CommonGeneratorOptions, defaultGeneratorOptions } from '../AbstractGenerator'; @@ -146,18 +148,18 @@ export class CSharpGenerator extends AbstractGenerator< * @param options used to render the full output */ async renderCompleteModel( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - completeModelOptions: DeepPartial, - options: DeepPartial + args: AbstractGeneratorRenderCompleteModelArgs< + CSharpOptions, + CSharpRenderCompleteModelOptions + > ): Promise { const completeModelOptionsToUse = mergePartialAndDefault( CSharpGenerator.defaultCompleteModelOptions, - completeModelOptions + args.completeOptions ) as CSharpRenderCompleteModelOptions; const optionsToUse = CSharpGenerator.getCSharpOptions({ ...this.options, - ...options + ...args.options }); if (isReservedCSharpKeyword(completeModelOptionsToUse.namespace)) { throw new Error( @@ -165,7 +167,10 @@ export class CSharpGenerator extends AbstractGenerator< ); } - const outputModel = await this.render(model, inputModel); + const outputModel = await this.render({ + ...args, + options: optionsToUse + }); const outputDependencies = outputModel.dependencies.length === 0 @@ -189,24 +194,34 @@ ${FormatHelpers.indent( } render( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - options?: DeepPartial + args: AbstractGeneratorRenderArgs ): Promise { const optionsToUse = CSharpGenerator.getCSharpOptions({ ...this.options, - ...options + ...args.options }); - if (model instanceof ConstrainedObjectModel) { + if (args.constrainedModel instanceof ConstrainedObjectModel) { if (this.options.modelType === 'record') { - return this.renderRecord(model, inputModel, optionsToUse); + return this.renderRecord( + args.constrainedModel, + args.inputModel, + optionsToUse + ); } - return this.renderClass(model, inputModel, optionsToUse); - } else if (model instanceof ConstrainedEnumModel) { - return this.renderEnum(model, inputModel, optionsToUse); + return this.renderClass( + args.constrainedModel, + args.inputModel, + optionsToUse + ); + } else if (args.constrainedModel instanceof ConstrainedEnumModel) { + return this.renderEnum( + args.constrainedModel, + args.inputModel, + optionsToUse + ); } Logger.warn( - `C# generator, cannot generate this type of model, ${model.name}` + `C# generator, cannot generate this type of model, ${args.constrainedModel.name}` ); return Promise.resolve( RenderOutput.toRenderOutput({ diff --git a/src/generators/csharp/constrainer/ConstantConstrainer.ts b/src/generators/csharp/constrainer/ConstantConstrainer.ts new file mode 100644 index 0000000000..2c076ad46d --- /dev/null +++ b/src/generators/csharp/constrainer/ConstantConstrainer.ts @@ -0,0 +1,7 @@ +import { ConstantConstraint } from '../../../helpers'; + +export function defaultConstantConstraints(): ConstantConstraint { + return () => { + return undefined; + }; +} diff --git a/src/generators/dart/DartConstrainer.ts b/src/generators/dart/DartConstrainer.ts index ca6b22bab5..cb154fb017 100644 --- a/src/generators/dart/DartConstrainer.ts +++ b/src/generators/dart/DartConstrainer.ts @@ -1,9 +1,11 @@ +import { Constraints } from '../../helpers'; import { defaultEnumKeyConstraints, defaultEnumValueConstraints } from './constrainer/EnumConstrainer'; import { defaultModelNameConstraints } from './constrainer/ModelNameConstrainer'; import { defaultPropertyKeyConstraints } from './constrainer/PropertyKeyConstrainer'; +import { defaultConstantConstraints } from './constrainer/ConstantConstrainer'; import { DartTypeMapping } from './DartGenerator'; export const DartDefaultTypeMapping: DartTypeMapping = { @@ -69,9 +71,10 @@ export const DartDefaultTypeMapping: DartTypeMapping = { } }; -export const DartDefaultConstraints = { +export const DartDefaultConstraints: Constraints = { enumKey: defaultEnumKeyConstraints(), enumValue: defaultEnumValueConstraints(), modelName: defaultModelNameConstraints(), - propertyKey: defaultPropertyKeyConstraints() + propertyKey: defaultPropertyKeyConstraints(), + constant: defaultConstantConstraints() }; diff --git a/src/generators/dart/DartDependencyManager.ts b/src/generators/dart/DartDependencyManager.ts index 9769738a1f..091030e994 100644 --- a/src/generators/dart/DartDependencyManager.ts +++ b/src/generators/dart/DartDependencyManager.ts @@ -4,7 +4,10 @@ import { AbstractDependencyManager } from '../AbstractDependencyManager'; import { DartOptions } from './DartGenerator'; export class DartDependencyManager extends AbstractDependencyManager { - constructor(public options: DartOptions, dependencies: string[] = []) { + constructor( + public options: DartOptions, + dependencies: string[] = [] + ) { super(dependencies); } diff --git a/src/generators/dart/DartGenerator.ts b/src/generators/dart/DartGenerator.ts index 5fdf6280c9..c924f851ca 100644 --- a/src/generators/dart/DartGenerator.ts +++ b/src/generators/dart/DartGenerator.ts @@ -1,5 +1,7 @@ import { AbstractGenerator, + AbstractGeneratorRenderArgs, + AbstractGeneratorRenderCompleteModelArgs, CommonGeneratorOptions, defaultGeneratorOptions } from '../AbstractGenerator'; @@ -121,21 +123,27 @@ export class DartGenerator extends AbstractGenerator< * @param inputModel */ render( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - options?: DeepPartial + args: AbstractGeneratorRenderArgs ): Promise { const optionsToUse = DartGenerator.getDartOptions({ ...this.options, - ...options + ...args.options }); - if (model instanceof ConstrainedObjectModel) { - return this.renderClass(model, inputModel, optionsToUse); - } else if (model instanceof ConstrainedEnumModel) { - return this.renderEnum(model, inputModel, optionsToUse); + if (args.constrainedModel instanceof ConstrainedObjectModel) { + return this.renderClass( + args.constrainedModel, + args.inputModel, + optionsToUse + ); + } else if (args.constrainedModel instanceof ConstrainedEnumModel) { + return this.renderEnum( + args.constrainedModel, + args.inputModel, + optionsToUse + ); } Logger.warn( - `Dart generator, cannot generate this type of model, ${model.name}` + `Dart generator, cannot generate this type of model, ${args.constrainedModel.name}` ); return Promise.resolve( RenderOutput.toRenderOutput({ @@ -156,18 +164,18 @@ export class DartGenerator extends AbstractGenerator< * @param options used to render the full output */ async renderCompleteModel( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - completeModelOptions: Partial, - options: DeepPartial + args: AbstractGeneratorRenderCompleteModelArgs< + DartOptions, + DartRenderCompleteModelOptions + > ): Promise { const completeModelOptionsToUse = mergePartialAndDefault( DartGenerator.defaultCompleteModelOptions, - completeModelOptions + args.completeOptions ) as DartRenderCompleteModelOptions; const optionsToUse = DartGenerator.getDartOptions({ ...this.options, - ...options + ...args.options }); const dependencyManagerToUse = this.getDependencyManager(optionsToUse); if (isReservedDartKeyword(completeModelOptionsToUse.packageName)) { @@ -176,9 +184,9 @@ export class DartGenerator extends AbstractGenerator< ); } - const outputModel = await this.render(model, inputModel, optionsToUse); + const outputModel = await this.render({ ...args, options: optionsToUse }); const modelDependencies = dependencyManagerToUse.renderAllModelDependencies( - model, + args.constrainedModel, completeModelOptionsToUse.packageName ); const outputContent = `${modelDependencies} diff --git a/src/generators/dart/constrainer/ConstantConstrainer.ts b/src/generators/dart/constrainer/ConstantConstrainer.ts new file mode 100644 index 0000000000..2c076ad46d --- /dev/null +++ b/src/generators/dart/constrainer/ConstantConstrainer.ts @@ -0,0 +1,7 @@ +import { ConstantConstraint } from '../../../helpers'; + +export function defaultConstantConstraints(): ConstantConstraint { + return () => { + return undefined; + }; +} diff --git a/src/generators/go/GoConstrainer.ts b/src/generators/go/GoConstrainer.ts index 9a7c2c3b88..b04f8cacc6 100644 --- a/src/generators/go/GoConstrainer.ts +++ b/src/generators/go/GoConstrainer.ts @@ -5,6 +5,7 @@ import { } from './constrainer/EnumConstrainer'; import { defaultModelNameConstraints } from './constrainer/ModelNameConstrainer'; import { defaultPropertyKeyConstraints } from './constrainer/PropertyKeyConstrainer'; +import { defaultConstantConstraints } from './constrainer/ConstantConstrainer'; import { GoTypeMapping } from './GoGenerator'; export const GoDefaultTypeMapping: GoTypeMapping = { @@ -52,5 +53,6 @@ export const GoDefaultConstraints: Constraints = { enumKey: defaultEnumKeyConstraints(), enumValue: defaultEnumValueConstraints(), modelName: defaultModelNameConstraints(), - propertyKey: defaultPropertyKeyConstraints() + propertyKey: defaultPropertyKeyConstraints(), + constant: defaultConstantConstraints() }; diff --git a/src/generators/go/GoDependencyManager.ts b/src/generators/go/GoDependencyManager.ts index bc4d23a61b..33adbed5dd 100644 --- a/src/generators/go/GoDependencyManager.ts +++ b/src/generators/go/GoDependencyManager.ts @@ -2,7 +2,10 @@ import { AbstractDependencyManager } from '../AbstractDependencyManager'; import { GoOptions } from './GoGenerator'; export class GoDependencyManager extends AbstractDependencyManager { - constructor(public options: GoOptions, dependencies: string[] = []) { + constructor( + public options: GoOptions, + dependencies: string[] = [] + ) { super(dependencies); } } diff --git a/src/generators/go/GoGenerator.ts b/src/generators/go/GoGenerator.ts index c4c494ae2e..8fc5f5b3d3 100644 --- a/src/generators/go/GoGenerator.ts +++ b/src/generators/go/GoGenerator.ts @@ -1,5 +1,7 @@ import { AbstractGenerator, + AbstractGeneratorRenderArgs, + AbstractGeneratorRenderCompleteModelArgs, CommonGeneratorOptions, defaultGeneratorOptions } from '../AbstractGenerator'; @@ -113,22 +115,26 @@ export class GoGenerator extends AbstractGenerator< ); } - render( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - options?: DeepPartial - ): Promise { + render(args: AbstractGeneratorRenderArgs): Promise { const optionsToUse = GoGenerator.getGoOptions({ ...this.options, - ...options + ...args.options }); - if (model instanceof ConstrainedObjectModel) { - return this.renderStruct(model, inputModel, optionsToUse); - } else if (model instanceof ConstrainedEnumModel) { - return this.renderEnum(model, inputModel, optionsToUse); + if (args.constrainedModel instanceof ConstrainedObjectModel) { + return this.renderStruct( + args.constrainedModel, + args.inputModel, + optionsToUse + ); + } else if (args.constrainedModel instanceof ConstrainedEnumModel) { + return this.renderEnum( + args.constrainedModel, + args.inputModel, + optionsToUse + ); } Logger.warn( - `Go generator, cannot generate this type of model, ${model.name}` + `Go generator, cannot generate this type of model, ${args.constrainedModel.name}` ); return Promise.resolve( RenderOutput.toRenderOutput({ @@ -147,20 +153,23 @@ export class GoGenerator extends AbstractGenerator< * @param options */ async renderCompleteModel( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - completeModelOptions: Partial, - options: DeepPartial + args: AbstractGeneratorRenderCompleteModelArgs< + GoOptions, + GoRenderCompleteModelOptions + > ): Promise { const completeModelOptionsToUse = mergePartialAndDefault( GoGenerator.defaultCompleteModelOptions, - completeModelOptions + args.completeOptions ) as GoRenderCompleteModelOptions; const optionsToUse = GoGenerator.getGoOptions({ ...this.options, - ...options + ...args.options + }); + const outputModel = await this.render({ + ...args, + options: optionsToUse }); - const outputModel = await this.render(model, inputModel, optionsToUse); let importCode = ''; if (outputModel.dependencies.length > 0) { const dependencies = outputModel.dependencies diff --git a/src/generators/go/constrainer/ConstantConstrainer.ts b/src/generators/go/constrainer/ConstantConstrainer.ts new file mode 100644 index 0000000000..2c076ad46d --- /dev/null +++ b/src/generators/go/constrainer/ConstantConstrainer.ts @@ -0,0 +1,7 @@ +import { ConstantConstraint } from '../../../helpers'; + +export function defaultConstantConstraints(): ConstantConstraint { + return () => { + return undefined; + }; +} diff --git a/src/generators/java/JavaConstrainer.ts b/src/generators/java/JavaConstrainer.ts index 9cd83d6984..2ea330c1bf 100644 --- a/src/generators/java/JavaConstrainer.ts +++ b/src/generators/java/JavaConstrainer.ts @@ -1,15 +1,24 @@ -import { ConstrainedEnumValueModel } from '../../models'; +import { Constraints } from '../../helpers'; +import { + ConstrainedEnumValueModel, + ConstrainedMetaModel, + ConstrainedObjectModel, + ConstrainedObjectPropertyModel, + ConstrainedReferenceModel, + ConstrainedUnionModel +} from '../../models'; import { defaultEnumKeyConstraints, defaultEnumValueConstraints } from './constrainer/EnumConstrainer'; import { defaultModelNameConstraints } from './constrainer/ModelNameConstrainer'; import { defaultPropertyKeyConstraints } from './constrainer/PropertyKeyConstrainer'; +import { defaultConstantConstraints } from './constrainer/ConstantConstrainer'; import { JavaTypeMapping } from './JavaGenerator'; function enumFormatToNumberType( enumValueModel: ConstrainedEnumValueModel, - format: string + format: string | undefined ): string { switch (format) { case 'integer': @@ -32,7 +41,7 @@ function enumFormatToNumberType( const fromEnumValueToType = ( enumValueModel: ConstrainedEnumValueModel, - format: string + format: string | undefined ): string => { switch (typeof enumValueModel.value) { case 'boolean': @@ -72,61 +81,116 @@ const interpretUnionValueType = (types: string[]): string => { return 'Object'; }; +export function unionIncludesBuiltInTypes( + model: ConstrainedUnionModel +): boolean { + return !model.union.every( + (union) => + union instanceof ConstrainedObjectModel || + (union instanceof ConstrainedReferenceModel && + union.ref instanceof ConstrainedObjectModel) + ); +} + +function getType({ + constrainedModel, + partOfProperty, + typeWhenNullableOrOptional, + type +}: { + constrainedModel: ConstrainedMetaModel; + partOfProperty: ConstrainedObjectPropertyModel | undefined; + typeWhenNullableOrOptional: string; + type: string; +}) { + if (constrainedModel.options.isNullable || !partOfProperty?.required) { + return typeWhenNullableOrOptional; + } + + return type; +} + export const JavaDefaultTypeMapping: JavaTypeMapping = { Object({ constrainedModel }): string { return constrainedModel.name; }, Reference({ constrainedModel }): string { + if ( + constrainedModel.ref instanceof ConstrainedUnionModel && + unionIncludesBuiltInTypes(constrainedModel.ref) + ) { + //We only have partial strong typed support for union models + //Use object if the union includes built-in Java types + return 'Object'; + } return constrainedModel.name; }, Any(): string { return 'Object'; }, - Float({ constrainedModel }): string { - let type = 'Double'; - const format = constrainedModel.originalInput?.['format']; - if (format === 'float') { - type = 'float'; + Float({ constrainedModel, partOfProperty }): string { + switch (constrainedModel.options.format) { + case 'float': + return getType({ + constrainedModel, + partOfProperty, + typeWhenNullableOrOptional: 'Float', + type: 'float' + }); + default: + return getType({ + constrainedModel, + partOfProperty, + typeWhenNullableOrOptional: 'Double', + type: 'double' + }); } - return type; }, - Integer({ constrainedModel }): string { - let type = 'Integer'; - const format = constrainedModel.originalInput?.['format']; - switch (format) { + Integer({ constrainedModel, partOfProperty }): string { + const type = getType({ + constrainedModel, + partOfProperty, + typeWhenNullableOrOptional: 'Integer', + type: 'int' + }); + switch (constrainedModel.options.format) { case 'integer': case 'int32': - type = 'int'; - break; + return type; case 'long': case 'int64': - type = 'long'; - break; + return getType({ + constrainedModel, + partOfProperty, + typeWhenNullableOrOptional: 'Long', + type: 'long' + }); + default: + return type; } - return type; }, String({ constrainedModel }): string { - let type = 'String'; - const format = constrainedModel.originalInput?.['format']; - switch (format) { + switch (constrainedModel.options.format) { case 'date': - type = 'java.time.LocalDate'; - break; + return 'java.time.LocalDate'; case 'time': - type = 'java.time.OffsetTime'; - break; + return 'java.time.OffsetTime'; case 'dateTime': case 'date-time': - type = 'java.time.OffsetDateTime'; - break; + return 'java.time.OffsetDateTime'; case 'binary': - type = 'byte[]'; - break; + return 'byte[]'; + default: + return 'String'; } - return type; }, - Boolean(): string { - return 'Boolean'; + Boolean({ constrainedModel, partOfProperty }): string { + return getType({ + constrainedModel, + partOfProperty, + typeWhenNullableOrOptional: 'Boolean', + type: 'boolean' + }); }, Tuple({ options }): string { //Because Java have no notion of tuples (and no custom implementation), we have to render it as a list of any value. @@ -143,9 +207,8 @@ export const JavaDefaultTypeMapping: JavaTypeMapping = { return `${constrainedModel.valueModel.type}[]`; }, Enum({ constrainedModel }): string { - const format = constrainedModel.originalInput?.['format']; const valueTypes = constrainedModel.values.map((enumValue) => - fromEnumValueToType(enumValue, format) + fromEnumValueToType(enumValue, constrainedModel.options.format) ); const uniqueTypes = valueTypes.filter((item, pos) => { return valueTypes.indexOf(item) === pos; @@ -155,11 +218,16 @@ export const JavaDefaultTypeMapping: JavaTypeMapping = { if (uniqueTypes.length > 1) { return interpretUnionValueType(uniqueTypes); } + return uniqueTypes[0]; }, - Union(): string { - //Because Java have no notion of unions (and no custom implementation), we have to render it as any value. - return 'Object'; + Union({ constrainedModel }): string { + if (unionIncludesBuiltInTypes(constrainedModel)) { + //We only have partial strong typed support for union models + //Use object if the union includes built-in Java types + return 'Object'; + } + return constrainedModel.name; }, Dictionary({ constrainedModel }): string { //Limitations to Java is that maps cannot have specific value types... @@ -170,9 +238,10 @@ export const JavaDefaultTypeMapping: JavaTypeMapping = { } }; -export const JavaDefaultConstraints = { +export const JavaDefaultConstraints: Constraints = { enumKey: defaultEnumKeyConstraints(), enumValue: defaultEnumValueConstraints(), modelName: defaultModelNameConstraints(), - propertyKey: defaultPropertyKeyConstraints() + propertyKey: defaultPropertyKeyConstraints(), + constant: defaultConstantConstraints() }; diff --git a/src/generators/java/JavaDependencyManager.ts b/src/generators/java/JavaDependencyManager.ts index d933543510..29922c46da 100644 --- a/src/generators/java/JavaDependencyManager.ts +++ b/src/generators/java/JavaDependencyManager.ts @@ -1,9 +1,19 @@ -import { ConstrainedMetaModel } from '../../models'; +import { + ConstrainedMetaModel, + ConstrainedReferenceModel, + ConstrainedUnionModel +} from '../../models'; import { AbstractDependencyManager } from '../AbstractDependencyManager'; +import { unionIncludesBuiltInTypes } from './JavaConstrainer'; import { JavaOptions } from './JavaGenerator'; export class JavaDependencyManager extends AbstractDependencyManager { - constructor(public options: JavaOptions, dependencies: string[] = []) { + private modelDependencies: ConstrainedMetaModel[] = []; + + constructor( + public options: JavaOptions, + dependencies: string[] = [] + ) { super(dependencies); } @@ -15,11 +25,25 @@ export class JavaDependencyManager extends AbstractDependencyManager { model: ConstrainedMetaModel, packageName: string ): string { - return model - .getNearestDependencies() + return [...this.modelDependencies, ...model.getNearestDependencies()] + .filter((dependencyModel) => { + if (dependencyModel instanceof ConstrainedUnionModel) { + return !unionIncludesBuiltInTypes(dependencyModel); + } else if ( + dependencyModel instanceof ConstrainedReferenceModel && + dependencyModel.ref instanceof ConstrainedUnionModel + ) { + return !unionIncludesBuiltInTypes(dependencyModel.ref); + } + return true; + }) .map((dependencyModel) => { return this.renderImport(dependencyModel, packageName); }) .join('\n'); } + + addModelDependency(model: ConstrainedMetaModel): void { + this.modelDependencies.push(model); + } } diff --git a/src/generators/java/JavaGenerator.ts b/src/generators/java/JavaGenerator.ts index 3161549201..00407aed48 100644 --- a/src/generators/java/JavaGenerator.ts +++ b/src/generators/java/JavaGenerator.ts @@ -1,5 +1,7 @@ import { AbstractGenerator, + AbstractGeneratorRenderArgs, + AbstractGeneratorRenderCompleteModelArgs, CommonGeneratorOptions, defaultGeneratorOptions } from '../AbstractGenerator'; @@ -7,6 +9,7 @@ import { ConstrainedEnumModel, ConstrainedMetaModel, ConstrainedObjectModel, + ConstrainedUnionModel, InputMetaModel, MetaModel, RenderOutput @@ -25,10 +28,12 @@ import { isReservedJavaKeyword } from './Constants'; import { Logger } from '../../'; import { JavaDefaultConstraints, - JavaDefaultTypeMapping + JavaDefaultTypeMapping, + unionIncludesBuiltInTypes } from './JavaConstrainer'; import { DeepPartial, mergePartialAndDefault } from '../../utils/Partials'; import { JavaDependencyManager } from './JavaDependencyManager'; +import { UnionRenderer } from './renderers/UnionRenderer'; export interface JavaOptions extends CommonGeneratorOptions { collectionType: 'List' | 'Array'; @@ -88,7 +93,8 @@ export class JavaGenerator extends AbstractGenerator< //These are the models that we have separate renderers for const metaModelsToSplit: SplitOptions = { splitEnum: true, - splitObject: true + splitObject: true, + splitUnion: true }; return split(model, metaModelsToSplit); } @@ -121,21 +127,36 @@ export class JavaGenerator extends AbstractGenerator< * @param inputModel */ render( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - options?: DeepPartial + args: AbstractGeneratorRenderArgs ): Promise { const optionsToUse = JavaGenerator.getJavaOptions({ ...this.options, - ...options + ...args.options }); - if (model instanceof ConstrainedObjectModel) { - return this.renderClass(model, inputModel, optionsToUse); - } else if (model instanceof ConstrainedEnumModel) { - return this.renderEnum(model, inputModel, optionsToUse); + if (args.constrainedModel instanceof ConstrainedObjectModel) { + return this.renderClass({ + ...args, + constrainedModel: args.constrainedModel, + options: optionsToUse + }); + } else if (args.constrainedModel instanceof ConstrainedEnumModel) { + return this.renderEnum( + args.constrainedModel, + args.inputModel, + optionsToUse + ); + } else if ( + args.constrainedModel instanceof ConstrainedUnionModel && + !unionIncludesBuiltInTypes(args.constrainedModel) + ) { + return this.renderUnion( + args.constrainedModel, + args.inputModel, + optionsToUse + ); } Logger.warn( - `Java generator, cannot generate this type of model, ${model.name}` + `Java generator, cannot generate this type of model, ${args.constrainedModel.name}` ); return Promise.resolve( RenderOutput.toRenderOutput({ @@ -156,26 +177,30 @@ export class JavaGenerator extends AbstractGenerator< * @param options used to render the full output */ async renderCompleteModel( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - completeModelOptions: Partial, - options: DeepPartial + args: AbstractGeneratorRenderCompleteModelArgs< + JavaOptions, + JavaRenderCompleteModelOptions + > ): Promise { - const completeModelOptionsToUse = mergePartialAndDefault( - JavaGenerator.defaultCompleteModelOptions, - completeModelOptions - ) as JavaRenderCompleteModelOptions; + const completeModelOptionsToUse = + mergePartialAndDefault( + JavaGenerator.defaultCompleteModelOptions, + args.completeOptions + ); const optionsToUse = JavaGenerator.getJavaOptions({ ...this.options, - ...options + ...args.options }); const dependencyManagerToUse = this.getDependencyManager(optionsToUse); this.assertPackageIsValid(completeModelOptionsToUse); - const outputModel = await this.render(model, inputModel, optionsToUse); + const outputModel = await this.render({ + ...args, + options: optionsToUse + }); const modelDependencies = dependencyManagerToUse.renderAllModelDependencies( - model, + args.constrainedModel, completeModelOptionsToUse.packageName ); const outputContent = `package ${completeModelOptionsToUse.packageName}; @@ -206,13 +231,11 @@ ${outputModel.result}`; } async renderClass( - model: ConstrainedObjectModel, - inputModel: InputMetaModel, - options?: DeepPartial + args: AbstractGeneratorRenderArgs ): Promise { const optionsToUse = JavaGenerator.getJavaOptions({ ...this.options, - ...options + ...args.options }); const dependencyManagerToUse = this.getDependencyManager(optionsToUse); const presets = this.getPresets('class'); @@ -220,14 +243,14 @@ ${outputModel.result}`; optionsToUse, this, presets, - model, - inputModel, + args.constrainedModel, + args.inputModel, dependencyManagerToUse ); const result = await renderer.runSelfPreset(); return RenderOutput.toRenderOutput({ result, - renderedName: model.name, + renderedName: args.constrainedModel.name, dependencies: dependencyManagerToUse.dependencies }); } @@ -258,4 +281,31 @@ ${outputModel.result}`; dependencies: dependencyManagerToUse.dependencies }); } + + async renderUnion( + model: ConstrainedUnionModel, + inputModel: InputMetaModel, + options: DeepPartial + ): Promise { + const optionsToUse = JavaGenerator.getJavaOptions({ + ...this.options, + ...options + }); + const dependencyManagerToUse = this.getDependencyManager(optionsToUse); + const presets = this.getPresets('union'); + const renderer = new UnionRenderer( + optionsToUse, + this, + presets, + model, + inputModel, + dependencyManagerToUse + ); + const result = await renderer.runSelfPreset(); + return RenderOutput.toRenderOutput({ + result, + renderedName: model.name, + dependencies: dependencyManagerToUse.dependencies + }); + } } diff --git a/src/generators/java/JavaPreset.ts b/src/generators/java/JavaPreset.ts index 970c335d75..b6393e887d 100644 --- a/src/generators/java/JavaPreset.ts +++ b/src/generators/java/JavaPreset.ts @@ -1,10 +1,13 @@ +import { AbstractRenderer } from '../../generators/AbstractRenderer'; import { Preset, ClassPreset, EnumPreset, PresetArgs, EnumArgs, - ConstrainedEnumModel + ConstrainedEnumModel, + CommonPreset, + ConstrainedUnionModel } from '../../models'; import { JavaOptions } from './JavaGenerator'; import { @@ -15,6 +18,10 @@ import { EnumRenderer, JAVA_DEFAULT_ENUM_PRESET } from './renderers/EnumRenderer'; +import { + JAVA_DEFAULT_UNION_PRESET, + UnionRenderer +} from './renderers/UnionRenderer'; export type ClassPresetType = ClassPreset; export interface EnumPresetType extends EnumPreset { @@ -29,12 +36,23 @@ export interface EnumPresetType extends EnumPreset { ) => string; } +export type UnionPresetType = UnionPreset; + +export interface UnionPreset + extends CommonPreset { + discriminatorGetter?: ( + args: PresetArgs + ) => string; +} + export type JavaPreset = Preset<{ class: ClassPresetType; enum: EnumPresetType; + union: UnionPresetType; }>; export const JAVA_DEFAULT_PRESET: JavaPreset = { class: JAVA_DEFAULT_CLASS_PRESET, - enum: JAVA_DEFAULT_ENUM_PRESET + enum: JAVA_DEFAULT_ENUM_PRESET, + union: JAVA_DEFAULT_UNION_PRESET }; diff --git a/src/generators/java/JavaRenderer.ts b/src/generators/java/JavaRenderer.ts index cd357421ff..f8dfbcf983 100644 --- a/src/generators/java/JavaRenderer.ts +++ b/src/generators/java/JavaRenderer.ts @@ -54,4 +54,19 @@ ${newLiteral} } return values !== undefined ? `${name}(${values})` : name; } + + static renderStringLiteral(value: string): string { + const escaped = value + .replace(/\\/g, '\\\\') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/\f/g, '\\f') + .replace(/"/g, '\\"'); + return `"${escaped}"`; + } + + renderStringLiteral(value: string): string { + return JavaRenderer.renderStringLiteral(value); + } } diff --git a/src/generators/java/constrainer/ConstantConstrainer.ts b/src/generators/java/constrainer/ConstantConstrainer.ts new file mode 100644 index 0000000000..b21eaf5ba6 --- /dev/null +++ b/src/generators/java/constrainer/ConstantConstrainer.ts @@ -0,0 +1,54 @@ +import { + ConstrainedEnumModel, + ConstrainedMetaModel, + ConstrainedMetaModelOptionsConst, + ConstrainedReferenceModel, + ConstrainedStringModel +} from '../../../models'; +import { ConstantConstraint } from '../../../helpers'; +import { JavaRenderer } from '../JavaRenderer'; + +const getConstrainedEnumModelConstant = (args: { + constrainedMetaModel: ConstrainedMetaModel; + constrainedEnumModel: ConstrainedEnumModel; + constOptions: ConstrainedMetaModelOptionsConst; +}) => { + const constrainedEnumValueModel = args.constrainedEnumModel.values.find( + (value) => value.originalInput === args.constOptions.originalInput + ); + + if (constrainedEnumValueModel) { + return `${args.constrainedMetaModel.type}.${constrainedEnumValueModel.key}`; + } +}; + +export function defaultConstantConstraints(): ConstantConstraint { + return ({ constrainedMetaModel }) => { + const constOptions = constrainedMetaModel.options.const; + + if (!constOptions) { + return undefined; + } + + if ( + constrainedMetaModel instanceof ConstrainedReferenceModel && + constrainedMetaModel.ref instanceof ConstrainedEnumModel + ) { + return getConstrainedEnumModelConstant({ + constrainedMetaModel, + constrainedEnumModel: constrainedMetaModel.ref, + constOptions + }); + } else if (constrainedMetaModel instanceof ConstrainedEnumModel) { + return getConstrainedEnumModelConstant({ + constrainedMetaModel, + constrainedEnumModel: constrainedMetaModel, + constOptions + }); + } else if (constrainedMetaModel instanceof ConstrainedStringModel) { + return JavaRenderer.renderStringLiteral(`${constOptions.originalInput}`); + } + + return undefined; + }; +} diff --git a/src/generators/java/presets/ConstraintsPreset.ts b/src/generators/java/presets/ConstraintsPreset.ts index 9e067d3533..7e684a262d 100644 --- a/src/generators/java/presets/ConstraintsPreset.ts +++ b/src/generators/java/presets/ConstraintsPreset.ts @@ -33,7 +33,9 @@ export const JAVA_CONSTRAINTS_PRESET: JavaPreset = { const pattern = originalInput['pattern']; if (pattern !== undefined) { annotations.push( - renderer.renderAnnotation('Pattern', { regexp: `"${pattern}"` }) + renderer.renderAnnotation('Pattern', { + regexp: renderer.renderStringLiteral(pattern) + }) ); } const minLength = originalInput['minLength']; diff --git a/src/generators/java/presets/JacksonPreset.ts b/src/generators/java/presets/JacksonPreset.ts index 939e1c1b99..c0a95ed026 100644 --- a/src/generators/java/presets/JacksonPreset.ts +++ b/src/generators/java/presets/JacksonPreset.ts @@ -1,6 +1,13 @@ -import { ConstrainedDictionaryModel } from '../../../models'; +import { + ConstrainedDictionaryModel, + ConstrainedObjectModel, + ConstrainedReferenceModel +} from '../../../models'; import { JavaPreset } from '../JavaPreset'; +const JACKSON_ANNOTATION_DEPENDENCY = + 'import com.fasterxml.jackson.annotation.*;'; + /** * Preset which adds `com.fasterxml.jackson` related annotations to class's property getters. * @@ -9,9 +16,7 @@ import { JavaPreset } from '../JavaPreset'; export const JAVA_JACKSON_PRESET: JavaPreset = { class: { self({ renderer, content }) { - renderer.dependencyManager.addDependency( - 'import com.fasterxml.jackson.annotation.*;' - ); + renderer.dependencyManager.addDependency(JACKSON_ANNOTATION_DEPENDENCY); return content; }, property({ renderer, property, content }) { @@ -22,21 +27,48 @@ export const JAVA_JACKSON_PRESET: JavaPreset = { isDictionary && (property.property as ConstrainedDictionaryModel).serializationType === 'unwrap'; - if (!hasUnwrappedOptions) { - const annotation = renderer.renderAnnotation( + + const blocks: string[] = []; + + if (hasUnwrappedOptions) { + if (!property.required) { + blocks.push( + renderer.renderAnnotation( + 'JsonInclude', + 'JsonInclude.Include.NON_NULL' + ) + ); + } + + blocks.push(content); + + return renderer.renderBlock(blocks); + } + + blocks.push( + renderer.renderAnnotation( 'JsonProperty', `"${property.unconstrainedPropertyName}"` + ) + ); + + if (!property.required) { + blocks.push( + renderer.renderAnnotation( + 'JsonInclude', + 'JsonInclude.Include.NON_NULL' + ) ); - return renderer.renderBlock([annotation, content]); } - return renderer.renderBlock([content]); + + blocks.push(content); + + return renderer.renderBlock(blocks); } }, enum: { self({ renderer, content }) { - renderer.dependencyManager.addDependency( - 'import com.fasterxml.jackson.annotation.*;' - ); + renderer.dependencyManager.addDependency(JACKSON_ANNOTATION_DEPENDENCY); return content; }, getValue({ content }) { @@ -47,5 +79,70 @@ ${content}`; return `@JsonCreator ${content}`; } + }, + union: { + self({ renderer, content, model }) { + renderer.dependencyManager.addDependency(JACKSON_ANNOTATION_DEPENDENCY); + + const blocks: string[] = []; + + if (model.options.discriminator) { + const { discriminator } = model.options; + blocks.push( + renderer.renderAnnotation('JsonTypeInfo', { + use: 'JsonTypeInfo.Id.NAME', + include: 'JsonTypeInfo.As.EXISTING_PROPERTY', + property: `"${discriminator.discriminator}"`, + visible: 'true' + }) + ); + + const types = model.union + .map((union) => { + if ( + union instanceof ConstrainedReferenceModel && + union.ref instanceof ConstrainedObjectModel + ) { + const discriminatorProp = Object.values( + union.ref.properties + ).find( + (model) => + model.unconstrainedPropertyName === + discriminator.discriminator + ); + + if (discriminatorProp?.property.options.const) { + return ` @JsonSubTypes.Type(value = ${union.name}.class, name = "${discriminatorProp.property.options.const.originalInput}")`; + } + } + + return ` @JsonSubTypes.Type(value = ${union.name}.class, name = "${union.name}")`; + }) + .join(',\n'); + + blocks.push( + renderer.renderAnnotation('JsonSubTypes', `{\n${types}\n}`) + ); + } else { + blocks.push( + renderer.renderAnnotation('JsonTypeInfo', { + use: 'JsonTypeInfo.Id.DEDUCTION' + }) + ); + + const types = model.union + .map( + (union) => + ` @JsonSubTypes.Type(value = ${union.name}.class, name = "${union.name}")` + ) + .join(',\n'); + + blocks.push( + renderer.renderAnnotation('JsonSubTypes', `{\n${types}\n}`) + ); + } + + return renderer.renderBlock([...blocks, content]); + } } }; diff --git a/src/generators/java/renderers/ClassRenderer.ts b/src/generators/java/renderers/ClassRenderer.ts index d3fd211997..072408b3fd 100644 --- a/src/generators/java/renderers/ClassRenderer.ts +++ b/src/generators/java/renderers/ClassRenderer.ts @@ -2,11 +2,13 @@ import { JavaRenderer } from '../JavaRenderer'; import { ConstrainedDictionaryModel, ConstrainedObjectModel, - ConstrainedObjectPropertyModel + ConstrainedObjectPropertyModel, + ConstrainedUnionModel } from '../../../models'; import { FormatHelpers } from '../../../helpers'; import { JavaOptions } from '../JavaGenerator'; import { ClassPresetType } from '../JavaPreset'; +import { unionIncludesBuiltInTypes } from '../JavaConstrainer'; /** * Renderer for Java's `class` type @@ -29,6 +31,20 @@ export class ClassRenderer extends JavaRenderer { this.dependencyManager.addDependency('import java.util.Map;'); } + const parentUnions = this.getParentUnions(); + + if (parentUnions) { + for (const parentUnion of parentUnions) { + this.dependencyManager.addModelDependency(parentUnion); + } + + return `public class ${this.model.name} implements ${parentUnions + .map((pu) => pu.name) + .join(', ')} { +${this.indent(this.renderBlock(content, 2))} +}`; + } + return `public class ${this.model.name} { ${this.indent(this.renderBlock(content, 2))} }`; @@ -80,6 +96,29 @@ ${this.indent(this.renderBlock(content, 2))} runSetterPreset(property: ConstrainedObjectPropertyModel): Promise { return this.runPreset('setter', { property }); } + + private getParentUnions(): ConstrainedUnionModel[] | undefined { + const parentUnions: ConstrainedUnionModel[] = []; + + if (!this.model.options.parents) { + return undefined; + } + + for (const model of this.model.options.parents) { + if ( + model instanceof ConstrainedUnionModel && + !unionIncludesBuiltInTypes(model) + ) { + parentUnions.push(model); + } + } + + if (!parentUnions.length) { + return undefined; + } + + return parentUnions; + } } export const JAVA_DEFAULT_CLASS_PRESET: ClassPresetType = { @@ -87,6 +126,10 @@ export const JAVA_DEFAULT_CLASS_PRESET: ClassPresetType = { return renderer.defaultSelf(); }, property({ property }) { + if (property.property.options.const?.value) { + return `private final ${property.property.type} ${property.propertyName} = ${property.property.options.const.value};`; + } + return `private ${property.property.type} ${property.propertyName};`; }, getter({ property }) { @@ -96,6 +139,9 @@ export const JAVA_DEFAULT_CLASS_PRESET: ClassPresetType = { return `public ${property.property.type} ${getterName}() { return this.${property.propertyName}; }`; }, setter({ property }) { + if (property.property.options.const?.value) { + return ''; + } const setterName = FormatHelpers.toPascalCase(property.propertyName); return `public void set${setterName}(${property.property.type} ${property.propertyName}) { this.${property.propertyName} = ${property.propertyName}; }`; } diff --git a/src/generators/java/renderers/UnionRenderer.ts b/src/generators/java/renderers/UnionRenderer.ts new file mode 100644 index 0000000000..e9175fbb1a --- /dev/null +++ b/src/generators/java/renderers/UnionRenderer.ts @@ -0,0 +1,53 @@ +import { JavaRenderer } from '../JavaRenderer'; +import { ConstrainedUnionModel } from '../../../models'; +import { JavaOptions } from '../JavaGenerator'; +import { UnionPresetType } from '../JavaPreset'; +import { FormatHelpers } from '../../../index'; + +/** + * Renderer for Java's `union` type + * + * @extends JavaRenderer + */ +export class UnionRenderer extends JavaRenderer { + async defaultSelf(): Promise { + const doc = this.renderComments( + `${this.model.name} represents a union of types: ${this.model.union + .map((m) => m.type) + .join(', ')}` + ); + + const content = []; + + if (this.model.options.discriminator) { + content.push(await this.runDiscriminatorAccessorPreset()); + } + content.push(await this.runAdditionalContentPreset()); + + return this.renderBlock([ + doc, + `public interface ${this.model.name} {`, + this.indent(this.renderBlock(content)), + '}' + ]); + } + + runDiscriminatorAccessorPreset(): Promise { + return this.runPreset('discriminatorGetter'); + } +} + +export const JAVA_DEFAULT_UNION_PRESET: UnionPresetType = { + self({ renderer }) { + return renderer.defaultSelf(); + }, + discriminatorGetter({ model }) { + if (!model.options.discriminator?.type) { + return ''; + } + + return `${model.options.discriminator.type} get${FormatHelpers.toPascalCase( + model.options.discriminator.discriminator + )}();`; + } +}; diff --git a/src/generators/javascript/JavaScriptConstrainer.ts b/src/generators/javascript/JavaScriptConstrainer.ts index 0ef63fbdda..9b579d0048 100644 --- a/src/generators/javascript/JavaScriptConstrainer.ts +++ b/src/generators/javascript/JavaScriptConstrainer.ts @@ -6,6 +6,7 @@ import { } from './constrainer/EnumConstrainer'; import { Constraints } from '../../helpers'; import { JavaScriptTypeMapping } from './JavaScriptGenerator'; +import { defaultConstantConstraints } from './constrainer/ConstantConstrainer'; export const JavaScriptDefaultTypeMapping: JavaScriptTypeMapping = { Object(): string { @@ -50,5 +51,6 @@ export const JavaScriptDefaultConstraints: Constraints = { enumKey: defaultEnumKeyConstraints(), enumValue: defaultEnumValueConstraints(), modelName: defaultModelNameConstraints(), - propertyKey: defaultPropertyKeyConstraints() + propertyKey: defaultPropertyKeyConstraints(), + constant: defaultConstantConstraints() }; diff --git a/src/generators/javascript/JavaScriptDependencyManager.ts b/src/generators/javascript/JavaScriptDependencyManager.ts index 767ec087c8..e0b8d73a9a 100644 --- a/src/generators/javascript/JavaScriptDependencyManager.ts +++ b/src/generators/javascript/JavaScriptDependencyManager.ts @@ -3,7 +3,10 @@ import { AbstractDependencyManager } from '../AbstractDependencyManager'; import { JavaScriptOptions } from './JavaScriptGenerator'; export class JavaScriptDependencyManager extends AbstractDependencyManager { - constructor(public options: JavaScriptOptions, dependencies: string[] = []) { + constructor( + public options: JavaScriptOptions, + dependencies: string[] = [] + ) { super(dependencies); } diff --git a/src/generators/javascript/JavaScriptGenerator.ts b/src/generators/javascript/JavaScriptGenerator.ts index d164696a14..84b8d9cd32 100644 --- a/src/generators/javascript/JavaScriptGenerator.ts +++ b/src/generators/javascript/JavaScriptGenerator.ts @@ -1,5 +1,7 @@ import { AbstractGenerator, + AbstractGeneratorRenderArgs, + AbstractGeneratorRenderCompleteModelArgs, CommonGeneratorOptions, defaultGeneratorOptions } from '../AbstractGenerator'; @@ -100,19 +102,22 @@ export class JavaScriptGenerator extends AbstractGenerator< */ // eslint-disable-next-line @typescript-eslint/no-unused-vars async renderCompleteModel( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - completeModelOptions: Partial, - options: DeepPartial + args: AbstractGeneratorRenderCompleteModelArgs< + JavaScriptOptions, + JavaScriptRenderCompleteModelOptions + > ): Promise { //const completeModelOptionsToUse = mergePartialAndDefault(JavaScriptGenerator.defaultCompleteModelOptions, completeModelOptions) as JavaScriptRenderCompleteModelOptions; const optionsToUse = JavaScriptGenerator.getJavaScriptOptions({ ...this.options, - ...options + ...args.options }); const dependencyManagerToUse = this.getDependencyManager(optionsToUse); - const outputModel = await this.render(model, inputModel); - const modelDependencies = model.getNearestDependencies(); + const outputModel = await this.render({ + ...args, + options: optionsToUse + }); + const modelDependencies = args.constrainedModel.getNearestDependencies(); //Ensure model dependencies have their rendered name const modelDependencyImports = modelDependencies.map((dependencyModel) => { return dependencyManagerToUse.renderDependency( @@ -141,18 +146,22 @@ ${modelCode}`; } render( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - options?: DeepPartial + args: AbstractGeneratorRenderArgs ): Promise { const optionsToUse = JavaScriptGenerator.getJavaScriptOptions({ ...this.options, - ...options + ...args.options }); - if (model instanceof ConstrainedObjectModel) { - return this.renderClass(model, inputModel, optionsToUse); + if (args.constrainedModel instanceof ConstrainedObjectModel) { + return this.renderClass( + args.constrainedModel, + args.inputModel, + optionsToUse + ); } - Logger.warn(`JS generator, cannot generate model for '${model.name}'`); + Logger.warn( + `JS generator, cannot generate model for '${args.constrainedModel.name}'` + ); return Promise.resolve( RenderOutput.toRenderOutput({ result: '', diff --git a/src/generators/javascript/constrainer/ConstantConstrainer.ts b/src/generators/javascript/constrainer/ConstantConstrainer.ts new file mode 100644 index 0000000000..2c076ad46d --- /dev/null +++ b/src/generators/javascript/constrainer/ConstantConstrainer.ts @@ -0,0 +1,7 @@ +import { ConstantConstraint } from '../../../helpers'; + +export function defaultConstantConstraints(): ConstantConstraint { + return () => { + return undefined; + }; +} diff --git a/src/generators/javascript/presets/CommonPreset.ts b/src/generators/javascript/presets/CommonPreset.ts index 007f13f5fc..816d5da324 100644 --- a/src/generators/javascript/presets/CommonPreset.ts +++ b/src/generators/javascript/presets/CommonPreset.ts @@ -127,8 +127,8 @@ function renderUnmarshalUnwrapProperties( `instance.${prop}.set(key, ${unmarshalCode});` ); } - const propertyNames = Object.keys(model.properties).map( - (prop) => `"${prop}"` + const propertyNames = Object.values(model.properties).map( + (model) => `"${model.unconstrainedPropertyName}"` ); return ` //Not part of core properties diff --git a/src/generators/kotlin/KotlinConstrainer.ts b/src/generators/kotlin/KotlinConstrainer.ts index b666471f55..d85d053e0d 100644 --- a/src/generators/kotlin/KotlinConstrainer.ts +++ b/src/generators/kotlin/KotlinConstrainer.ts @@ -1,3 +1,4 @@ +import { Constraints } from '../../helpers'; import { ConstrainedEnumValueModel } from '../../models'; import { defaultEnumKeyConstraints, @@ -5,11 +6,12 @@ import { } from './constrainer/EnumConstrainer'; import { defaultModelNameConstraints } from './constrainer/ModelNameConstrainer'; import { defaultPropertyKeyConstraints } from './constrainer/PropertyKeyConstrainer'; +import { defaultConstantConstraints } from './constrainer/ConstantConstrainer'; import { KotlinTypeMapping } from './KotlinGenerator'; function enumFormatToNumberType( enumValueModel: ConstrainedEnumValueModel, - format: string + format: string | undefined ): string { switch (format) { case 'integer': @@ -29,7 +31,7 @@ function enumFormatToNumberType( function fromEnumValueToKotlinType( enumValueModel: ConstrainedEnumValueModel, - format: string + format: string | undefined ): string { switch (typeof enumValueModel.value) { case 'boolean': @@ -82,22 +84,16 @@ export const KotlinDefaultTypeMapping: KotlinTypeMapping = { return 'Any'; }, Float({ constrainedModel }): string { - const format = - constrainedModel.originalInput && - constrainedModel.originalInput['format']; - return format === 'float' ? 'Float' : 'Double'; + return constrainedModel.options.format === 'float' ? 'Float' : 'Double'; }, Integer({ constrainedModel }): string { - const format = - constrainedModel.originalInput && - constrainedModel.originalInput['format']; - return format === 'long' || format === 'int64' ? 'Long' : 'Int'; + return constrainedModel.options.format === 'long' || + constrainedModel.options.format === 'int64' + ? 'Long' + : 'Int'; }, String({ constrainedModel }): string { - const format = - constrainedModel.originalInput && - constrainedModel.originalInput['format']; - switch (format) { + switch (constrainedModel.options.format) { case 'date': { return 'java.time.LocalDate'; } @@ -132,11 +128,8 @@ export const KotlinDefaultTypeMapping: KotlinTypeMapping = { return isList ? `List<${type}>` : `Array<${type}>`; }, Enum({ constrainedModel }): string { - const format = - constrainedModel.originalInput && - constrainedModel.originalInput['format']; const valueTypes = constrainedModel.values.map((enumValue) => - fromEnumValueToKotlinType(enumValue, format) + fromEnumValueToKotlinType(enumValue, constrainedModel.options.format) ); const uniqueTypes = [...new Set(valueTypes)]; @@ -154,9 +147,10 @@ export const KotlinDefaultTypeMapping: KotlinTypeMapping = { } }; -export const KotlinDefaultConstraints = { +export const KotlinDefaultConstraints: Constraints = { enumKey: defaultEnumKeyConstraints(), enumValue: defaultEnumValueConstraints(), modelName: defaultModelNameConstraints(), - propertyKey: defaultPropertyKeyConstraints() + propertyKey: defaultPropertyKeyConstraints(), + constant: defaultConstantConstraints() }; diff --git a/src/generators/kotlin/KotlinDependencyManager.ts b/src/generators/kotlin/KotlinDependencyManager.ts index b7a516281f..71183890d8 100644 --- a/src/generators/kotlin/KotlinDependencyManager.ts +++ b/src/generators/kotlin/KotlinDependencyManager.ts @@ -2,7 +2,10 @@ import { AbstractDependencyManager } from '../AbstractDependencyManager'; import { KotlinOptions } from './KotlinGenerator'; export class KotlinDependencyManager extends AbstractDependencyManager { - constructor(public options: KotlinOptions, dependencies: string[] = []) { + constructor( + public options: KotlinOptions, + dependencies: string[] = [] + ) { super(dependencies); } diff --git a/src/generators/kotlin/KotlinGenerator.ts b/src/generators/kotlin/KotlinGenerator.ts index 1f647bffd9..c9b5ca1523 100644 --- a/src/generators/kotlin/KotlinGenerator.ts +++ b/src/generators/kotlin/KotlinGenerator.ts @@ -1,5 +1,7 @@ import { AbstractGenerator, + AbstractGeneratorRenderArgs, + AbstractGeneratorRenderCompleteModelArgs, CommonGeneratorOptions, defaultGeneratorOptions } from '../AbstractGenerator'; @@ -126,21 +128,27 @@ export class KotlinGenerator extends AbstractGenerator< * @param inputModel */ render( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - options?: DeepPartial + args: AbstractGeneratorRenderArgs ): Promise { const optionsToUse = KotlinGenerator.getKotlinOptions({ ...this.options, - ...options + ...args.options }); - if (model instanceof ConstrainedObjectModel) { - return this.renderClass(model, inputModel, optionsToUse); - } else if (model instanceof ConstrainedEnumModel) { - return this.renderEnum(model, inputModel, optionsToUse); + if (args.constrainedModel instanceof ConstrainedObjectModel) { + return this.renderClass( + args.constrainedModel, + args.inputModel, + optionsToUse + ); + } else if (args.constrainedModel instanceof ConstrainedEnumModel) { + return this.renderEnum( + args.constrainedModel, + args.inputModel, + optionsToUse + ); } Logger.warn( - `Kotlin generator, cannot generate this type of model, ${model.name}` + `Kotlin generator, cannot generate this type of model, ${args.constrainedModel.name}` ); return Promise.resolve( RenderOutput.toRenderOutput({ @@ -161,16 +169,22 @@ export class KotlinGenerator extends AbstractGenerator< * @param options used to render the full output */ async renderCompleteModel( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - options: KotlinRenderCompleteModelOptions + args: AbstractGeneratorRenderCompleteModelArgs< + KotlinOptions, + KotlinRenderCompleteModelOptions + > ): Promise { const optionsToUse = KotlinGenerator.getKotlinOptions({ ...this.options, - ...options + ...args.options + }); + const outputModel = await this.render({ + ...args, + options: optionsToUse }); - const outputModel = await this.render(model, inputModel, optionsToUse); - const packageName = this.sanitizePackageName(options.packageName); + const packageName = this.sanitizePackageName( + args.completeOptions.packageName ?? 'Asyncapi.Models' + ); const outputContent = `package ${packageName} ${outputModel.dependencies.join('\n')} diff --git a/src/generators/kotlin/constrainer/ConstantConstrainer.ts b/src/generators/kotlin/constrainer/ConstantConstrainer.ts new file mode 100644 index 0000000000..2c076ad46d --- /dev/null +++ b/src/generators/kotlin/constrainer/ConstantConstrainer.ts @@ -0,0 +1,7 @@ +import { ConstantConstraint } from '../../../helpers'; + +export function defaultConstantConstraints(): ConstantConstraint { + return () => { + return undefined; + }; +} diff --git a/src/generators/kotlin/renderers/ClassRenderer.ts b/src/generators/kotlin/renderers/ClassRenderer.ts index b05cbbadfe..7d7c2c9c3b 100644 --- a/src/generators/kotlin/renderers/ClassRenderer.ts +++ b/src/generators/kotlin/renderers/ClassRenderer.ts @@ -53,6 +53,8 @@ export const KOTLIN_DEFAULT_CLASS_PRESET: ClassPresetType = { return renderer.defaultSelf(hasProperties); }, property({ property }) { - return `val ${property.propertyName}: ${property.property.type},`; + return `val ${property.propertyName}: ${property.property.type}${ + property.required ? '' : '? = null' + },`; } }; diff --git a/src/generators/php/PhpConstrainer.ts b/src/generators/php/PhpConstrainer.ts index 22010bc527..eddc90a414 100644 --- a/src/generators/php/PhpConstrainer.ts +++ b/src/generators/php/PhpConstrainer.ts @@ -1,4 +1,5 @@ import { TypeMapping } from '../../helpers'; +import { defaultConstantConstraints } from './constrainer/ConstantConstrainer'; import { defaultEnumKeyConstraints, defaultEnumValueConstraints @@ -56,5 +57,6 @@ export const PhpDefaultConstraints = { enumKey: defaultEnumKeyConstraints(), enumValue: defaultEnumValueConstraints(), modelName: defaultModelNameConstraints(), - propertyKey: defaultPropertyKeyConstraints() + propertyKey: defaultPropertyKeyConstraints(), + constant: defaultConstantConstraints() }; diff --git a/src/generators/php/PhpDependencyManager.ts b/src/generators/php/PhpDependencyManager.ts index f2c46a354c..b8ee715d49 100644 --- a/src/generators/php/PhpDependencyManager.ts +++ b/src/generators/php/PhpDependencyManager.ts @@ -2,7 +2,10 @@ import { AbstractDependencyManager } from '../AbstractDependencyManager'; import { PhpOptions } from './PhpGenerator'; export class PhpDependencyManager extends AbstractDependencyManager { - constructor(public options: PhpOptions, dependencies: string[] = []) { + constructor( + public options: PhpOptions, + dependencies: string[] = [] + ) { super(dependencies); } } diff --git a/src/generators/php/PhpGenerator.ts b/src/generators/php/PhpGenerator.ts index 91f72588c5..833b9ebfdc 100644 --- a/src/generators/php/PhpGenerator.ts +++ b/src/generators/php/PhpGenerator.ts @@ -1,5 +1,7 @@ import { AbstractGenerator, + AbstractGeneratorRenderArgs, + AbstractGeneratorRenderCompleteModelArgs, CommonGeneratorOptions, defaultGeneratorOptions } from '../AbstractGenerator'; @@ -117,17 +119,14 @@ export class PhpGenerator extends AbstractGenerator< * @param model * @param inputModel */ - render( - model: ConstrainedMetaModel, - inputModel: InputMetaModel - ): Promise { - if (model instanceof ConstrainedObjectModel) { - return this.renderClass(model, inputModel); - } else if (model instanceof ConstrainedEnumModel) { - return this.renderEnum(model, inputModel); + render(args: AbstractGeneratorRenderArgs): Promise { + if (args.constrainedModel instanceof ConstrainedObjectModel) { + return this.renderClass(args.constrainedModel, args.inputModel); + } else if (args.constrainedModel instanceof ConstrainedEnumModel) { + return this.renderEnum(args.constrainedModel, args.inputModel); } Logger.warn( - `PHP generator, cannot generate this type of model, ${model.name}` + `PHP generator, cannot generate this type of model, ${args.constrainedModel.name}` ); return Promise.resolve( RenderOutput.toRenderOutput({ @@ -146,26 +145,28 @@ export class PhpGenerator extends AbstractGenerator< * @param options used to render the full output */ async renderCompleteModel( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - options: PhpRenderCompleteModelOptions + args: AbstractGeneratorRenderCompleteModelArgs< + PhpOptions, + PhpRenderCompleteModelOptions + > ): Promise { - const completeModelOptionsToUse = mergePartialAndDefault( - PhpGenerator.defaultCompleteModelOptions, - options - ); + const completeModelOptionsToUse = + mergePartialAndDefault( + PhpGenerator.defaultCompleteModelOptions, + args.completeOptions + ); if (isReservedPhpKeyword(completeModelOptionsToUse.namespace)) { throw new Error( - `You cannot use reserved PHP keyword (${options.namespace}) as package name, please use another.` + `You cannot use reserved PHP keyword (${completeModelOptionsToUse.namespace}) as package name, please use another.` ); } const declares: string = completeModelOptionsToUse.declareStrictTypes ? 'declare(strict_types=1);' : ''; - const outputModel: RenderOutput = await this.render(model, inputModel); - const modelDependencies: string[] = model + const outputModel: RenderOutput = await this.render(args); + const modelDependencies: string[] = args.constrainedModel .getNearestDependencies() .map((dependencyModel) => { return `use ${completeModelOptionsToUse.namespace}\\${dependencyModel.name};`; diff --git a/src/generators/php/constrainer/ConstantConstrainer.ts b/src/generators/php/constrainer/ConstantConstrainer.ts new file mode 100644 index 0000000000..2c076ad46d --- /dev/null +++ b/src/generators/php/constrainer/ConstantConstrainer.ts @@ -0,0 +1,7 @@ +import { ConstantConstraint } from '../../../helpers'; + +export function defaultConstantConstraints(): ConstantConstraint { + return () => { + return undefined; + }; +} diff --git a/src/generators/python/PythonConstrainer.ts b/src/generators/python/PythonConstrainer.ts index d492261221..e1328c3ac4 100644 --- a/src/generators/python/PythonConstrainer.ts +++ b/src/generators/python/PythonConstrainer.ts @@ -1,9 +1,11 @@ +import { Constraints } from '../../helpers'; import { defaultEnumKeyConstraints, defaultEnumValueConstraints } from './constrainer/EnumConstrainer'; import { defaultModelNameConstraints } from './constrainer/ModelNameConstrainer'; import { defaultPropertyKeyConstraints } from './constrainer/PropertyKeyConstrainer'; +import { defaultConstantConstraints } from './constrainer/ConstantConstrainer'; import { PythonTypeMapping } from './PythonGenerator'; export const PythonDefaultTypeMapping: PythonTypeMapping = { @@ -53,9 +55,10 @@ export const PythonDefaultTypeMapping: PythonTypeMapping = { } }; -export const PythonDefaultConstraints = { +export const PythonDefaultConstraints: Constraints = { enumKey: defaultEnumKeyConstraints(), enumValue: defaultEnumValueConstraints(), modelName: defaultModelNameConstraints(), - propertyKey: defaultPropertyKeyConstraints() + propertyKey: defaultPropertyKeyConstraints(), + constant: defaultConstantConstraints() }; diff --git a/src/generators/python/PythonDependencyManager.ts b/src/generators/python/PythonDependencyManager.ts index f121a8d63b..8df1d1073f 100644 --- a/src/generators/python/PythonDependencyManager.ts +++ b/src/generators/python/PythonDependencyManager.ts @@ -3,7 +3,10 @@ import { AbstractDependencyManager } from '../AbstractDependencyManager'; import { PythonOptions } from './PythonGenerator'; export class PythonDependencyManager extends AbstractDependencyManager { - constructor(public options: PythonOptions, dependencies: string[] = []) { + constructor( + public options: PythonOptions, + dependencies: string[] = [] + ) { super(dependencies); } diff --git a/src/generators/python/PythonGenerator.ts b/src/generators/python/PythonGenerator.ts index a4d1401d01..2d20bd0e5f 100644 --- a/src/generators/python/PythonGenerator.ts +++ b/src/generators/python/PythonGenerator.ts @@ -1,6 +1,8 @@ /* eslint-disable no-console */ import { AbstractGenerator, + AbstractGeneratorRenderArgs, + AbstractGeneratorRenderCompleteModelArgs, CommonGeneratorOptions, defaultGeneratorOptions } from '../AbstractGenerator'; @@ -129,21 +131,27 @@ export class PythonGenerator extends AbstractGenerator< * @param inputModel */ render( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - options?: DeepPartial + args: AbstractGeneratorRenderArgs ): Promise { const optionsToUse = PythonGenerator.getPythonOptions({ ...this.options, - ...options + ...args.options }); - if (model instanceof ConstrainedObjectModel) { - return this.renderClass(model, inputModel, optionsToUse); - } else if (model instanceof ConstrainedEnumModel) { - return this.renderEnum(model, inputModel, optionsToUse); + if (args.constrainedModel instanceof ConstrainedObjectModel) { + return this.renderClass( + args.constrainedModel, + args.inputModel, + optionsToUse + ); + } else if (args.constrainedModel instanceof ConstrainedEnumModel) { + return this.renderEnum( + args.constrainedModel, + args.inputModel, + optionsToUse + ); } Logger.warn( - `Python generator, cannot generate this type of model, ${model.name}` + `Python generator, cannot generate this type of model, ${args.constrainedModel.name}` ); return Promise.resolve( RenderOutput.toRenderOutput({ @@ -164,23 +172,29 @@ export class PythonGenerator extends AbstractGenerator< * @param options used to render the full output */ async renderCompleteModel( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - completeModelOptions: Partial, - options: DeepPartial + args: AbstractGeneratorRenderCompleteModelArgs< + PythonOptions, + PythonRenderCompleteModelOptions + > ): Promise { //const completeModelOptionsToUse = mergePartialAndDefault(PythonGenerator.defaultCompleteModelOptions, completeModelOptions) as PythonRenderCompleteModelOptions; const optionsToUse = PythonGenerator.getPythonOptions({ ...this.options, - ...options + ...args.options }); const dependencyManagerToUse = this.getDependencyManager(optionsToUse); - const outputModel = await this.render(model, inputModel, { - dependencyManager: dependencyManagerToUse - }); - const modelDependencies = model.getNearestDependencies().map((model) => { - return dependencyManagerToUse.renderDependency(model); + const outputModel = await this.render({ + ...args, + options: { + ...optionsToUse, + dependencyManager: dependencyManagerToUse + } }); + const modelDependencies = args.constrainedModel + .getNearestDependencies() + .map((model) => { + return dependencyManagerToUse.renderDependency(model); + }); const outputContent = `${modelDependencies.join('\n')} ${outputModel.dependencies.join('\n')} ${outputModel.result}`; diff --git a/src/generators/python/constrainer/ConstantConstrainer.ts b/src/generators/python/constrainer/ConstantConstrainer.ts new file mode 100644 index 0000000000..2c076ad46d --- /dev/null +++ b/src/generators/python/constrainer/ConstantConstrainer.ts @@ -0,0 +1,7 @@ +import { ConstantConstraint } from '../../../helpers'; + +export function defaultConstantConstraints(): ConstantConstraint { + return () => { + return undefined; + }; +} diff --git a/src/generators/rust/RustConstrainer.ts b/src/generators/rust/RustConstrainer.ts index 612d064b31..8253d11030 100644 --- a/src/generators/rust/RustConstrainer.ts +++ b/src/generators/rust/RustConstrainer.ts @@ -19,6 +19,7 @@ import { ConstrainedTupleModel, ConstrainedUnionModel } from '../../models'; +import { defaultConstantConstraints } from './constrainer/ConstantConstrainer'; export function deriveHash(model: ConstrainedMetaModel): boolean { // float primitives and std::collection::HashMap do not implement Hash trait @@ -278,48 +279,37 @@ export const RustDefaultTypeMapping: RustTypeMapping = { return 'serde_json::Value'; }, Float({ constrainedModel }): string { - let type = 'f64'; - const format = - constrainedModel.originalInput && - constrainedModel.originalInput['format']; - switch (format) { + switch (constrainedModel.options.format) { case 'fp32': case 'f32': case 'float32': - type = 'f32'; - break; + return 'f32'; + default: + return 'f64'; } - return type; }, Integer({ constrainedModel }): string { - let type = 'i32'; - const format = - constrainedModel.originalInput && - constrainedModel.originalInput['format']; - switch (format) { + const type = 'i32'; + switch (constrainedModel.options.format) { case 'integer': case 'int32': - break; + return type; case 'long': case 'int64': - type = 'i64'; - break; + return 'i64'; + default: + return type; } - return type; }, String({ constrainedModel }): string { - let type = 'String'; - const format = - constrainedModel.originalInput && - constrainedModel.originalInput['format']; - switch (format) { + switch (constrainedModel.options.format) { case 'bytes': case 'bytes[]': case 'binary': - type = 'Vec'; - break; + return 'Vec'; + default: + return 'String'; } - return type; }, Boolean(): string { return 'bool'; @@ -359,5 +349,6 @@ export const RustDefaultConstraints: Constraints = { enumKey: defaultEnumKeyConstraints(), enumValue: defaultEnumValueConstraints(), modelName: defaultModelNameConstraints(), - propertyKey: defaultPropertyKeyConstraints() + propertyKey: defaultPropertyKeyConstraints(), + constant: defaultConstantConstraints() }; diff --git a/src/generators/rust/RustDependencyManager.ts b/src/generators/rust/RustDependencyManager.ts index 1a492262b8..2ab397c2e7 100644 --- a/src/generators/rust/RustDependencyManager.ts +++ b/src/generators/rust/RustDependencyManager.ts @@ -2,7 +2,10 @@ import { AbstractDependencyManager } from '../AbstractDependencyManager'; import { RustOptions } from './RustGenerator'; export class RustDependencyManager extends AbstractDependencyManager { - constructor(public options: RustOptions, dependencies: string[] = []) { + constructor( + public options: RustOptions, + dependencies: string[] = [] + ) { super(dependencies); } } diff --git a/src/generators/rust/RustGenerator.ts b/src/generators/rust/RustGenerator.ts index 41f22a1ab8..758f5e2d60 100644 --- a/src/generators/rust/RustGenerator.ts +++ b/src/generators/rust/RustGenerator.ts @@ -1,5 +1,7 @@ import { AbstractGenerator, + AbstractGeneratorRenderArgs, + AbstractGeneratorRenderCompleteModelArgs, CommonGeneratorOptions, defaultGeneratorOptions } from '../AbstractGenerator'; @@ -35,6 +37,7 @@ import { UnionRenderer } from './renderers/UnionRenderer'; import { PackageRenderer } from './renderers/PackageRenderer'; import { DeepPartial, mergePartialAndDefault } from '../../utils/Partials'; import { RustDependencyManager } from './RustDependencyManager'; + export interface RustOptions extends CommonGeneratorOptions { typeMapping: TypeMapping; constraints: Constraints; @@ -177,25 +180,39 @@ export class RustGenerator extends AbstractGenerator< } render( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - options?: DeepPartial + args: AbstractGeneratorRenderArgs ): Promise { const optionsToUse = RustGenerator.getRustOptions({ ...this.options, - ...options + ...args.options }); - if (model instanceof ConstrainedObjectModel) { - return this.renderStruct(model, inputModel, optionsToUse); - } else if (model instanceof ConstrainedEnumModel) { - return this.renderEnum(model, inputModel, optionsToUse); - } else if (model instanceof ConstrainedTupleModel) { - return this.renderTuple(model, inputModel, optionsToUse); - } else if (model instanceof ConstrainedUnionModel) { - return this.renderUnion(model, inputModel, optionsToUse); + if (args.constrainedModel instanceof ConstrainedObjectModel) { + return this.renderStruct( + args.constrainedModel, + args.inputModel, + optionsToUse + ); + } else if (args.constrainedModel instanceof ConstrainedEnumModel) { + return this.renderEnum( + args.constrainedModel, + args.inputModel, + optionsToUse + ); + } else if (args.constrainedModel instanceof ConstrainedTupleModel) { + return this.renderTuple( + args.constrainedModel, + args.inputModel, + optionsToUse + ); + } else if (args.constrainedModel instanceof ConstrainedUnionModel) { + return this.renderUnion( + args.constrainedModel, + args.inputModel, + optionsToUse + ); } Logger.warn( - `Rust generator, cannot generate this type of model, ${model.name}` + `Rust generator, cannot generate this type of model, ${args.constrainedModel.name}` ); return Promise.resolve( RenderOutput.toRenderOutput({ @@ -214,17 +231,17 @@ export class RustGenerator extends AbstractGenerator< * @param options */ async renderCompleteModel( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - _completeModelOptions: Partial, - options: DeepPartial + args: AbstractGeneratorRenderCompleteModelArgs< + RustOptions, + RustRenderCompleteModelOptions + > ): Promise { const optionsToUse = RustGenerator.getRustOptions({ ...this.options, - ...options + ...args.options }); Logger.debug('Generating complete models with options: ', optionsToUse); - const outputModel = await this.render(model, inputModel); + const outputModel = await this.render({ ...args, options: optionsToUse }); const outputContent = outputModel.result; return RenderOutput.toRenderOutput({ result: outputContent, @@ -410,11 +427,13 @@ export class RustGenerator extends AbstractGenerator< const manifestMetaModel = new ConstrainedSupportFileModel( 'Cargo.toml', inputModel, + {}, 'supportFile' ); const libMetaModel = new ConstrainedSupportFileModel( 'src/lib.rs', inputModel, + {}, 'supportFile' ); const manifestOutput = await this.renderManifest( diff --git a/src/generators/rust/constrainer/ConstantConstrainer.ts b/src/generators/rust/constrainer/ConstantConstrainer.ts new file mode 100644 index 0000000000..2c076ad46d --- /dev/null +++ b/src/generators/rust/constrainer/ConstantConstrainer.ts @@ -0,0 +1,7 @@ +import { ConstantConstraint } from '../../../helpers'; + +export function defaultConstantConstraints(): ConstantConstraint { + return () => { + return undefined; + }; +} diff --git a/src/generators/rust/renderers/UnionRenderer.ts b/src/generators/rust/renderers/UnionRenderer.ts index 6f7ff9e53d..cec1895057 100644 --- a/src/generators/rust/renderers/UnionRenderer.ts +++ b/src/generators/rust/renderers/UnionRenderer.ts @@ -58,10 +58,10 @@ export const RUST_DEFAULT_UNION_PRESET: UnionPresetType = { structMacro({ model, renderer }) { const blocks = [renderer.renderMacro(model)]; - if (model.originalInput.discriminator !== undefined) { + if (model.options.discriminator) { // when discriminator is provided, polymorphic type is internally-tagged: // https://serde.rs/enum-representations.html#internally-tagged - const discriminatorBlock = `#[serde(tag = "${model.originalInput.discriminator}")]`; + const discriminatorBlock = `#[serde(tag = "${model.options.discriminator.discriminator}")]`; blocks.push(discriminatorBlock); } else { // otherwise if a discriminator field is not provided, use untagged representation diff --git a/src/generators/template/TemplateConstrainer.ts b/src/generators/template/TemplateConstrainer.ts index 0c9c9d5c0c..4465ba6cbc 100644 --- a/src/generators/template/TemplateConstrainer.ts +++ b/src/generators/template/TemplateConstrainer.ts @@ -1,10 +1,11 @@ -import { TypeMapping } from '../../helpers'; +import { Constraints, TypeMapping } from '../../helpers'; import { defaultEnumKeyConstraints, defaultEnumValueConstraints } from './constrainer/EnumConstrainer'; import { defaultModelNameConstraints } from './constrainer/ModelNameConstrainer'; import { defaultPropertyKeyConstraints } from './constrainer/PropertyKeyConstrainer'; +import { defaultConstantConstraints } from './constrainer/ConstantConstrainer'; import { TemplateDependencyManager } from './TemplateDependencyManager'; import { TemplateOptions } from './TemplateGenerator'; @@ -52,9 +53,10 @@ export const TemplateDefaultTypeMapping: TypeMapping< } }; -export const TemplateDefaultConstraints = { +export const TemplateDefaultConstraints: Constraints = { enumKey: defaultEnumKeyConstraints(), enumValue: defaultEnumValueConstraints(), modelName: defaultModelNameConstraints(), - propertyKey: defaultPropertyKeyConstraints() + propertyKey: defaultPropertyKeyConstraints(), + constant: defaultConstantConstraints() }; diff --git a/src/generators/template/TemplateDependencyManager.ts b/src/generators/template/TemplateDependencyManager.ts index 7243eb89a6..6c069fc2ad 100644 --- a/src/generators/template/TemplateDependencyManager.ts +++ b/src/generators/template/TemplateDependencyManager.ts @@ -2,7 +2,10 @@ import { AbstractDependencyManager } from '../AbstractDependencyManager'; import { TemplateOptions } from './TemplateGenerator'; export class TemplateDependencyManager extends AbstractDependencyManager { - constructor(public options: TemplateOptions, dependencies: string[] = []) { + constructor( + public options: TemplateOptions, + dependencies: string[] = [] + ) { super(dependencies); } } diff --git a/src/generators/template/TemplateGenerator.ts b/src/generators/template/TemplateGenerator.ts index 3cfeba8343..afa1f7db91 100644 --- a/src/generators/template/TemplateGenerator.ts +++ b/src/generators/template/TemplateGenerator.ts @@ -1,5 +1,7 @@ import { AbstractGenerator, + AbstractGeneratorRenderArgs, + AbstractGeneratorRenderCompleteModelArgs, CommonGeneratorOptions, defaultGeneratorOptions } from '../AbstractGenerator'; @@ -47,6 +49,10 @@ export class TemplateGenerator extends AbstractGenerator< constraints: TemplateDefaultConstraints }; + static defaultCompleteModelOptions: TemplateRenderCompleteModelOptions = { + packageName: 'Asyncapi.Models' + }; + constructor(options?: DeepPartial) { const realizedOptions = TemplateGenerator.getTemplateOptions(options); super('Template', realizedOptions); @@ -120,16 +126,15 @@ export class TemplateGenerator extends AbstractGenerator< * @param inputModel */ render( - model: ConstrainedMetaModel, - inputModel: InputMetaModel + args: AbstractGeneratorRenderArgs ): Promise { - if (model instanceof ConstrainedObjectModel) { - return this.renderClass(model, inputModel); - } else if (model instanceof ConstrainedEnumModel) { - return this.renderEnum(model, inputModel); + if (args.constrainedModel instanceof ConstrainedObjectModel) { + return this.renderClass(args.constrainedModel, args.inputModel); + } else if (args.constrainedModel instanceof ConstrainedEnumModel) { + return this.renderEnum(args.constrainedModel, args.inputModel); } Logger.warn( - `Template generator, cannot generate this type of model, ${model.name}` + `Template generator, cannot generate this type of model, ${args.constrainedModel.name}` ); return Promise.resolve( RenderOutput.toRenderOutput({ @@ -150,23 +155,30 @@ export class TemplateGenerator extends AbstractGenerator< * @param options used to render the full output */ async renderCompleteModel( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - options: TemplateRenderCompleteModelOptions + args: AbstractGeneratorRenderCompleteModelArgs< + TemplateOptions, + TemplateRenderCompleteModelOptions + > ): Promise { - if (isReservedTemplateKeyword(options.packageName)) { + const completeModelOptionsToUse = + mergePartialAndDefault( + TemplateGenerator.defaultCompleteModelOptions, + args.completeOptions + ); + + if (isReservedTemplateKeyword(completeModelOptionsToUse.packageName)) { throw new Error( - `You cannot use reserved Template keyword (${options.packageName}) as package name, please use another.` + `You cannot use reserved Template keyword (${args.completeOptions.packageName}) as package name, please use another.` ); } - const outputModel = await this.render(model, inputModel); - const modelDependencies = model + const outputModel = await this.render(args); + const modelDependencies = args.constrainedModel .getNearestDependencies() .map((dependencyModel) => { - return `import ${options.packageName}.${dependencyModel.name};`; + return `import ${completeModelOptionsToUse.packageName}.${dependencyModel.name};`; }); - const outputContent = `package ${options.packageName}; + const outputContent = `package ${completeModelOptionsToUse.packageName}; ${modelDependencies.join('\n')} ${outputModel.dependencies.join('\n')} ${outputModel.result}`; diff --git a/src/generators/template/constrainer/ConstantConstrainer.ts b/src/generators/template/constrainer/ConstantConstrainer.ts new file mode 100644 index 0000000000..2c076ad46d --- /dev/null +++ b/src/generators/template/constrainer/ConstantConstrainer.ts @@ -0,0 +1,7 @@ +import { ConstantConstraint } from '../../../helpers'; + +export function defaultConstantConstraints(): ConstantConstraint { + return () => { + return undefined; + }; +} diff --git a/src/generators/typescript/TypeScriptConstrainer.ts b/src/generators/typescript/TypeScriptConstrainer.ts index 2f169a5578..feec116bff 100644 --- a/src/generators/typescript/TypeScriptConstrainer.ts +++ b/src/generators/typescript/TypeScriptConstrainer.ts @@ -1,4 +1,4 @@ -import { ConstrainedUnionModel } from '../../models'; +import { ConstrainedMetaModel, ConstrainedUnionModel } from '../../models'; import { Logger } from '../../utils'; import { defaultEnumKeyConstraints, @@ -6,8 +6,15 @@ import { } from './constrainer/EnumConstrainer'; import { defaultModelNameConstraints } from './constrainer/ModelNameConstrainer'; import { defaultPropertyKeyConstraints } from './constrainer/PropertyKeyConstrainer'; +import { defaultConstantConstraints } from './constrainer/ConstantConstrainer'; import { TypeScriptTypeMapping } from './TypeScriptGenerator'; - +import { Constraints } from '../../helpers'; +function applyNullable(model: ConstrainedMetaModel, type: string) { + if (model.options.isNullable) { + return `${type} | null`; + } + return type; +} export const TypeScriptDefaultTypeMapping: TypeScriptTypeMapping = { Object({ constrainedModel }): string { return constrainedModel.name; @@ -18,39 +25,45 @@ export const TypeScriptDefaultTypeMapping: TypeScriptTypeMapping = { Any(): string { return 'any'; }, - Float(): string { - return 'number'; + Float({ constrainedModel }): string { + return applyNullable(constrainedModel, 'number'); }, - Integer(): string { - return 'number'; + Integer({ constrainedModel }): string { + return applyNullable(constrainedModel, 'number'); }, - String(): string { - return 'string'; + String({ constrainedModel }): string { + return applyNullable(constrainedModel, 'string'); }, - Boolean(): string { - return 'boolean'; + Boolean({ constrainedModel }): string { + return applyNullable(constrainedModel, 'boolean'); }, Tuple({ constrainedModel }): string { const tupleTypes = constrainedModel.tuple.map((constrainedType) => { return constrainedType.value.type; }); - return `[${tupleTypes.join(', ')}]`; + const tupleType = `[${tupleTypes.join(', ')}]`; + return applyNullable(constrainedModel, tupleType); }, Array({ constrainedModel }): string { let arrayType = constrainedModel.valueModel.type; if (constrainedModel.valueModel instanceof ConstrainedUnionModel) { arrayType = `(${arrayType})`; } - return `${arrayType}[]`; + arrayType = `${arrayType}[]`; + return applyNullable(constrainedModel, arrayType); }, Enum({ constrainedModel }): string { return constrainedModel.name; }, - Union({ constrainedModel }): string { - const unionTypes = constrainedModel.union.map((unionModel) => { + Union(args): string { + const unionTypes = args.constrainedModel.union.map((unionModel) => { + if (unionModel.options.const?.value) { + return `${unionModel.options.const.value}`; + } + return unionModel.type; }); - return unionTypes.join(' | '); + return applyNullable(args.constrainedModel, unionTypes.join(' | ')); }, Dictionary({ constrainedModel, options }): string { let keyType; @@ -63,21 +76,26 @@ export const TypeScriptDefaultTypeMapping: TypeScriptTypeMapping = { } else { keyType = constrainedModel.key.type; } + let dictionaryType; switch (options.mapType) { case 'indexedObject': - return `{ [name: ${keyType}]: ${constrainedModel.value.type} }`; + dictionaryType = `{ [name: ${keyType}]: ${constrainedModel.value.type} }`; + break; case 'record': - return `Record<${keyType}, ${constrainedModel.value.type}>`; - default: + dictionaryType = `Record<${keyType}, ${constrainedModel.value.type}>`; + break; case 'map': - return `Map<${keyType}, ${constrainedModel.value.type}>`; + dictionaryType = `Map<${keyType}, ${constrainedModel.value.type}>`; + break; } + return applyNullable(constrainedModel, dictionaryType); } }; -export const TypeScriptDefaultConstraints = { +export const TypeScriptDefaultConstraints: Constraints = { enumKey: defaultEnumKeyConstraints(), enumValue: defaultEnumValueConstraints(), modelName: defaultModelNameConstraints(), - propertyKey: defaultPropertyKeyConstraints() + propertyKey: defaultPropertyKeyConstraints(), + constant: defaultConstantConstraints() }; diff --git a/src/generators/typescript/TypeScriptDependencyManager.ts b/src/generators/typescript/TypeScriptDependencyManager.ts index d88617be2e..c8a2c948a8 100644 --- a/src/generators/typescript/TypeScriptDependencyManager.ts +++ b/src/generators/typescript/TypeScriptDependencyManager.ts @@ -4,7 +4,10 @@ import { ConstrainedMetaModel } from '../../models'; import { TypeScriptExportType, TypeScriptOptions } from './TypeScriptGenerator'; export class TypeScriptDependencyManager extends AbstractDependencyManager { - constructor(public options: TypeScriptOptions, dependencies: string[] = []) { + constructor( + public options: TypeScriptOptions, + dependencies: string[] = [] + ) { super(dependencies); } diff --git a/src/generators/typescript/TypeScriptGenerator.ts b/src/generators/typescript/TypeScriptGenerator.ts index 251d6ee9e4..e9058f4be8 100644 --- a/src/generators/typescript/TypeScriptGenerator.ts +++ b/src/generators/typescript/TypeScriptGenerator.ts @@ -1,5 +1,7 @@ import { AbstractGenerator, + AbstractGeneratorRenderArgs, + AbstractGeneratorRenderCompleteModelArgs, CommonGeneratorOptions, defaultGeneratorOptions } from '../AbstractGenerator'; @@ -156,25 +158,28 @@ export class TypeScriptGenerator extends AbstractGenerator< * @param options */ async renderCompleteModel( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - completeModelOptions: Partial, - options: DeepPartial + args: AbstractGeneratorRenderCompleteModelArgs< + TypeScriptOptions, + TypeScriptRenderCompleteModelOptions + > ): Promise { const completeModelOptionsToUse = mergePartialAndDefault( TypeScriptGenerator.defaultCompleteModelOptions, - completeModelOptions + args.completeOptions ) as TypeScriptRenderCompleteModelOptions; const optionsToUse = TypeScriptGenerator.getOptions({ ...this.options, - ...options + ...args.options }); const dependencyManagerToUse = this.getDependencyManager(optionsToUse); - const outputModel = await this.render(model, inputModel, { - ...optionsToUse, - dependencyManager: dependencyManagerToUse + const outputModel = await this.render({ + ...args, + options: { + ...optionsToUse, + dependencyManager: dependencyManagerToUse + } }); - const modelDependencies = model.getNearestDependencies(); + const modelDependencies = args.constrainedModel.getNearestDependencies(); //Create the correct model dependency imports const modelDependencyImports = modelDependencies.map((model) => { @@ -184,7 +189,7 @@ export class TypeScriptGenerator extends AbstractGenerator< ); }); const modelExport = dependencyManagerToUse.renderExport( - model, + args.constrainedModel, completeModelOptionsToUse.exportType ); @@ -207,23 +212,37 @@ ${modelCode}`; * Render any ConstrainedMetaModel to code based on the type */ render( - model: ConstrainedMetaModel, - inputModel: InputMetaModel, - options?: DeepPartial + args: AbstractGeneratorRenderArgs ): Promise { const optionsToUse = TypeScriptGenerator.getOptions({ ...this.options, - ...options + ...args.options }); - if (model instanceof ConstrainedObjectModel) { + if (args.constrainedModel instanceof ConstrainedObjectModel) { if (this.options.modelType === 'interface') { - return this.renderInterface(model, inputModel, optionsToUse); + return this.renderInterface( + args.constrainedModel, + args.inputModel, + optionsToUse + ); } - return this.renderClass(model, inputModel, optionsToUse); - } else if (model instanceof ConstrainedEnumModel) { - return this.renderEnum(model, inputModel, optionsToUse); + return this.renderClass( + args.constrainedModel, + args.inputModel, + optionsToUse + ); + } else if (args.constrainedModel instanceof ConstrainedEnumModel) { + return this.renderEnum( + args.constrainedModel, + args.inputModel, + optionsToUse + ); } - return this.renderType(model, inputModel, optionsToUse); + return this.renderType( + args.constrainedModel, + args.inputModel, + optionsToUse + ); } async renderClass( diff --git a/src/generators/typescript/TypeScriptObjectRenderer.ts b/src/generators/typescript/TypeScriptObjectRenderer.ts index 3a0693c972..79ce45b89f 100644 --- a/src/generators/typescript/TypeScriptObjectRenderer.ts +++ b/src/generators/typescript/TypeScriptObjectRenderer.ts @@ -41,9 +41,19 @@ export abstract class TypeScriptObjectRenderer extends TypeScriptRenderer { diff --git a/src/generators/typescript/constrainer/ConstantConstrainer.ts b/src/generators/typescript/constrainer/ConstantConstrainer.ts new file mode 100644 index 0000000000..22a7f7dee2 --- /dev/null +++ b/src/generators/typescript/constrainer/ConstantConstrainer.ts @@ -0,0 +1,53 @@ +import { + ConstrainedEnumModel, + ConstrainedMetaModel, + ConstrainedMetaModelOptionsConst, + ConstrainedReferenceModel, + ConstrainedStringModel +} from '../../../models'; +import { ConstantConstraint } from '../../../helpers'; + +const getConstrainedEnumModelConstant = (args: { + constrainedMetaModel: ConstrainedMetaModel; + constrainedEnumModel: ConstrainedEnumModel; + constOptions: ConstrainedMetaModelOptionsConst; +}) => { + const constrainedEnumValueModel = args.constrainedEnumModel.values.find( + (value) => value.originalInput === args.constOptions.originalInput + ); + + if (constrainedEnumValueModel) { + return `${args.constrainedMetaModel.type}.${constrainedEnumValueModel.key}`; + } +}; + +export function defaultConstantConstraints(): ConstantConstraint { + return ({ constrainedMetaModel }) => { + const constOptions = constrainedMetaModel.options.const; + + if (!constOptions) { + return undefined; + } + + if ( + constrainedMetaModel instanceof ConstrainedReferenceModel && + constrainedMetaModel.ref instanceof ConstrainedEnumModel + ) { + return getConstrainedEnumModelConstant({ + constrainedMetaModel, + constrainedEnumModel: constrainedMetaModel.ref, + constOptions + }); + } else if (constrainedMetaModel instanceof ConstrainedEnumModel) { + return getConstrainedEnumModelConstant({ + constrainedMetaModel, + constrainedEnumModel: constrainedMetaModel, + constOptions + }); + } else if (constrainedMetaModel instanceof ConstrainedStringModel) { + return `'${constOptions.originalInput}'`; + } + + return undefined; + }; +} diff --git a/src/generators/typescript/presets/CommonPreset.ts b/src/generators/typescript/presets/CommonPreset.ts index 9d8c9d3fd6..bc1510dee4 100644 --- a/src/generators/typescript/presets/CommonPreset.ts +++ b/src/generators/typescript/presets/CommonPreset.ts @@ -77,9 +77,9 @@ function renderArraySerialization( return `let ${propName}: any[] = []; for (const unionItem of ${modelInstanceVariable}) { ${propName}.push(\`${renderMarshalProperty( - 'unionItem', - arrayModel.valueModel - )}\`); + 'unionItem', + arrayModel.valueModel + )}\`); } json += \`"${unconstrainedProperty}": [\${${propName}.join(',')}],\`;`; } @@ -226,13 +226,18 @@ function renderUnmarshalProperty( function renderUnmarshalProperties(model: ConstrainedObjectModel) { const properties = model.properties || {}; const propertyKeys = [...Object.entries(properties)]; - const propertyNames = propertyKeys.map(([name]) => { - return name; + const originalPropertyNames = propertyKeys.map(([, model]) => { + return model.unconstrainedPropertyName; }); //These are a bit special as 'unwrap' dictionary models means they have to be unwrapped within the JSON object. const unwrapDictionaryProperties = []; const normalProperties = []; for (const entry of propertyKeys) { + // if const value exists, we don't need to unmarshal this property because it exist in the class/interface + if (entry[1].property.options.const) { + continue; + } + if ( entry[1].property instanceof ConstrainedDictionaryModel && entry[1].property.serializationType === 'unwrap' @@ -271,7 +276,7 @@ function renderUnmarshalProperties(model: ConstrainedObjectModel) { `instance.${prop}.set(key, ${unmarshalCode});` ); } - const corePropertyKeys = propertyNames + const corePropertyKeys = originalPropertyNames .map((propertyKey) => `"${propertyKey}"`) .join(','); const unwrappedDictionaryCode = diff --git a/src/generators/typescript/renderers/ClassRenderer.ts b/src/generators/typescript/renderers/ClassRenderer.ts index 2d65c944f0..80c55af2de 100644 --- a/src/generators/typescript/renderers/ClassRenderer.ts +++ b/src/generators/typescript/renderers/ClassRenderer.ts @@ -54,12 +54,17 @@ export const TS_DEFAULT_CLASS_PRESET: ClassPresetType = { }, ctor({ renderer, model }): string { const properties = model.properties || {}; - const assignments = Object.keys(properties).map((propertyName) => { - return `this._${propertyName} = input.${propertyName};`; - }); - const ctorProperties = Object.values(properties).map((property) => { - return renderer.renderProperty(property).replace(';', ','); - }); + const assignments: string[] = []; + const ctorProperties: string[] = []; + + for (const [propertyName, property] of Object.entries(properties)) { + // if const value exists we should not render it in the constructor + if (property.property.options.const) { + continue; + } + assignments.push(`this._${propertyName} = input.${propertyName};`); + ctorProperties.push(renderer.renderProperty(property).replace(';', ',')); + } return `constructor(input: { ${renderer.indent(renderer.renderBlock(ctorProperties))} @@ -71,11 +76,20 @@ ${renderer.indent(renderer.renderBlock(assignments))} return `private _${renderer.renderProperty(property)}`; }, getter({ property }): string { - return `get ${property.propertyName}(): ${property.property.type}${ - property.required === false ? ' | undefined' : '' - } { return this._${property.propertyName}; }`; + return `get ${property.propertyName}(): ${ + property.property.options.const?.value + ? property.property.options.const.value + : property.property.type + }${property.required === false ? ' | undefined' : ''} { return this._${ + property.propertyName + }; }`; }, setter({ property }): string { + // if const value exists we should not render a setter + if (property.property.options.const?.value) { + return ''; + } + return `set ${property.propertyName}(${property.propertyName}: ${ property.property.type }${property.required === false ? ' | undefined' : ''}) { this._${ diff --git a/src/helpers/CommonModelToMetaModel.ts b/src/helpers/CommonModelToMetaModel.ts index a1f46b2bc9..2bff87d91a 100644 --- a/src/helpers/CommonModelToMetaModel.ts +++ b/src/helpers/CommonModelToMetaModel.ts @@ -15,9 +15,38 @@ import { EnumModel, EnumValueModel, ObjectPropertyModel, - AnyModel + AnyModel, + MetaModelOptions } from '../models'; +function getMetaModelOptions(commonModel: CommonModel): MetaModelOptions { + const options: MetaModelOptions = {}; + + if (commonModel.const) { + options.const = { + originalInput: commonModel.const + }; + } + + if (Array.isArray(commonModel.type) && commonModel.type.includes('null')) { + options.isNullable = true; + } else { + options.isNullable = false; + } + + if (commonModel.discriminator) { + options.discriminator = { + discriminator: commonModel.discriminator + }; + } + + if (commonModel.format) { + options.format = commonModel.format; + } + + return options; +} + export function convertToMetaModel( jsonSchemaModel: CommonModel, alreadySeenModels: Map = new Map() @@ -93,7 +122,11 @@ export function convertToMetaModel( return booleanModel; } Logger.warn('Failed to convert to MetaModel, defaulting to AnyModel'); - return new AnyModel(modelName, jsonSchemaModel.originalInput); + return new AnyModel( + modelName, + jsonSchemaModel.originalInput, + getMetaModelOptions(jsonSchemaModel) + ); } function isEnumModel(jsonSchemaModel: CommonModel): boolean { if (!Array.isArray(jsonSchemaModel.enum)) { @@ -102,6 +135,18 @@ function isEnumModel(jsonSchemaModel: CommonModel): boolean { return true; } +function shouldBeAnyType(jsonSchemaModel: CommonModel): boolean { + const containsAllTypesButNull = + Array.isArray(jsonSchemaModel.type) && + jsonSchemaModel.type.length >= 6 && + !jsonSchemaModel.type.includes('null'); + const containsAllTypes = + (Array.isArray(jsonSchemaModel.type) && + jsonSchemaModel.type.length === 7) || + containsAllTypesButNull; + return containsAllTypesButNull || containsAllTypes; +} + /** * Converts a CommonModel into multiple models wrapped in a union model. * @@ -117,18 +162,34 @@ export function convertToUnionModel( alreadySeenModels: Map ): UnionModel | undefined { const containsUnions = Array.isArray(jsonSchemaModel.union); + + // Should not create union from two types where one is null + const containsTypeWithNull = + Array.isArray(jsonSchemaModel.type) && + jsonSchemaModel.type.length === 2 && + jsonSchemaModel.type.includes('null'); const containsSimpleTypeUnion = - Array.isArray(jsonSchemaModel.type) && jsonSchemaModel.type.length > 1; - const containsAllTypes = - Array.isArray(jsonSchemaModel.type) && jsonSchemaModel.type.length === 7; + Array.isArray(jsonSchemaModel.type) && + jsonSchemaModel.type.length > 1 && + !containsTypeWithNull; + const isAnyType = shouldBeAnyType(jsonSchemaModel); + + //Lets see whether we should have a union or not. if ( (!containsSimpleTypeUnion && !containsUnions) || isEnumModel(jsonSchemaModel) || - containsAllTypes + isAnyType || + containsTypeWithNull ) { return undefined; } - const unionModel = new UnionModel(name, jsonSchemaModel.originalInput, []); + const unionModel = new UnionModel( + name, + jsonSchemaModel.originalInput, + getMetaModelOptions(jsonSchemaModel), + [] + ); + //cache model before continuing if (!alreadySeenModels.has(jsonSchemaModel)) { alreadySeenModels.set(jsonSchemaModel, unionModel); @@ -137,11 +198,20 @@ export function convertToUnionModel( // Has multiple types, so convert to union if (containsUnions && jsonSchemaModel.union) { for (const unionCommonModel of jsonSchemaModel.union) { - const unionMetaModel = convertToMetaModel( - unionCommonModel, - alreadySeenModels - ); - unionModel.union.push(unionMetaModel); + const isSingleNullType = + (Array.isArray(unionCommonModel.type) && + unionCommonModel.type.length === 1 && + unionCommonModel.type?.includes('null')) || + unionCommonModel.type === 'null'; + if (isSingleNullType) { + unionModel.options.isNullable = true; + } else { + const unionMetaModel = convertToMetaModel( + unionCommonModel, + alreadySeenModels + ); + unionModel.union.push(unionMetaModel); + } } return unionModel; } @@ -215,19 +285,25 @@ export function convertToStringModel( if (!jsonSchemaModel.type?.includes('string')) { return undefined; } - return new StringModel(name, jsonSchemaModel.originalInput); + return new StringModel( + name, + jsonSchemaModel.originalInput, + getMetaModelOptions(jsonSchemaModel) + ); } export function convertToAnyModel( jsonSchemaModel: CommonModel, name: string ): AnyModel | undefined { - if ( - !Array.isArray(jsonSchemaModel.type) || - jsonSchemaModel.type.length !== 7 - ) { + const isAnyType = shouldBeAnyType(jsonSchemaModel); + if (!Array.isArray(jsonSchemaModel.type) || !isAnyType) { return undefined; } - return new AnyModel(name, jsonSchemaModel.originalInput); + return new AnyModel( + name, + jsonSchemaModel.originalInput, + getMetaModelOptions(jsonSchemaModel) + ); } export function convertToIntegerModel( jsonSchemaModel: CommonModel, @@ -236,7 +312,11 @@ export function convertToIntegerModel( if (!jsonSchemaModel.type?.includes('integer')) { return undefined; } - return new IntegerModel(name, jsonSchemaModel.originalInput); + return new IntegerModel( + name, + jsonSchemaModel.originalInput, + getMetaModelOptions(jsonSchemaModel) + ); } export function convertToFloatModel( jsonSchemaModel: CommonModel, @@ -245,7 +325,11 @@ export function convertToFloatModel( if (!jsonSchemaModel.type?.includes('number')) { return undefined; } - return new FloatModel(name, jsonSchemaModel.originalInput); + return new FloatModel( + name, + jsonSchemaModel.originalInput, + getMetaModelOptions(jsonSchemaModel) + ); } export function convertToEnumModel( jsonSchemaModel: CommonModel, @@ -254,17 +338,27 @@ export function convertToEnumModel( if (!isEnumModel(jsonSchemaModel)) { return undefined; } - const metaModel = new EnumModel(name, jsonSchemaModel.originalInput, []); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - for (const enumValue of jsonSchemaModel.enum!) { - let enumKey = enumValue; + const enumValueToEnumValueModel = (enumValue: unknown): EnumValueModel => { if (typeof enumValue !== 'string') { - enumKey = JSON.stringify(enumValue); + return new EnumValueModel(JSON.stringify(enumValue), enumValue); + } + return new EnumValueModel(enumValue, enumValue); + }; + + const metaModel = new EnumModel( + name, + jsonSchemaModel.originalInput, + getMetaModelOptions(jsonSchemaModel), + [] + ); + + if (jsonSchemaModel.enum) { + for (const enumValue of jsonSchemaModel.enum) { + metaModel.values.push(enumValueToEnumValueModel(enumValue)); } - const enumValueModel = new EnumValueModel(enumKey, enumValue); - metaModel.values.push(enumValueModel); } + return metaModel; } export function convertToBooleanModel( @@ -274,7 +368,11 @@ export function convertToBooleanModel( if (!jsonSchemaModel.type?.includes('boolean')) { return undefined; } - return new BooleanModel(name, jsonSchemaModel.originalInput); + return new BooleanModel( + name, + jsonSchemaModel.originalInput, + getMetaModelOptions(jsonSchemaModel) + ); } /** @@ -343,6 +441,7 @@ function convertAdditionalAndPatterns( return new UnionModel( name, getOriginalInputFromAdditionalAndPatterns(jsonSchemaModel), + getMetaModelOptions(jsonSchemaModel), Array.from(modelsAsValue.values()) ); } @@ -358,7 +457,11 @@ export function convertToDictionaryModel( } const originalInput = getOriginalInputFromAdditionalAndPatterns(jsonSchemaModel); - const keyModel = new StringModel(name, originalInput); + const keyModel = new StringModel( + name, + originalInput, + getMetaModelOptions(jsonSchemaModel) + ); const valueModel = convertAdditionalAndPatterns( jsonSchemaModel, name, @@ -367,6 +470,7 @@ export function convertToDictionaryModel( return new DictionaryModel( name, originalInput, + getMetaModelOptions(jsonSchemaModel), keyModel, valueModel, 'normal' @@ -385,7 +489,12 @@ export function convertToObjectModel( return undefined; } - const metaModel = new ObjectModel(name, jsonSchemaModel.originalInput, {}); + const metaModel = new ObjectModel( + name, + jsonSchemaModel.originalInput, + getMetaModelOptions(jsonSchemaModel), + {} + ); //cache model before continuing if (!alreadySeenModels.has(jsonSchemaModel)) { alreadySeenModels.set(jsonSchemaModel, metaModel); @@ -395,11 +504,13 @@ export function convertToObjectModel( jsonSchemaModel.properties || {} )) { const isRequired = jsonSchemaModel.isRequired(propertyName); + const propertyModel = new ObjectPropertyModel( propertyName, isRequired, convertToMetaModel(prop, alreadySeenModels) ); + metaModel.properties[String(propertyName)] = propertyModel; } @@ -413,7 +524,11 @@ export function convertToObjectModel( } const originalInput = getOriginalInputFromAdditionalAndPatterns(jsonSchemaModel); - const keyModel = new StringModel(propertyName, originalInput); + const keyModel = new StringModel( + propertyName, + originalInput, + getMetaModelOptions(jsonSchemaModel) + ); const valueModel = convertAdditionalAndPatterns( jsonSchemaModel, propertyName, @@ -422,6 +537,7 @@ export function convertToObjectModel( const dictionaryModel = new DictionaryModel( propertyName, originalInput, + getMetaModelOptions(jsonSchemaModel), keyModel, valueModel, 'unwrap' @@ -445,36 +561,42 @@ export function convertToArrayModel( return undefined; } - const isNormalArray = - !Array.isArray(jsonSchemaModel.items) && - jsonSchemaModel.additionalItems === undefined && - jsonSchemaModel.items !== undefined; - //item multiple types + additionalItems sat = both count, as normal array - //item single type + additionalItems sat = contradicting, only items count, as normal array - //item not sat + additionalItems sat = anything is allowed, as normal array - //item single type + additionalItems not sat = normal array - //item not sat + additionalItems not sat = normal array, any type + const isNormalArray = !Array.isArray(jsonSchemaModel.items); + //items single type = normal array + //items not sat = normal array, any type if (isNormalArray) { - const placeholderModel = new AnyModel('', undefined); + const placeholderModel = new AnyModel( + '', + undefined, + getMetaModelOptions(jsonSchemaModel) + ); const metaModel = new ArrayModel( name, jsonSchemaModel.originalInput, + getMetaModelOptions(jsonSchemaModel), placeholderModel ); alreadySeenModels.set(jsonSchemaModel, metaModel); - - const valueModel = convertToMetaModel( - jsonSchemaModel.items as CommonModel, - alreadySeenModels - ); - metaModel.valueModel = valueModel; + if (jsonSchemaModel.items !== undefined) { + const valueModel = convertToMetaModel( + jsonSchemaModel.items as CommonModel, + alreadySeenModels + ); + metaModel.valueModel = valueModel; + } return metaModel; } - const valueModel = new UnionModel('union', jsonSchemaModel.originalInput, []); + const valueModel = new UnionModel( + 'union', + jsonSchemaModel.originalInput, + getMetaModelOptions(jsonSchemaModel), + [] + ); const metaModel = new ArrayModel( name, jsonSchemaModel.originalInput, + getMetaModelOptions(jsonSchemaModel), valueModel ); alreadySeenModels.set(jsonSchemaModel, metaModel); @@ -510,7 +632,12 @@ export function convertToTupleModel( const items = jsonSchemaModel.items as CommonModel[]; //item multiple types + additionalItems not sat = tuple of item type - const tupleModel = new TupleModel(name, jsonSchemaModel.originalInput, []); + const tupleModel = new TupleModel( + name, + jsonSchemaModel.originalInput, + getMetaModelOptions(jsonSchemaModel), + [] + ); alreadySeenModels.set(jsonSchemaModel, tupleModel); for (let i = 0; i < items.length; i++) { const item = items[Number(i)]; diff --git a/src/helpers/ConstrainHelpers.ts b/src/helpers/ConstrainHelpers.ts index ab9c47451e..72409b793a 100644 --- a/src/helpers/ConstrainHelpers.ts +++ b/src/helpers/ConstrainHelpers.ts @@ -31,7 +31,8 @@ import { EnumModel, DictionaryModel, MetaModel, - ObjectPropertyModel + ObjectPropertyModel, + EnumValueModel } from '../models/MetaModel'; import { getTypeFromMapping, TypeMapping } from './TypeHelpers'; @@ -75,14 +76,26 @@ export type PropertyKeyContext = { export type PropertyKeyConstraint = (context: PropertyKeyContext) => string; +export type ConstantContext = { + constrainedMetaModel: ConstrainedMetaModel; +}; + +export type ConstantConstraint = (context: ConstantContext) => unknown; + export interface Constraints { enumKey: EnumKeyConstraint; enumValue: EnumValueConstraint; modelName: ModelNameConstraint; propertyKey: PropertyKeyConstraint; + constant: ConstantConstraint; } -const placeHolderConstrainedObject = new ConstrainedAnyModel('', undefined, ''); +const placeHolderConstrainedObject = new ConstrainedAnyModel( + '', + undefined, + {}, + '' +); function constrainReferenceModel< Options, @@ -96,6 +109,7 @@ function constrainReferenceModel< const constrainedModel = new ConstrainedReferenceModel( context.constrainedName, context.metaModel.originalInput, + context.metaModel.options, '', placeHolderConstrainedObject ); @@ -114,6 +128,14 @@ function constrainReferenceModel< partOfProperty: context.partOfProperty, dependencyManager: context.dependencyManager }); + + if (constrainedModel.options.const) { + const constrainedConstant = constrainRules.constant({ + constrainedMetaModel: constrainedModel + }); + constrainedModel.options.const.value = constrainedConstant; + } + return constrainedModel; } function constrainAnyModel< @@ -126,6 +148,7 @@ function constrainAnyModel< const constrainedModel = new ConstrainedAnyModel( context.constrainedName, context.metaModel.originalInput, + context.metaModel.options, '' ); constrainedModel.type = getTypeFromMapping(typeMapping, { @@ -146,6 +169,7 @@ function constrainFloatModel< const constrainedModel = new ConstrainedFloatModel( context.constrainedName, context.metaModel.originalInput, + context.metaModel.options, '' ); constrainedModel.type = getTypeFromMapping(typeMapping, { @@ -166,6 +190,7 @@ function constrainIntegerModel< const constrainedModel = new ConstrainedIntegerModel( context.constrainedName, context.metaModel.originalInput, + context.metaModel.options, '' ); constrainedModel.type = getTypeFromMapping(typeMapping, { @@ -186,6 +211,7 @@ function constrainStringModel< const constrainedModel = new ConstrainedStringModel( context.constrainedName, context.metaModel.originalInput, + context.metaModel.options, '' ); constrainedModel.type = getTypeFromMapping(typeMapping, { @@ -206,6 +232,7 @@ function constrainBooleanModel< const constrainedModel = new ConstrainedBooleanModel( context.constrainedName, context.metaModel.originalInput, + context.metaModel.options, '' ); constrainedModel.type = getTypeFromMapping(typeMapping, { @@ -228,6 +255,7 @@ function constrainTupleModel< const constrainedModel = new ConstrainedTupleModel( context.constrainedName, context.metaModel.originalInput, + context.metaModel.options, '', [] ); @@ -263,6 +291,7 @@ function constrainArrayModel< const constrainedModel = new ConstrainedArrayModel( context.constrainedName, context.metaModel.originalInput, + context.metaModel.options, '', placeHolderConstrainedObject ); @@ -286,6 +315,39 @@ function constrainArrayModel< }); return constrainedModel; } +function addDiscriminatorTypeToUnionModel( + constrainedModel: ConstrainedUnionModel +) { + if (!constrainedModel.options.discriminator) { + return; + } + + const propertyTypes = new Set(); + + for (const union of constrainedModel.union) { + if (union instanceof ConstrainedReferenceModel) { + const ref = union.ref; + + if (ref instanceof ConstrainedObjectModel) { + const discriminatorProp = Object.values(ref.properties).find( + (model) => + model.unconstrainedPropertyName === + constrainedModel.options.discriminator?.discriminator + ); + + if (discriminatorProp) { + propertyTypes.add(discriminatorProp.property.type); + } + } + } + } + + if (propertyTypes.size === 1) { + constrainedModel.options.discriminator.type = propertyTypes + .keys() + .next().value; + } +} function constrainUnionModel< Options, DependencyManager extends AbstractDependencyManager @@ -298,6 +360,7 @@ function constrainUnionModel< const constrainedModel = new ConstrainedUnionModel( context.constrainedName, context.metaModel.originalInput, + context.metaModel.options, '', [] ); @@ -312,12 +375,16 @@ function constrainUnionModel< ); }); constrainedModel.union = constrainedUnionModels; + constrainedModel.type = getTypeFromMapping(typeMapping, { constrainedModel, options: context.options, partOfProperty: context.partOfProperty, dependencyManager: context.dependencyManager }); + + addDiscriminatorTypeToUnionModel(constrainedModel); + return constrainedModel; } function constrainDictionaryModel< @@ -332,6 +399,7 @@ function constrainDictionaryModel< const constrainedModel = new ConstrainedDictionaryModel( context.constrainedName, context.metaModel.originalInput, + context.metaModel.options, '', placeHolderConstrainedObject, placeHolderConstrainedObject, @@ -378,6 +446,7 @@ function constrainObjectModel< const constrainedModel = new ConstrainedObjectModel( context.constrainedName, context.metaModel.originalInput, + context.metaModel.options, '', {} ); @@ -408,6 +477,7 @@ function constrainObjectModel< alreadySeenModels ); constrainedPropertyModel.property = constrainedProperty; + constrainedModel.properties[String(constrainedPropertyName)] = constrainedPropertyModel; } @@ -431,11 +501,14 @@ function ConstrainEnumModel< const constrainedModel = new ConstrainedEnumModel( context.constrainedName, context.metaModel.originalInput, + context.metaModel.options, '', [] ); - for (const enumValue of context.metaModel.values) { + const enumValueToConstrainedEnumValueModel = ( + enumValue: EnumValueModel + ): ConstrainedEnumValueModel => { const constrainedEnumKey = constrainRules.enumKey({ enumKey: String(enumValue.key), enumModel: context.metaModel, @@ -446,22 +519,30 @@ function ConstrainEnumModel< enumModel: context.metaModel, constrainedEnumModel: constrainedModel }); - - const constrainedEnumValueModel = new ConstrainedEnumValueModel( + return new ConstrainedEnumValueModel( constrainedEnumKey, - constrainedEnumValue + constrainedEnumValue, + enumValue.value + ); + }; + + for (const enumValue of context.metaModel.values) { + constrainedModel.values.push( + enumValueToConstrainedEnumValueModel(enumValue) ); - constrainedModel.values.push(constrainedEnumValueModel); } + constrainedModel.type = getTypeFromMapping(typeMapping, { constrainedModel, options: context.options, partOfProperty: context.partOfProperty, dependencyManager: context.dependencyManager }); + return constrainedModel; } +// eslint-disable-next-line sonarjs/cognitive-complexity export function constrainMetaModel< Options, DependencyManager extends AbstractDependencyManager @@ -555,6 +636,13 @@ export function constrainMetaModel< }); } if (simpleModel !== undefined) { + if (simpleModel.options.const) { + const constrainedConstant = constrainRules.constant({ + constrainedMetaModel: simpleModel + }); + simpleModel.options.const.value = constrainedConstant; + } + alreadySeenModels.set(context.metaModel, simpleModel); return simpleModel; } diff --git a/src/helpers/Splitter.ts b/src/helpers/Splitter.ts index f5c6145dcf..96d677adc3 100644 --- a/src/helpers/Splitter.ts +++ b/src/helpers/Splitter.ts @@ -56,7 +56,12 @@ const trySplitModel = ( if (!models.includes(model)) { models.push(model); } - return new ReferenceModel(model.name, model.originalInput, model); + return new ReferenceModel( + model.name, + model.originalInput, + model.options, + model + ); } return model; }; diff --git a/src/interpreter/InterpretAllOf.ts b/src/interpreter/InterpretAllOf.ts index ef763a5127..fe511ee97f 100644 --- a/src/interpreter/InterpretAllOf.ts +++ b/src/interpreter/InterpretAllOf.ts @@ -1,5 +1,5 @@ import { Logger } from '../utils'; -import { CommonModel } from '../models/CommonModel'; +import { CommonModel } from '../models'; import { Interpreter, InterpreterOptions, @@ -17,6 +17,7 @@ import { isModelObject } from './Utils'; * @param interpreter * @param interpreterOptions to control the interpret process */ +// eslint-disable-next-line sonarjs/cognitive-complexity export default function interpretAllOf( schema: InterpreterSchemaType, model: CommonModel, @@ -30,6 +31,18 @@ export default function interpretAllOf( ) { return; } + + for (const allOfSchema of schema.allOf) { + const discriminator = interpreter.discriminatorProperty(allOfSchema); + if (discriminator !== undefined) { + interpreterOptions = { + ...interpreterOptions, + discriminator + }; + model.discriminator = discriminator; + } + } + for (const allOfSchema of schema.allOf) { const allOfModel = interpreter.interpret(allOfSchema, interpreterOptions); if (allOfModel === undefined) { diff --git a/src/interpreter/InterpretConst.ts b/src/interpreter/InterpretConst.ts index 34ec4784d9..905296704c 100644 --- a/src/interpreter/InterpretConst.ts +++ b/src/interpreter/InterpretConst.ts @@ -1,5 +1,15 @@ -import { Draft4Schema, CommonModel } from '../models'; -import { InterpreterSchemaType } from './Interpreter'; +import { + Draft4Schema, + CommonModel, + AsyncapiV2Schema, + SwaggerV2Schema, + OpenapiV3Schema +} from '../models'; +import { + Interpreter, + InterpreterOptions, + InterpreterSchemaType +} from './Interpreter'; import { inferTypeFromValue } from './Utils'; /** @@ -7,10 +17,12 @@ import { inferTypeFromValue } from './Utils'; * * @param schema * @param model + * @param interpreterOptions to control the interpret process */ export default function interpretConst( schema: InterpreterSchemaType, - model: CommonModel + model: CommonModel, + interpreterOptions: InterpreterOptions = Interpreter.defaultInterpreterOptions ): void { if ( schema instanceof Draft4Schema || @@ -20,12 +32,20 @@ export default function interpretConst( return; } - const schemaConst = schema.const; - model.enum = [schemaConst]; + if ( + (schema instanceof AsyncapiV2Schema || + schema instanceof SwaggerV2Schema || + schema instanceof OpenapiV3Schema) && + interpreterOptions.discriminator + ) { + model.enum = [schema.const]; + } + + model.const = schema.const; //If schema does not contain type interpret the schema if (schema.type === undefined) { - const inferredType = inferTypeFromValue(schemaConst); + const inferredType = inferTypeFromValue(schema.const); if (inferredType !== undefined) { model.setType(inferredType); } diff --git a/src/interpreter/InterpretOneOf.ts b/src/interpreter/InterpretOneOf.ts index b7fd92c571..14cf4650ac 100644 --- a/src/interpreter/InterpretOneOf.ts +++ b/src/interpreter/InterpretOneOf.ts @@ -1,4 +1,4 @@ -import { CommonModel } from '../models/CommonModel'; +import { CommonModel } from '../models'; import { Interpreter, InterpreterOptions, @@ -29,11 +29,24 @@ export default function interpretOneOf( ) { return; } + + const discriminator = interpreter.discriminatorProperty(schema); + interpreterOptions = { + ...interpreterOptions, + discriminator + }; + model.discriminator = discriminator; + for (const oneOfSchema of schema.oneOf) { const oneOfModel = interpreter.interpret(oneOfSchema, interpreterOptions); if (oneOfModel === undefined) { continue; } + + if (oneOfModel.discriminator) { + model.discriminator = oneOfModel.discriminator; + } + model.addItemUnion(oneOfModel); } } diff --git a/src/interpreter/InterpretOneOfWithAllOf.ts b/src/interpreter/InterpretOneOfWithAllOf.ts index 45a9377dee..0ad5ce835d 100644 --- a/src/interpreter/InterpretOneOfWithAllOf.ts +++ b/src/interpreter/InterpretOneOfWithAllOf.ts @@ -1,4 +1,4 @@ -import { CommonModel } from '../models/CommonModel'; +import { CommonModel } from '../models'; import { Interpreter, InterpreterOptions, @@ -31,6 +31,17 @@ export default function interpretOneOfWithAllOf( return; } + for (const allOfSchema of schema.allOf) { + const discriminator = interpreter.discriminatorProperty(allOfSchema); + if (discriminator !== undefined) { + interpreterOptions = { + ...interpreterOptions, + discriminator + }; + model.discriminator = discriminator; + } + } + for (const oneOfSchema of schema.oneOf) { const oneOfModel = interpreter.interpret(oneOfSchema, interpreterOptions); diff --git a/src/interpreter/InterpretOneOfWithProperties.ts b/src/interpreter/InterpretOneOfWithProperties.ts index ddb046e238..dae5e09fb5 100644 --- a/src/interpreter/InterpretOneOfWithProperties.ts +++ b/src/interpreter/InterpretOneOfWithProperties.ts @@ -1,4 +1,4 @@ -import { CommonModel } from '../models/CommonModel'; +import { CommonModel } from '../models'; import { Interpreter, InterpreterOptions, @@ -30,6 +30,13 @@ export default function interpretOneOfWithProperties( return; } + const discriminator = interpreter.discriminatorProperty(schema); + interpreterOptions = { + ...interpreterOptions, + discriminator + }; + model.discriminator = discriminator; + for (const oneOfSchema of schema.oneOf) { const oneOfModel = interpreter.interpret(oneOfSchema, interpreterOptions); diff --git a/src/interpreter/InterpretProperties.ts b/src/interpreter/InterpretProperties.ts index f89d0541d5..fcbf6efe22 100644 --- a/src/interpreter/InterpretProperties.ts +++ b/src/interpreter/InterpretProperties.ts @@ -31,10 +31,19 @@ export default function interpretProperties( for (const [propertyName, propertySchema] of Object.entries( schema.properties )) { - const propertyModel = interpreter.interpret( - propertySchema, - interpreterOptions - ); + const discriminator = + propertyName === interpreterOptions.discriminator + ? interpreterOptions.discriminator + : undefined; + + if (discriminator) { + model.discriminator = discriminator; + } + + const propertyModel = interpreter.interpret(propertySchema, { + ...interpreterOptions, + discriminator + }); if (propertyModel !== undefined) { model.addProperty(propertyName, propertyModel, schema); } diff --git a/src/interpreter/InterpretThenElse.ts b/src/interpreter/InterpretThenElse.ts new file mode 100644 index 0000000000..e23c1b0219 --- /dev/null +++ b/src/interpreter/InterpretThenElse.ts @@ -0,0 +1,65 @@ +import { CommonModel } from '../models/CommonModel'; +import { + Interpreter, + InterpreterOptions, + InterpreterSchemaType +} from './Interpreter'; +import { Draft4Schema, Draft6Schema } from '../models'; + +/** + * Interpreter function for then/else keywords. + * + * It merges schemas into existing model + * + * @param schema + * @param model + * @param interpreter + * @param interpreterOptions to control the interpret process + */ +export default function InterpretThenElse( + schema: InterpreterSchemaType, + model: CommonModel, + interpreter: Interpreter, + interpreterOptions: InterpreterOptions = Interpreter.defaultInterpreterOptions +): void { + if ( + typeof schema === 'boolean' || + schema instanceof Draft4Schema || + schema instanceof Draft6Schema + ) { + return; + } + + if (schema.then) { + interpretThenElseItem(schema.then, model, interpreter, interpreterOptions); + } + + if (schema.else) { + interpretThenElseItem(schema.else, model, interpreter, interpreterOptions); + } +} + +function interpretThenElseItem( + thenOrElseSchema: InterpreterSchemaType, + model: CommonModel, + interpreter: Interpreter, + interpreterOptions: InterpreterOptions +) { + if ( + typeof thenOrElseSchema === 'boolean' || + thenOrElseSchema instanceof Draft4Schema || + thenOrElseSchema instanceof Draft6Schema + ) { + return; + } + + interpreter.interpretAndCombineSchema( + thenOrElseSchema, + model, + thenOrElseSchema, + interpreterOptions, + { + constrictModels: false + } + ); +} diff --git a/src/interpreter/Interpreter.ts b/src/interpreter/Interpreter.ts index 8a1bd20b9c..157a6102f8 100644 --- a/src/interpreter/Interpreter.ts +++ b/src/interpreter/Interpreter.ts @@ -4,7 +4,10 @@ import { Draft4Schema, SwaggerV2Schema, AsyncapiV2Schema, - Draft7Schema + Draft7Schema, + MergingOptions, + defaultMergingOptions, + OpenapiV3Schema } from '../models'; import { interpretName } from './Utils'; import interpretProperties from './InterpretProperties'; @@ -21,6 +24,7 @@ import interpretOneOf from './InterpretOneOf'; import interpretAnyOf from './InterpretAnyOf'; import interpretOneOfWithAllOf from './InterpretOneOfWithAllOf'; import interpretOneOfWithProperties from './InterpretOneOfWithProperties'; +import InterpretThenElse from './InterpretThenElse'; export type InterpreterOptions = { allowInheritance?: boolean; @@ -42,12 +46,17 @@ export type InterpreterOptions = { * Instead you should adapt your schemas to be more strict by setting `additionalItems: false`. */ ignoreAdditionalItems?: boolean; + /** + * When interpreting a schema with discriminator set, this property will be set best by the individual interpreters to make sure the discriminator becomes an enum. + */ + discriminator?: string; }; export type InterpreterSchemas = | Draft6Schema | Draft4Schema | Draft7Schema | SwaggerV2Schema + | OpenapiV3Schema | AsyncapiV2Schema; export type InterpreterSchemaType = InterpreterSchemas | boolean; @@ -126,6 +135,9 @@ export class Interpreter { if (schema.required !== undefined) { model.required = schema.required; } + if (schema.format) { + model.format = schema.format; + } interpretPatternProperties(schema, model, this, interpreterOptions); interpretAdditionalItems(schema, model, this, interpreterOptions); @@ -138,26 +150,9 @@ export class Interpreter { interpretOneOfWithProperties(schema, model, this, interpreterOptions); interpretAnyOf(schema, model, this, interpreterOptions); interpretDependencies(schema, model, this, interpreterOptions); - interpretConst(schema, model); + interpretConst(schema, model, interpreterOptions); interpretEnum(schema, model); - - if ( - !(schema instanceof Draft4Schema) && - !(schema instanceof Draft6Schema) - ) { - this.interpretAndCombineSchema( - schema.then, - model, - schema, - interpreterOptions - ); - this.interpretAndCombineSchema( - schema.else, - model, - schema, - interpreterOptions - ); - } + InterpretThenElse(schema, model, this, interpreterOptions); interpretNot(schema, model, this, interpreterOptions); @@ -177,14 +172,43 @@ export class Interpreter { schema: InterpreterSchemaType | undefined, currentModel: CommonModel, rootSchema: any, - interpreterOptions: InterpreterOptions = Interpreter.defaultInterpreterOptions + interpreterOptions: InterpreterOptions = Interpreter.defaultInterpreterOptions, + mergingOptions: MergingOptions = defaultMergingOptions ): void { if (typeof schema !== 'object') { return; } const model = this.interpret(schema, interpreterOptions); if (model !== undefined) { - CommonModel.mergeCommonModels(currentModel, model, rootSchema); + CommonModel.mergeCommonModels( + currentModel, + model, + rootSchema, + new Map(), + mergingOptions + ); + } + } + + /** + * Get the discriminator property name for the schema, if the schema has one + * + * @param schema + * @returns discriminator name property + */ + discriminatorProperty(schema: InterpreterSchemaType): string | undefined { + if ( + (schema instanceof AsyncapiV2Schema || + schema instanceof SwaggerV2Schema) && + schema.discriminator + ) { + return schema.discriminator; + } else if ( + schema instanceof OpenapiV3Schema && + schema.discriminator && + schema.discriminator.propertyName + ) { + return schema.discriminator.propertyName; } } } diff --git a/src/models/CommonModel.ts b/src/models/CommonModel.ts index c5d9c18616..4e023d6037 100644 --- a/src/models/CommonModel.ts +++ b/src/models/CommonModel.ts @@ -1,5 +1,16 @@ import { Logger } from '../utils'; +export interface MergingOptions { + /** + * When models are merged, should merging models constrict the `merging to` model? + * If false, `required` keyword would no longer be applied from the `merging from` model. + */ + constrictModels?: boolean; +} +export const defaultMergingOptions: MergingOptions = { + constrictModels: true +}; + /** * Common internal representation for a model. */ @@ -9,6 +20,8 @@ export class CommonModel { $id?: string; type?: string | string[]; enum?: any[]; + const?: unknown; + discriminator?: string; items?: CommonModel | CommonModel[]; properties?: { [key: string]: CommonModel }; additionalProperties?: CommonModel; @@ -16,6 +29,7 @@ export class CommonModel { required?: string[]; additionalItems?: CommonModel; union?: CommonModel[]; + format?: string; /** * Takes a deep copy of the input object and converts it to an instance of CommonModel. @@ -432,6 +446,15 @@ export class CommonModel { this.extend.push(extendedModel.$id); } + /** + * Returns true if the $id of a CommonModel includes anonymous_schema + * + * @param commonModel + */ + private static idIncludesAnonymousSchema(commonModel: CommonModel) { + return commonModel.$id?.includes('anonymous_schema'); + } + /** * Merge two common model properties together * @@ -444,7 +467,8 @@ export class CommonModel { mergeTo: CommonModel, mergeFrom: CommonModel, originalInput: any, - alreadyIteratedModels: Map = new Map() + alreadyIteratedModels: Map = new Map(), + options: MergingOptions = defaultMergingOptions ) { if (!mergeTo.properties) { mergeTo.properties = mergeFrom.properties; @@ -471,12 +495,29 @@ export class CommonModel { mergeFrom, originalInput ); - mergeTo.properties[String(propName)] = CommonModel.mergeCommonModels( - mergeTo.properties[String(propName)], + + // takes a deep copy of the mergeTo model if the id of mergeTo is anonymous to avoid carrying over properties to other models + const mergeToModel = CommonModel.idIncludesAnonymousSchema( + mergeTo.properties[String(propName)] + ) + ? CommonModel.toCommonModel(mergeTo.properties[String(propName)]) + : mergeTo.properties[String(propName)]; + + const mergedModel = CommonModel.mergeCommonModels( + mergeToModel, propValue, originalInput, - alreadyIteratedModels + alreadyIteratedModels, + options ); + + if (propValue.const) { + mergeTo.properties[String(propName)] = + CommonModel.toCommonModel(mergedModel); + mergeTo.properties[String(propName)].const = propValue.const; + } else { + mergeTo.properties[String(propName)] = mergedModel; + } } } } @@ -492,7 +533,8 @@ export class CommonModel { mergeTo: CommonModel, mergeFrom: CommonModel, originalInput: any, - alreadyIteratedModels: Map = new Map() + alreadyIteratedModels: Map = new Map(), + options: MergingOptions = defaultMergingOptions ) { const mergeToAdditionalProperties = mergeTo.additionalProperties; const mergeFromAdditionalProperties = mergeFrom.additionalProperties; @@ -512,7 +554,8 @@ export class CommonModel { mergeToAdditionalProperties, mergeFromAdditionalProperties, originalInput, - alreadyIteratedModels + alreadyIteratedModels, + options ); } } @@ -530,7 +573,8 @@ export class CommonModel { mergeTo: CommonModel, mergeFrom: CommonModel, originalInput: any, - alreadyIteratedModels: Map = new Map() + alreadyIteratedModels: Map = new Map(), + options: MergingOptions = defaultMergingOptions ) { const mergeToAdditionalItems = mergeTo.additionalItems; const mergeFromAdditionalItems = mergeFrom.additionalItems; @@ -550,7 +594,8 @@ export class CommonModel { mergeToAdditionalItems, mergeFromAdditionalItems, originalInput, - alreadyIteratedModels + alreadyIteratedModels, + options ); } } @@ -569,7 +614,8 @@ export class CommonModel { mergeTo: CommonModel, mergeFrom: CommonModel, originalInput: any, - alreadyIteratedModels: Map = new Map() + alreadyIteratedModels: Map = new Map(), + options: MergingOptions = defaultMergingOptions ) { if (mergeFrom.items === undefined) { return; @@ -589,7 +635,8 @@ export class CommonModel { mergeToItems, mergeFrom.items, originalInput, - alreadyIteratedModels + alreadyIteratedModels, + options ); } @@ -601,7 +648,8 @@ export class CommonModel { mergeToItems[Number(index)], mergeFromTupleModel, originalInput, - alreadyIteratedModels + alreadyIteratedModels, + options ); } } @@ -625,7 +673,8 @@ export class CommonModel { mergeTo: CommonModel, mergeFrom: CommonModel, originalInput: any, - alreadyIteratedModels: Map = new Map() + alreadyIteratedModels: Map = new Map(), + options: MergingOptions = defaultMergingOptions ) { const mergeToPatternProperties = mergeTo.patternProperties; const mergeFromPatternProperties = mergeFrom.patternProperties; @@ -650,7 +699,8 @@ export class CommonModel { mergeToPatternProperties[String(pattern)], patternModel, originalInput, - alreadyIteratedModels + alreadyIteratedModels, + options ); } else { mergeToPatternProperties[String(pattern)] = patternModel; @@ -698,11 +748,13 @@ export class CommonModel { * @param originalInput corresponding input that got interpreted to this model * @param alreadyIteratedModels */ + // eslint-disable-next-line sonarjs/cognitive-complexity static mergeCommonModels( mergeTo: CommonModel | undefined, mergeFrom: CommonModel, originalInput: any, - alreadyIteratedModels: Map = new Map() + alreadyIteratedModels: Map = new Map(), + options: MergingOptions = defaultMergingOptions ): CommonModel { if (mergeTo === undefined) { return mergeFrom; @@ -724,43 +776,61 @@ export class CommonModel { mergeTo, mergeFrom, originalInput, - alreadyIteratedModels + alreadyIteratedModels, + options ); CommonModel.mergePatternProperties( mergeTo, mergeFrom, originalInput, - alreadyIteratedModels + alreadyIteratedModels, + options ); CommonModel.mergeAdditionalItems( mergeTo, mergeFrom, originalInput, - alreadyIteratedModels + alreadyIteratedModels, + options ); CommonModel.mergeProperties( mergeTo, mergeFrom, originalInput, - alreadyIteratedModels + alreadyIteratedModels, + options ); CommonModel.mergeItems( mergeTo, mergeFrom, originalInput, - alreadyIteratedModels + alreadyIteratedModels, + options ); CommonModel.mergeTypes(mergeTo, mergeFrom); if (mergeFrom.enum !== undefined) { mergeTo.enum = [...new Set([...(mergeTo.enum || []), ...mergeFrom.enum])]; } - if (mergeFrom.required !== undefined) { + + mergeTo.const = mergeTo.const || mergeFrom.const; + + if (mergeFrom.required !== undefined && options.constrictModels === true) { mergeTo.required = [ ...new Set([...(mergeTo.required || []), ...mergeFrom.required]) ]; } - mergeTo.$id = mergeTo.$id || mergeFrom.$id; + + mergeTo.format = mergeTo.format || mergeFrom.format; + + if ( + CommonModel.idIncludesAnonymousSchema(mergeTo) && + !CommonModel.idIncludesAnonymousSchema(mergeFrom) + ) { + mergeTo.$id = mergeFrom.$id; + } else { + mergeTo.$id = mergeTo.$id || mergeFrom.$id; + } mergeTo.extend = mergeTo.extend || mergeFrom.extend; mergeTo.originalInput = originalInput; return mergeTo; diff --git a/src/models/ConstrainedMetaModel.ts b/src/models/ConstrainedMetaModel.ts index f982005f23..b65ac61452 100644 --- a/src/models/ConstrainedMetaModel.ts +++ b/src/models/ConstrainedMetaModel.ts @@ -1,9 +1,52 @@ import { makeUnique } from '../helpers/DependencyHelpers'; -import { MetaModel } from './MetaModel'; +import { + MetaModel, + MetaModelOptions, + MetaModelOptionsConst, + MetaModelOptionsDiscriminator +} from './MetaModel'; + +export interface ConstrainedMetaModelOptionsConst + extends MetaModelOptionsConst { + value?: unknown; +} + +export interface ConstrainedMetaModelOptionsDiscriminator + extends MetaModelOptionsDiscriminator { + type?: string; +} + +export class ConstrainedMetaModelOptions extends MetaModelOptions { + const?: ConstrainedMetaModelOptionsConst; + discriminator?: ConstrainedMetaModelOptionsDiscriminator; + parents?: ConstrainedMetaModel[]; +} export abstract class ConstrainedMetaModel extends MetaModel { - constructor(name: string, originalInput: any, public type: string) { - super(name, originalInput); + public options: ConstrainedMetaModelOptions; + + constructor( + name: string, + originalInput: any, + options: ConstrainedMetaModelOptions, + public type: string + ) { + super(name, originalInput, options); + this.options = { + ...options + }; + + if (options.const) { + this.options.const = { + ...options.const + }; + } + + if (options.discriminator) { + this.options.discriminator = { + ...options.discriminator + }; + } } /** @@ -20,10 +63,11 @@ export class ConstrainedReferenceModel extends ConstrainedMetaModel { constructor( name: string, originalInput: any, + options: ConstrainedMetaModelOptions, type: string, public ref: ConstrainedMetaModel ) { - super(name, originalInput, type); + super(name, originalInput, options, type); } } export class ConstrainedAnyModel extends ConstrainedMetaModel {} @@ -32,16 +76,20 @@ export class ConstrainedIntegerModel extends ConstrainedMetaModel {} export class ConstrainedStringModel extends ConstrainedMetaModel {} export class ConstrainedBooleanModel extends ConstrainedMetaModel {} export class ConstrainedTupleValueModel { - constructor(public index: number, public value: ConstrainedMetaModel) {} + constructor( + public index: number, + public value: ConstrainedMetaModel + ) {} } export class ConstrainedTupleModel extends ConstrainedMetaModel { constructor( name: string, originalInput: any, + options: ConstrainedMetaModelOptions, type: string, public tuple: ConstrainedTupleValueModel[] ) { - super(name, originalInput, type); + super(name, originalInput, options, type); } getNearestDependencies(): ConstrainedMetaModel[] { @@ -76,10 +124,11 @@ export class ConstrainedArrayModel extends ConstrainedMetaModel { constructor( name: string, originalInput: any, + options: ConstrainedMetaModelOptions, type: string, public valueModel: ConstrainedMetaModel ) { - super(name, originalInput, type); + super(name, originalInput, options, type); } getNearestDependencies(): ConstrainedMetaModel[] { @@ -93,10 +142,11 @@ export class ConstrainedUnionModel extends ConstrainedMetaModel { constructor( name: string, originalInput: any, + options: ConstrainedMetaModelOptions, type: string, public union: ConstrainedMetaModel[] ) { - super(name, originalInput, type); + super(name, originalInput, options, type); } getNearestDependencies(): ConstrainedMetaModel[] { @@ -120,28 +170,34 @@ export class ConstrainedUnionModel extends ConstrainedMetaModel { } } export class ConstrainedEnumValueModel { - constructor(public key: string, public value: any) {} + constructor( + public key: string, + public value: any, + public originalInput: unknown + ) {} } export class ConstrainedEnumModel extends ConstrainedMetaModel { constructor( name: string, originalInput: any, + options: ConstrainedMetaModelOptions, type: string, public values: ConstrainedEnumValueModel[] ) { - super(name, originalInput, type); + super(name, originalInput, options, type); } } export class ConstrainedDictionaryModel extends ConstrainedMetaModel { constructor( name: string, originalInput: any, + options: ConstrainedMetaModelOptions, type: string, public key: ConstrainedMetaModel, public value: ConstrainedMetaModel, public serializationType: 'unwrap' | 'normal' = 'normal' ) { - super(name, originalInput, type); + super(name, originalInput, options, type); } getNearestDependencies(): ConstrainedMetaModel[] { @@ -170,10 +226,11 @@ export class ConstrainedObjectModel extends ConstrainedMetaModel { constructor( name: string, originalInput: any, + options: ConstrainedMetaModelOptions, type: string, public properties: { [key: string]: ConstrainedObjectPropertyModel } ) { - super(name, originalInput, type); + super(name, originalInput, options, type); } getNearestDependencies(): ConstrainedMetaModel[] { diff --git a/src/models/MetaModel.ts b/src/models/MetaModel.ts index 66988560b4..e3233d6d04 100644 --- a/src/models/MetaModel.ts +++ b/src/models/MetaModel.ts @@ -1,10 +1,34 @@ +export interface MetaModelOptionsConst { + originalInput: unknown; +} + +export interface MetaModelOptionsDiscriminator { + discriminator: string; +} + +export class MetaModelOptions { + const?: MetaModelOptionsConst; + discriminator?: MetaModelOptionsDiscriminator; + isNullable?: boolean = false; + format?: string; +} + export class MetaModel { - constructor(public name: string, public originalInput: any) {} + constructor( + public name: string, + public originalInput: any, + public options: MetaModelOptions + ) {} } export class ReferenceModel extends MetaModel { - constructor(name: string, originalInput: any, public ref: MetaModel) { - super(name, originalInput); + constructor( + name: string, + originalInput: any, + options: MetaModelOptions, + public ref: MetaModel + ) { + super(name, originalInput, options); } } export class AnyModel extends MetaModel {} @@ -13,15 +37,19 @@ export class IntegerModel extends MetaModel {} export class StringModel extends MetaModel {} export class BooleanModel extends MetaModel {} export class TupleValueModel { - constructor(public index: number, public value: MetaModel) {} + constructor( + public index: number, + public value: MetaModel + ) {} } export class TupleModel extends MetaModel { constructor( name: string, originalInput: any, + options: MetaModelOptions, public tuple: TupleValueModel[] ) { - super(name, originalInput); + super(name, originalInput, options); } } export class ObjectPropertyModel { @@ -35,41 +63,58 @@ export class ObjectModel extends MetaModel { constructor( name: string, originalInput: any, + options: MetaModelOptions, public properties: { [key: string]: ObjectPropertyModel } ) { - super(name, originalInput); + super(name, originalInput, options); } } export class ArrayModel extends MetaModel { - constructor(name: string, originalInput: any, public valueModel: MetaModel) { - super(name, originalInput); + constructor( + name: string, + originalInput: any, + options: MetaModelOptions, + public valueModel: MetaModel + ) { + super(name, originalInput, options); } } + export class UnionModel extends MetaModel { - constructor(name: string, originalInput: any, public union: MetaModel[]) { - super(name, originalInput); + constructor( + name: string, + originalInput: any, + options: MetaModelOptions, + public union: MetaModel[] + ) { + super(name, originalInput, options); } } export class EnumValueModel { - constructor(public key: string, public value: any) {} + constructor( + public key: string, + public value: any + ) {} } export class EnumModel extends MetaModel { constructor( name: string, originalInput: any, + options: MetaModelOptions, public values: EnumValueModel[] ) { - super(name, originalInput); + super(name, originalInput, options); } } export class DictionaryModel extends MetaModel { constructor( name: string, originalInput: any, + options: MetaModelOptions, public key: MetaModel, public value: MetaModel, public serializationType: 'unwrap' | 'normal' = 'normal' ) { - super(name, originalInput); + super(name, originalInput, options); } } diff --git a/src/processors/AsyncAPIInputProcessor.ts b/src/processors/AsyncAPIInputProcessor.ts index f853098104..a7f96a591d 100644 --- a/src/processors/AsyncAPIInputProcessor.ts +++ b/src/processors/AsyncAPIInputProcessor.ts @@ -6,15 +6,17 @@ import { isOldAsyncAPIDocument, Parser, AsyncAPIDocumentInterface, - SchemaInterface as AsyncAPISchema + SchemaInterface as AsyncAPISchemaInterface, + SchemaV2 as AsyncAPISchema } from '@asyncapi/parser'; +import { AsyncAPISchemaObject } from '@asyncapi/parser/cjs/spec-types/v2'; import { AvroSchemaParser } from '@asyncapi/avro-schema-parser'; import { OpenAPISchemaParser } from '@asyncapi/openapi-schema-parser'; import { RamlDTSchemaParser } from '@asyncapi/raml-dt-schema-parser'; import { createDetailedAsyncAPI } from '@asyncapi/parser/cjs/utils'; import { AbstractInputProcessor } from './AbstractInputProcessor'; import { JsonSchemaInputProcessor } from './JsonSchemaInputProcessor'; -import { InputMetaModel, ProcessorOptions } from '../models'; +import { InputMetaModel, ProcessorOptions, UnionModel } from '../models'; import { Logger } from '../utils'; import { AsyncapiV2Schema } from '../models/AsyncapiV2Schema'; import { convertToMetaModel } from '../helpers'; @@ -84,30 +86,99 @@ export class AsyncAPIInputProcessor extends AbstractInputProcessor { } inputModel.originalInput = doc; - // Go over all the message payloads and convert them to models - for (const message of doc.allMessages()) { - const payload = message.payload(); - if (payload) { - const schema = AsyncAPIInputProcessor.convertToInternalSchema(payload); - const newCommonModel = - JsonSchemaInputProcessor.convertSchemaToCommonModel(schema, options); - if (newCommonModel.$id !== undefined) { - if (inputModel.models[newCommonModel.$id] !== undefined) { - Logger.warn( - `Overwriting existing model with $id ${newCommonModel.$id}, are there two models with the same id present?`, - newCommonModel - ); + + const addToInputModel = (payload: AsyncAPISchemaInterface) => { + const id = payload.title() || payload.id(); + + for (const model of Object.values(inputModel.models)) { + if (model instanceof UnionModel) { + for (const union of model.union) { + if (union.name === id) { + Logger.warn( + `Model ${id} has already been added to the input model` + ); + return; + } } - const metaModel = convertToMetaModel(newCommonModel); - inputModel.models[metaModel.name] = metaModel; - } else { + } + } + + const schema = AsyncAPIInputProcessor.convertToInternalSchema(payload); + const newCommonModel = + JsonSchemaInputProcessor.convertSchemaToCommonModel(schema, options); + + if (newCommonModel.$id !== undefined) { + if (inputModel.models[newCommonModel.$id] !== undefined) { Logger.warn( - 'Model did not have $id which is required, ignoring.', + `Overwriting existing model with $id ${newCommonModel.$id}, are there two models with the same id present?`, newCommonModel ); } + const metaModel = convertToMetaModel(newCommonModel); + inputModel.models[metaModel.name] = metaModel; + } else { + Logger.warn( + 'Model did not have $id which is required, ignoring.', + newCommonModel + ); + } + }; + + // Go over all the message payloads and convert them to models + const channels = doc.channels(); + + if (channels.length) { + for (const channel of doc.channels()) { + for (const operation of channel.operations()) { + const operationMessages = operation.messages(); + + // treat multiple messages as oneOf + if (operationMessages.length > 1) { + const oneOf: AsyncAPISchemaObject[] = []; + + for (const message of operationMessages) { + const payload = message.payload(); + + if (!payload) { + continue; + } + + oneOf.push(payload.json()); + } + + const payload = new AsyncAPISchema( + { + $id: channel.id(), + oneOf + }, + channel.meta() + ); + + addToInputModel(payload); + } else if (operationMessages.length === 1) { + const payload = operationMessages[0].payload(); + if (payload) { + addToInputModel(payload); + } + } + } + } + + for (const message of doc.messages()) { + const payload = message.payload(); + if (payload) { + addToInputModel(payload); + } + } + } else { + for (const message of doc.allMessages()) { + const payload = message.payload(); + if (payload) { + addToInputModel(payload); + } } } + return inputModel; } @@ -122,7 +193,7 @@ export class AsyncAPIInputProcessor extends AbstractInputProcessor { /* eslint-disable @typescript-eslint/no-non-null-assertion */ // eslint-disable-next-line sonarjs/cognitive-complexity static convertToInternalSchema( - schema: AsyncAPISchema | boolean, + schema: AsyncAPISchemaInterface | boolean, alreadyIteratedSchemas: Map = new Map() ): AsyncapiV2Schema | boolean { if (typeof schema === 'boolean') { @@ -155,21 +226,21 @@ export class AsyncAPIInputProcessor extends AbstractInputProcessor { if (schema.allOf()) { convertedSchema.allOf = schema .allOf()! - .map((item: any) => + .map((item) => this.convertToInternalSchema(item, alreadyIteratedSchemas) ); } if (schema.oneOf()) { convertedSchema.oneOf = schema .oneOf()! - .map((item: any) => + .map((item) => this.convertToInternalSchema(item, alreadyIteratedSchemas) ); } if (schema.anyOf()) { convertedSchema.anyOf = schema .anyOf()! - .map((item: any) => + .map((item) => this.convertToInternalSchema(item, alreadyIteratedSchemas) ); } @@ -229,13 +300,15 @@ export class AsyncAPIInputProcessor extends AbstractInputProcessor { } if (schema.items()) { if (Array.isArray(schema.items())) { - convertedSchema.items = (schema.items() as AsyncAPISchema[]).map( + convertedSchema.items = ( + schema.items() as AsyncAPISchemaInterface[] + ).map( (item) => this.convertToInternalSchema(item), alreadyIteratedSchemas ); } else { convertedSchema.items = this.convertToInternalSchema( - schema.items() as AsyncAPISchema, + schema.items() as AsyncAPISchemaInterface, alreadyIteratedSchemas ); } diff --git a/src/processors/JsonSchemaInputProcessor.ts b/src/processors/JsonSchemaInputProcessor.ts index d63bf5f024..b64aae1a66 100644 --- a/src/processors/JsonSchemaInputProcessor.ts +++ b/src/processors/JsonSchemaInputProcessor.ts @@ -476,6 +476,7 @@ export class JsonSchemaInputProcessor extends AbstractInputProcessor { | Draft6Schema | Draft7Schema | SwaggerV2Schema + | OpenapiV3Schema | AsyncapiV2Schema | boolean, options?: ProcessorOptions diff --git a/src/processors/OpenAPIInputProcessor.ts b/src/processors/OpenAPIInputProcessor.ts index c792588dde..88e175a635 100644 --- a/src/processors/OpenAPIInputProcessor.ts +++ b/src/processors/OpenAPIInputProcessor.ts @@ -101,6 +101,12 @@ export class OpenAPIInputProcessor extends AbstractInputProcessor { inputModel, options ); + this.iterateParameters( + pathObject.parameters, + `${formattedPathName}_parameters`, + inputModel, + options + ); } } @@ -112,6 +118,12 @@ export class OpenAPIInputProcessor extends AbstractInputProcessor { ) { if (operation) { this.iterateResponses(operation.responses, path, inputModel, options); + this.iterateParameters( + operation.parameters, + `${path}_parameters`, + inputModel, + options + ); if (operation.requestBody) { this.iterateMediaType( @@ -160,6 +172,27 @@ export class OpenAPIInputProcessor extends AbstractInputProcessor { } } + private iterateParameters( + parameters: + | (OpenAPIV3.ReferenceObject | OpenAPIV3.ParameterObject)[] + | undefined, + path: string, + inputModel: InputMetaModel, + options?: ProcessorOptions + ) { + for (const parameterObject of parameters || []) { + const parameter = parameterObject as OpenAPIV3.ParameterObject; + if (parameter.schema) { + this.includeSchema( + parameter.schema as OpenAPIV3.SchemaObject, + `${path}_${parameter.in}_${parameter.name}`, + inputModel, + options + ); + } + } + } + private iterateMediaType( mediaTypes: { [media: string]: OpenAPIV3.MediaTypeObject }, path: string, @@ -222,14 +255,14 @@ export class OpenAPIInputProcessor extends AbstractInputProcessor { schema: OpenAPIV3.SchemaObject, name: string ): OpenapiV3Schema { - let internalSchema = OpenapiV3Schema.toSchema(schema as any); - internalSchema = JsonSchemaInputProcessor.reflectSchemaNames( - internalSchema, + const namedSchema = JsonSchemaInputProcessor.reflectSchemaNames( + schema, {}, name, true ); - return internalSchema; + + return OpenapiV3Schema.toSchema(namedSchema); } /** diff --git a/test/TestUtils/TestConstrainer.ts b/test/TestUtils/TestConstrainer.ts index 856e921923..28dfd72155 100644 --- a/test/TestUtils/TestConstrainer.ts +++ b/test/TestUtils/TestConstrainer.ts @@ -1,7 +1,6 @@ -/* eslint-disable no-undef */ import { Constraints, TypeMapping } from '../../src/helpers'; -export const mockedTypeMapping: TypeMapping = { +export const mockedTypeMapping: TypeMapping = { Object: jest.fn().mockReturnValue('test'), Reference: jest.fn().mockReturnValue('test'), Any: jest.fn().mockReturnValue('test'), @@ -24,5 +23,6 @@ export const mockedConstraints: Constraints = { .fn() .mockImplementation( ({ objectPropertyModel }) => objectPropertyModel.propertyName - ) + ), + constant: jest.fn().mockImplementation(({ constValue }) => constValue) }; diff --git a/test/TestUtils/TestGenerator.ts b/test/TestUtils/TestGenerator.ts index 90ec0a4c95..8c3bd6f508 100644 --- a/test/TestUtils/TestGenerator.ts +++ b/test/TestUtils/TestGenerator.ts @@ -1,13 +1,14 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import { AbstractGenerator, - InputMetaModel, IndentationTypes, RenderOutput, ConstrainedMetaModel, MetaModel, ConstrainedAnyModel, - Preset + Preset, + AbstractGeneratorRenderCompleteModelArgs, + AbstractGeneratorRenderArgs } from '../../src'; import { AbstractDependencyManager } from '../../src/generators/AbstractDependencyManager'; @@ -23,37 +24,37 @@ export class TestGenerator extends AbstractGenerator { } public constrainToMetaModel(model: MetaModel): ConstrainedMetaModel { - return new ConstrainedAnyModel(model.name, undefined, ''); + return new ConstrainedAnyModel(model.name, undefined, {}, ''); } + public splitMetaModel(model: MetaModel): MetaModel[] { return [model]; } - public render( - model: MetaModel, - inputModel: InputMetaModel - ): Promise { + + public render(args: AbstractGeneratorRenderArgs): Promise { return Promise.resolve( RenderOutput.toRenderOutput({ - result: model.name || 'rendered content', + result: args.constrainedModel.name || 'rendered content', renderedName: 'TestName' }) ); } + public renderCompleteModel( - model: MetaModel, - inputModel: InputMetaModel, - options: any + args: AbstractGeneratorRenderCompleteModelArgs ): Promise { return Promise.resolve( RenderOutput.toRenderOutput({ - result: model.name || 'rendered complete content', + result: args.constrainedModel.name || 'rendered complete content', renderedName: 'TestName' }) ); } + public testGetPresets(string: string): Array<[Preset, unknown]> { return this.getPresets(string); } + public getDependencyManager(options: any): AbstractDependencyManager { return new AbstractDependencyManager(); } diff --git a/test/blackbox/BlackBoxTestFiles.ts b/test/blackbox/BlackBoxTestFiles.ts index 3dcaeadda5..03453a28af 100644 --- a/test/blackbox/BlackBoxTestFiles.ts +++ b/test/blackbox/BlackBoxTestFiles.ts @@ -50,7 +50,7 @@ const filesToTest = [ ...AsyncAPIV2_5Files, ...AsyncAPIV2_6Files, ...jsonSchemaDraft4Files.filter(({ file }) => { - // Too large to process in normal blackbox testing, can be used lto ocally test stuff. + // Too large to process in normal blackbox testing, can be used to locally test stuff. return !file.includes('aws-cloudformation.json'); }), ...jsonSchemaDraft7Files.filter(({ file }) => { diff --git a/test/blackbox/blackbox-csharp.spec.ts b/test/blackbox/blackbox-csharp.spec.ts index e1664dfaa6..f59e0ab291 100644 --- a/test/blackbox/blackbox-csharp.spec.ts +++ b/test/blackbox/blackbox-csharp.spec.ts @@ -1,5 +1,5 @@ /** - * Blackbox tests are the final line of defence, that takes different real-life example documents and generate their corresponding models in all supported languages. + * Blackbox tests are the final line of defense, that takes different real-life example documents and generate their corresponding models in all supported languages. * * For those languages where it is possible, the models are compiled/transpiled to ensure there are no syntax errors in generated models. * diff --git a/test/blackbox/blackbox-go.spec.ts b/test/blackbox/blackbox-go.spec.ts index a5d8b92ea9..da2b8a65ab 100644 --- a/test/blackbox/blackbox-go.spec.ts +++ b/test/blackbox/blackbox-go.spec.ts @@ -1,5 +1,5 @@ /** - * Blackbox tests are the final line of defence, that takes different real-life example documents and generate their corresponding models in all supported languages. + * Blackbox tests are the final line of defense, that takes different real-life example documents and generate their corresponding models in all supported languages. * * For those languages where it is possible, the models are compiled/transpiled to ensure there are no syntax errors in generated models. * diff --git a/test/blackbox/blackbox-java.spec.ts b/test/blackbox/blackbox-java.spec.ts index 4410c95e30..7028744eca 100644 --- a/test/blackbox/blackbox-java.spec.ts +++ b/test/blackbox/blackbox-java.spec.ts @@ -1,5 +1,5 @@ /** - * Blackbox tests are the final line of defence, that takes different real-life example documents and generate their corresponding models in all supported languages. + * Blackbox tests are the final line of defense, that takes different real-life example documents and generate their corresponding models in all supported languages. * * For those languages where it is possible, the models are compiled/transpiled to ensure there are no syntax errors in generated models. * @@ -56,8 +56,8 @@ describe.each(filesToTest)( ]; describe.each(javaGeneratorOptions)( 'should be able to generate and compile Java', - ({ generatorOption, renderOutputPath }) => { - test('class and enums', async () => { + ({ generatorOption, renderOutputPath, description }) => { + test(`class and enums ${description}`, async () => { const generator = new JavaFileGenerator(generatorOption); const dependencyPath = path.resolve( __dirname, diff --git a/test/blackbox/blackbox-javascript.spec.ts b/test/blackbox/blackbox-javascript.spec.ts index bd001bafd5..8618eff2ef 100644 --- a/test/blackbox/blackbox-javascript.spec.ts +++ b/test/blackbox/blackbox-javascript.spec.ts @@ -1,5 +1,5 @@ /** - * Blackbox tests are the final line of defence, that takes different real-life example documents and generate their corresponding models in all supported languages. + * Blackbox tests are the final line of defense, that takes different real-life example documents and generate their corresponding models in all supported languages. * * For those languages where it is possible, the models are compiled/transpiled to ensure there are no syntax errors in generated models. * diff --git a/test/blackbox/blackbox-kotlin.spec.ts b/test/blackbox/blackbox-kotlin.spec.ts index eadf6fa8e0..d2b5004cbc 100644 --- a/test/blackbox/blackbox-kotlin.spec.ts +++ b/test/blackbox/blackbox-kotlin.spec.ts @@ -1,5 +1,5 @@ /** - * Blackbox tests are the final line of defence, that takes different real-life example documents and generate their corresponding models in all supported languages. + * Blackbox tests are the final line of defense, that takes different real-life example documents and generate their corresponding models in all supported languages. * * For those languages where it is possible, the models are compiled/transpiled to ensure there are no syntax errors in generated models. * @@ -73,8 +73,8 @@ describeIf(!isWindows).each(filesToTest)( describe.each(kotlinGeneratorOptions)( 'should be able to generate and compile Kotlin', - ({ generatorOption, renderOutputPath }) => { - test('class and enums', async () => { + ({ generatorOption, renderOutputPath, description }) => { + test(`class and enums ${description}`, async () => { const generator = new KotlinFileGenerator(generatorOption); const dependencyPath = path.resolve( __dirname, diff --git a/test/blackbox/blackbox-python.spec.ts b/test/blackbox/blackbox-python.spec.ts index 054288fa80..bd559d05a1 100644 --- a/test/blackbox/blackbox-python.spec.ts +++ b/test/blackbox/blackbox-python.spec.ts @@ -1,5 +1,5 @@ /** - * Blackbox tests are the final line of defence, that takes different real-life example documents and generate their corresponding models in all supported languages. + * Blackbox tests are the final line of defense, that takes different real-life example documents and generate their corresponding models in all supported languages. * * For those languages where it is possible, the models are compiled/transpiled to ensure there are no syntax errors in generated models. * diff --git a/test/blackbox/blackbox-rust.spec.ts b/test/blackbox/blackbox-rust.spec.ts index af32364f6d..2631e1fd01 100644 --- a/test/blackbox/blackbox-rust.spec.ts +++ b/test/blackbox/blackbox-rust.spec.ts @@ -1,5 +1,5 @@ /** - * Blackbox tests are the final line of defence, that takes different real-life example documents and generate their corresponding models in all supported languages. + * Blackbox tests are the final line of defense, that takes different real-life example documents and generate their corresponding models in all supported languages. * * For those languages where it is possible, the models are compiled/transpiled to ensure there are no syntax errors in generated models. * @@ -39,6 +39,7 @@ describe.each(filesToTest)( models = await processor.process(input); }); describe(file, () => { + // eslint-disable-next-line jest/no-disabled-tests describe.skip('should be able to generate Rust', () => { test('struct with serde_json', async () => { const generator = new RustFileGenerator(); diff --git a/test/blackbox/blackbox-typescript.spec.ts b/test/blackbox/blackbox-typescript.spec.ts index c50eeb1250..e797dffd83 100644 --- a/test/blackbox/blackbox-typescript.spec.ts +++ b/test/blackbox/blackbox-typescript.spec.ts @@ -1,5 +1,5 @@ /** - * Blackbox tests are the final line of defence, that takes different real-life example documents and generate their corresponding models in all supported languages. + * Blackbox tests are the final line of defense, that takes different real-life example documents and generate their corresponding models in all supported languages. * * For those languages where it is possible, the models are compiled/transpiled to ensure there are no syntax errors in generated models. * diff --git a/test/generators/AbstractGenerator.spec.ts b/test/generators/AbstractGenerator.spec.ts index 526803aa4d..5748cf2c18 100644 --- a/test/generators/AbstractGenerator.spec.ts +++ b/test/generators/AbstractGenerator.spec.ts @@ -1,5 +1,10 @@ -import { InputMetaModel, AnyModel } from '../../src/models'; +import { + InputMetaModel, + AnyModel, + ConstrainedMetaModel +} from '../../src/models'; import { TestGenerator } from '../TestUtils/TestGenerator'; + describe('AbstractGenerator', () => { let generator: TestGenerator; beforeEach(() => { @@ -8,7 +13,7 @@ describe('AbstractGenerator', () => { test('generate() should return OutputModels', async () => { const cim = new InputMetaModel(); - const model = new AnyModel('test', undefined); + const model = new AnyModel('test', undefined, {}); cim.models[model.name] = model; const outputModels = await generator.generate(cim); @@ -18,7 +23,7 @@ describe('AbstractGenerator', () => { test('generateCompleteModels() should return OutputModels', async () => { const cim = new InputMetaModel(); - const model = new AnyModel('test', undefined); + const model = new AnyModel('test', undefined, {}); cim.models[model.name] = model; const outputModels = await generator.generateCompleteModels(cim, {}); @@ -28,7 +33,7 @@ describe('AbstractGenerator', () => { test('generate() should process InputMetaModel instance', async () => { const cim = new InputMetaModel(); - const model = new AnyModel('test', undefined); + const model = new AnyModel('test', undefined, {}); cim.models[model.name] = model; const outputModels = await generator.generate(cim); expect(outputModels[0].result).toEqual('test'); @@ -37,7 +42,7 @@ describe('AbstractGenerator', () => { test('generateCompleteModels() should process InputMetaModel instance', async () => { const cim = new InputMetaModel(); - const model = new AnyModel('test', undefined); + const model = new AnyModel('test', undefined, {}); cim.models[model.name] = model; const outputModels = await generator.generateCompleteModels(cim, {}); @@ -64,10 +69,12 @@ describe('AbstractGenerator', () => { const doc: any = { type: 'string', $id: 'SomeModel' }; const commonInputModel = await generator.process(doc); const keys = Object.keys(commonInputModel.models); - const renderedContent = await generator.render( - commonInputModel.models[keys[0]], - commonInputModel - ); + const renderedContent = await generator.render({ + constrainedModel: commonInputModel.models[ + keys[0] + ] as ConstrainedMetaModel, + inputModel: commonInputModel + }); expect(renderedContent.result).toEqual('SomeModel'); expect(renderedContent.renderedName).toEqual('TestName'); diff --git a/test/generators/cplusplus/CplusplusConstrainer.spec.ts b/test/generators/cplusplus/CplusplusConstrainer.spec.ts index 0127cc3217..af9c4679de 100644 --- a/test/generators/cplusplus/CplusplusConstrainer.spec.ts +++ b/test/generators/cplusplus/CplusplusConstrainer.spec.ts @@ -22,7 +22,7 @@ const dependencyFactory = () => { describe('CplusplusConstrainer', () => { describe('ObjectModel', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedObjectModel('test', undefined, '', {}); + const model = new ConstrainedObjectModel('test', undefined, {}, '', {}); const type = CplusplusDefaultTypeMapping.Object({ constrainedModel: model, options: CplusplusGenerator.defaultOptions, @@ -33,10 +33,11 @@ describe('CplusplusConstrainer', () => { }); describe('Reference', () => { test('should render the constrained name as type', () => { - const refModel = new ConstrainedAnyModel('test', undefined, ''); + const refModel = new ConstrainedAnyModel('test', undefined, {}, ''); const model = new ConstrainedReferenceModel( 'test', undefined, + {}, '', refModel ); @@ -50,7 +51,7 @@ describe('CplusplusConstrainer', () => { }); describe('Any', () => { test('should render type', () => { - const model = new ConstrainedAnyModel('test', undefined, ''); + const model = new ConstrainedAnyModel('test', undefined, {}, ''); const type = CplusplusDefaultTypeMapping.Any({ constrainedModel: model, options: CplusplusGenerator.defaultOptions, @@ -61,7 +62,7 @@ describe('CplusplusConstrainer', () => { }); describe('Float', () => { test('should render type', () => { - const model = new ConstrainedFloatModel('test', undefined, ''); + const model = new ConstrainedFloatModel('test', undefined, {}, ''); const type = CplusplusDefaultTypeMapping.Float({ constrainedModel: model, options: CplusplusGenerator.defaultOptions, @@ -72,7 +73,7 @@ describe('CplusplusConstrainer', () => { }); describe('Integer', () => { test('should render type', () => { - const model = new ConstrainedIntegerModel('test', undefined, ''); + const model = new ConstrainedIntegerModel('test', undefined, {}, ''); const type = CplusplusDefaultTypeMapping.Integer({ constrainedModel: model, options: CplusplusGenerator.defaultOptions, @@ -83,7 +84,7 @@ describe('CplusplusConstrainer', () => { }); describe('String', () => { test('should render type', () => { - const model = new ConstrainedStringModel('test', undefined, ''); + const model = new ConstrainedStringModel('test', undefined, {}, ''); const type = CplusplusDefaultTypeMapping.String({ constrainedModel: model, options: CplusplusGenerator.defaultOptions, @@ -94,7 +95,7 @@ describe('CplusplusConstrainer', () => { }); describe('Boolean', () => { test('should render type', () => { - const model = new ConstrainedBooleanModel('test', undefined, ''); + const model = new ConstrainedBooleanModel('test', undefined, {}, ''); const type = CplusplusDefaultTypeMapping.Boolean({ constrainedModel: model, options: CplusplusGenerator.defaultOptions, @@ -109,10 +110,11 @@ describe('CplusplusConstrainer', () => { const stringModel = new ConstrainedStringModel( 'test', undefined, + {}, 'std::string' ); const tupleValueModel = new ConstrainedTupleValueModel(0, stringModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel ]); const type = CplusplusDefaultTypeMapping.Tuple({ @@ -126,11 +128,12 @@ describe('CplusplusConstrainer', () => { const stringModel = new ConstrainedStringModel( 'test', undefined, + {}, 'std::string' ); const tupleValueModel0 = new ConstrainedTupleValueModel(0, stringModel); const tupleValueModel1 = new ConstrainedTupleValueModel(1, stringModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel0, tupleValueModel1 ]); @@ -148,11 +151,13 @@ describe('CplusplusConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'std::string' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -167,7 +172,7 @@ describe('CplusplusConstrainer', () => { describe('Enum', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedEnumModel('Test', undefined, '', []); + const model = new ConstrainedEnumModel('Test', undefined, {}, '', []); const type = CplusplusDefaultTypeMapping.Enum({ constrainedModel: model, options: CplusplusGenerator.defaultOptions, @@ -182,9 +187,10 @@ describe('CplusplusConstrainer', () => { const unionModel = new ConstrainedStringModel( 'test', undefined, + {}, 'std::string' ); - const model = new ConstrainedUnionModel('test', undefined, '', [ + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ unionModel ]); const type = CplusplusDefaultTypeMapping.Union({ @@ -198,14 +204,16 @@ describe('CplusplusConstrainer', () => { const unionModel1 = new ConstrainedStringModel( 'test', undefined, + {}, 'std::string' ); const unionModel2 = new ConstrainedStringModel( 'test', undefined, + {}, 'std::string' ); - const model = new ConstrainedUnionModel('test', undefined, '', [ + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ unionModel1, unionModel2 ]); @@ -223,16 +231,19 @@ describe('CplusplusConstrainer', () => { const keyModel = new ConstrainedStringModel( 'test', undefined, + {}, 'std::string' ); const valueModel = new ConstrainedStringModel( 'test', undefined, + {}, 'std::string' ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel diff --git a/test/generators/csharp/CSharpConstrainer.spec.ts b/test/generators/csharp/CSharpConstrainer.spec.ts index 8c6dc7c9ba..e9285dc01a 100644 --- a/test/generators/csharp/CSharpConstrainer.spec.ts +++ b/test/generators/csharp/CSharpConstrainer.spec.ts @@ -29,7 +29,7 @@ describe('CSharpConstrainer', () => { }; describe('ObjectModel', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedObjectModel('test', undefined, '', {}); + const model = new ConstrainedObjectModel('test', undefined, {}, '', {}); const type = CSharpDefaultTypeMapping.Object({ constrainedModel: model, ...defaultOptions @@ -39,10 +39,11 @@ describe('CSharpConstrainer', () => { }); describe('Reference', () => { test('should render the constrained name as type', () => { - const refModel = new ConstrainedAnyModel('test', undefined, ''); + const refModel = new ConstrainedAnyModel('test', undefined, {}, ''); const model = new ConstrainedReferenceModel( 'test', undefined, + {}, '', refModel ); @@ -55,7 +56,7 @@ describe('CSharpConstrainer', () => { }); describe('Any', () => { test('should render type', () => { - const model = new ConstrainedAnyModel('test', undefined, ''); + const model = new ConstrainedAnyModel('test', undefined, {}, ''); const type = CSharpDefaultTypeMapping.Any({ constrainedModel: model, ...defaultOptions @@ -65,7 +66,7 @@ describe('CSharpConstrainer', () => { }); describe('Float', () => { test('should render type', () => { - const model = new ConstrainedFloatModel('test', undefined, ''); + const model = new ConstrainedFloatModel('test', undefined, {}, ''); const type = CSharpDefaultTypeMapping.Float({ constrainedModel: model, ...defaultOptions @@ -75,7 +76,7 @@ describe('CSharpConstrainer', () => { }); describe('Integer', () => { test('should render type', () => { - const model = new ConstrainedIntegerModel('test', undefined, ''); + const model = new ConstrainedIntegerModel('test', undefined, {}, ''); const type = CSharpDefaultTypeMapping.Integer({ constrainedModel: model, ...defaultOptions @@ -85,7 +86,7 @@ describe('CSharpConstrainer', () => { }); describe('String', () => { test('should render type', () => { - const model = new ConstrainedStringModel('test', undefined, ''); + const model = new ConstrainedStringModel('test', undefined, {}, ''); const type = CSharpDefaultTypeMapping.String({ constrainedModel: model, ...defaultOptions @@ -95,7 +96,7 @@ describe('CSharpConstrainer', () => { }); describe('Boolean', () => { test('should render type', () => { - const model = new ConstrainedBooleanModel('test', undefined, ''); + const model = new ConstrainedBooleanModel('test', undefined, {}, ''); const type = CSharpDefaultTypeMapping.Boolean({ constrainedModel: model, ...defaultOptions @@ -109,10 +110,11 @@ describe('CSharpConstrainer', () => { const tupleModel = new ConstrainedBooleanModel( 'test', undefined, + {}, 'string' ); const tupleValueModel = new ConstrainedTupleValueModel(0, tupleModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel ]); const type = CSharpDefaultTypeMapping.Tuple({ @@ -125,11 +127,12 @@ describe('CSharpConstrainer', () => { const tupleModel = new ConstrainedBooleanModel( 'test', undefined, + {}, 'string' ); const tupleValueModel0 = new ConstrainedTupleValueModel(0, tupleModel); const tupleValueModel1 = new ConstrainedTupleValueModel(1, tupleModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel0, tupleValueModel1 ]); @@ -146,11 +149,13 @@ describe('CSharpConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -169,11 +174,13 @@ describe('CSharpConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -192,8 +199,12 @@ describe('CSharpConstrainer', () => { describe('Enum', () => { test('should render string enum values as String type', () => { - const enumValue = new ConstrainedEnumValueModel('test', 'string type'); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue = new ConstrainedEnumValueModel( + 'test', + 'string type', + {} + ); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue ]); const type = CSharpDefaultTypeMapping.Enum({ @@ -203,8 +214,8 @@ describe('CSharpConstrainer', () => { expect(type).toEqual('string'); }); test('should render boolean enum values as boolean type', () => { - const enumValue = new ConstrainedEnumValueModel('test', true); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue = new ConstrainedEnumValueModel('test', true, {}); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue ]); const type = CSharpDefaultTypeMapping.Enum({ @@ -213,9 +224,9 @@ describe('CSharpConstrainer', () => { }); expect(type).toEqual('bool'); }); - test('should render generic number enum value with format ', () => { - const enumValue = new ConstrainedEnumValueModel('test', 123); - const model = new ConstrainedEnumModel('test', undefined, '', [ + test('should render generic number enum value with format', () => { + const enumValue = new ConstrainedEnumValueModel('test', 123, {}); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue ]); const type = CSharpDefaultTypeMapping.Enum({ @@ -225,8 +236,8 @@ describe('CSharpConstrainer', () => { expect(type).toEqual('int'); }); test('should render object enum value as generic Object', () => { - const enumValue = new ConstrainedEnumValueModel('test', {}); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue = new ConstrainedEnumValueModel('test', {}, {}); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue ]); const type = CSharpDefaultTypeMapping.Enum({ @@ -236,9 +247,13 @@ describe('CSharpConstrainer', () => { expect(type).toEqual('dynamic'); }); test('should render multiple value types as generic Object', () => { - const enumValue2 = new ConstrainedEnumValueModel('test', true); - const enumValue1 = new ConstrainedEnumValueModel('test', 'string type'); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue2 = new ConstrainedEnumValueModel('test', true, {}); + const enumValue1 = new ConstrainedEnumValueModel( + 'test', + 'string type', + {} + ); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue1, enumValue2 ]); @@ -249,9 +264,9 @@ describe('CSharpConstrainer', () => { expect(type).toEqual('dynamic'); }); test('should render double and integer as dynamic type', () => { - const enumValue2 = new ConstrainedEnumValueModel('test', 123); - const enumValue1 = new ConstrainedEnumValueModel('test', 123.12); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue2 = new ConstrainedEnumValueModel('test', 123, {}); + const enumValue1 = new ConstrainedEnumValueModel('test', 123.12, {}); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue1, enumValue2 ]); @@ -265,7 +280,7 @@ describe('CSharpConstrainer', () => { describe('Union', () => { test('should render type', () => { - const model = new ConstrainedUnionModel('test', undefined, '', []); + const model = new ConstrainedUnionModel('test', undefined, {}, '', []); const type = CSharpDefaultTypeMapping.Union({ constrainedModel: model, ...defaultOptions @@ -276,15 +291,22 @@ describe('CSharpConstrainer', () => { describe('Dictionary', () => { test('should render type', () => { - const keyModel = new ConstrainedStringModel('test', undefined, 'String'); + const keyModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'String' + ); const valueModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel diff --git a/test/generators/csharp/__snapshots__/CSharpGenerator.spec.ts.snap b/test/generators/csharp/__snapshots__/CSharpGenerator.spec.ts.snap index ab60c963de..c29a891619 100644 --- a/test/generators/csharp/__snapshots__/CSharpGenerator.spec.ts.snap +++ b/test/generators/csharp/__snapshots__/CSharpGenerator.spec.ts.snap @@ -42,7 +42,7 @@ exports[`CSharpGenerator should render \`class\` type 1`] = ` private bool? marriage; private dynamic? members; private dynamic[]? tupleType; - private dynamic[] arrayType; + private string[] arrayType; private Dictionary? additionalProperties; public string StreetName @@ -87,7 +87,7 @@ exports[`CSharpGenerator should render \`class\` type 1`] = ` set { tupleType = value; } } - public dynamic[] ArrayType + public string[] ArrayType { get { return arrayType; } set { arrayType = value; } @@ -152,7 +152,7 @@ exports[`CSharpGenerator should render \`record\` type if chosen 1`] = ` public bool? Marriage { get; init; } public dynamic? Members { get; init; } public dynamic[]? TupleType { get; init; } - public required dynamic[] ArrayType { get; init; } + public required string[] ArrayType { get; init; } public Dictionary? AdditionalProperties { get; init; } }" `; @@ -309,7 +309,7 @@ exports[`CSharpGenerator should render null-forgiving operator if handleNullable private TerraceType? terraceType; private dynamic? members; private dynamic[]? tupleType; - private dynamic[] arrayType = null!; + private string[] arrayType = null!; private Dictionary? additionalProperties; public string StreetName @@ -366,7 +366,7 @@ exports[`CSharpGenerator should render null-forgiving operator if handleNullable set { tupleType = value; } } - public dynamic[] ArrayType + public string[] ArrayType { get { return arrayType; } set { arrayType = value; } diff --git a/test/generators/csharp/constrainer/EnumConstrainer.spec.ts b/test/generators/csharp/constrainer/EnumConstrainer.spec.ts index 387ec07699..1ec31923d8 100644 --- a/test/generators/csharp/constrainer/EnumConstrainer.spec.ts +++ b/test/generators/csharp/constrainer/EnumConstrainer.spec.ts @@ -10,10 +10,11 @@ import { DefaultEnumKeyConstraints } from '../../../../src/generators/csharp/constrainer/EnumConstrainer'; describe('EnumConstrainer', () => { - const enumModel = new EnumModel('test', undefined, []); + const enumModel = new EnumModel('test', undefined, {}, []); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [] ); @@ -38,11 +39,13 @@ describe('EnumConstrainer', () => { test('should not contain duplicate keys', () => { const existingConstrainedEnumValueModel = new ConstrainedEnumValueModel( 'EMPTY', + 'return', 'return' ); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [existingConstrainedEnumValueModel] ); diff --git a/test/generators/csharp/constrainer/PropertyKeyConstrainer.spec.ts b/test/generators/csharp/constrainer/PropertyKeyConstrainer.spec.ts index 2193c17291..2c2e86c94c 100644 --- a/test/generators/csharp/constrainer/PropertyKeyConstrainer.spec.ts +++ b/test/generators/csharp/constrainer/PropertyKeyConstrainer.spec.ts @@ -11,10 +11,11 @@ import { PropertyKeyConstraintOptions } from '../../../../src/generators/csharp/constrainer/PropertyKeyConstrainer'; describe('PropertyKeyConstrainer', () => { - const objectModel = new ObjectModel('MyObjectModelName', undefined, {}); + const objectModel = new ObjectModel('MyObjectModelName', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'MyObjectModelName', undefined, + {}, '', {} ); @@ -60,10 +61,11 @@ describe('PropertyKeyConstrainer', () => { expect(constrainedKey).toEqual('reservedMyObjectModelName'); }); test('should not contain duplicate properties', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); diff --git a/test/generators/dart/DartConstrainer.spec.ts b/test/generators/dart/DartConstrainer.spec.ts index a2f54af2bb..4f2d72bbd2 100644 --- a/test/generators/dart/DartConstrainer.spec.ts +++ b/test/generators/dart/DartConstrainer.spec.ts @@ -24,7 +24,7 @@ describe('DartConstrainer', () => { }; describe('ObjectModel', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedObjectModel('test', undefined, '', {}); + const model = new ConstrainedObjectModel('test', undefined, {}, '', {}); const type = DartDefaultTypeMapping.Object({ constrainedModel: model, ...defaultOptions @@ -34,10 +34,11 @@ describe('DartConstrainer', () => { }); describe('Reference', () => { test('should render the constrained name as type', () => { - const refModel = new ConstrainedAnyModel('test', undefined, ''); + const refModel = new ConstrainedAnyModel('test', undefined, {}, ''); const model = new ConstrainedReferenceModel( 'test', undefined, + {}, '', refModel ); @@ -50,7 +51,7 @@ describe('DartConstrainer', () => { }); describe('Any', () => { test('should render type', () => { - const model = new ConstrainedAnyModel('test', undefined, ''); + const model = new ConstrainedAnyModel('test', undefined, {}, ''); const type = DartDefaultTypeMapping.Any({ constrainedModel: model, ...defaultOptions @@ -60,7 +61,7 @@ describe('DartConstrainer', () => { }); describe('Float', () => { test('should render type', () => { - const model = new ConstrainedFloatModel('test', undefined, ''); + const model = new ConstrainedFloatModel('test', undefined, {}, ''); const type = DartDefaultTypeMapping.Float({ constrainedModel: model, ...defaultOptions @@ -70,7 +71,7 @@ describe('DartConstrainer', () => { }); describe('Integer', () => { test('should render type', () => { - const model = new ConstrainedIntegerModel('test', undefined, ''); + const model = new ConstrainedIntegerModel('test', undefined, {}, ''); const type = DartDefaultTypeMapping.Integer({ constrainedModel: model, ...defaultOptions @@ -80,7 +81,7 @@ describe('DartConstrainer', () => { }); describe('String', () => { test('should render type', () => { - const model = new ConstrainedStringModel('test', undefined, ''); + const model = new ConstrainedStringModel('test', undefined, {}, ''); const type = DartDefaultTypeMapping.String({ constrainedModel: model, ...defaultOptions @@ -90,7 +91,7 @@ describe('DartConstrainer', () => { }); describe('Boolean', () => { test('should render type', () => { - const model = new ConstrainedBooleanModel('test', undefined, ''); + const model = new ConstrainedBooleanModel('test', undefined, {}, ''); const type = DartDefaultTypeMapping.Boolean({ constrainedModel: model, ...defaultOptions @@ -101,7 +102,7 @@ describe('DartConstrainer', () => { describe('Tuple', () => { test('should render default type', () => { - const model = new ConstrainedTupleModel('test', undefined, '', []); + const model = new ConstrainedTupleModel('test', undefined, {}, '', []); const optionsToUse: DartOptions = { ...DartGenerator.defaultOptions }; const type = DartDefaultTypeMapping.Tuple({ constrainedModel: model, @@ -111,7 +112,7 @@ describe('DartConstrainer', () => { expect(type).toEqual('List'); }); test('should render type with custom collection type', () => { - const model = new ConstrainedTupleModel('test', undefined, '', []); + const model = new ConstrainedTupleModel('test', undefined, {}, '', []); const optionsToUse: DartOptions = { ...DartGenerator.defaultOptions, collectionType: 'List' @@ -130,11 +131,13 @@ describe('DartConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'string' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -148,11 +151,13 @@ describe('DartConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'string' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -171,7 +176,7 @@ describe('DartConstrainer', () => { describe('Enum', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedEnumModel('test', undefined, '', []); + const model = new ConstrainedEnumModel('test', undefined, {}, '', []); const type = DartDefaultTypeMapping.Enum({ constrainedModel: model, ...defaultOptions @@ -182,7 +187,7 @@ describe('DartConstrainer', () => { describe('Union', () => { test('should render type', () => { - const model = new ConstrainedUnionModel('test', undefined, '', []); + const model = new ConstrainedUnionModel('test', undefined, {}, '', []); const type = DartDefaultTypeMapping.Union({ constrainedModel: model, ...defaultOptions @@ -193,15 +198,22 @@ describe('DartConstrainer', () => { describe('Dictionary', () => { test('should render type', () => { - const keyModel = new ConstrainedStringModel('test', undefined, 'string'); + const keyModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'string' + ); const valueModel = new ConstrainedStringModel( 'test', undefined, + {}, 'string' ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel diff --git a/test/generators/dart/constrainer/EnumConstrainer.spec.ts b/test/generators/dart/constrainer/EnumConstrainer.spec.ts index bb26864b4b..aedbc3dda2 100644 --- a/test/generators/dart/constrainer/EnumConstrainer.spec.ts +++ b/test/generators/dart/constrainer/EnumConstrainer.spec.ts @@ -10,10 +10,11 @@ import { DefaultEnumKeyConstraints } from '../../../../src/generators/dart/constrainer/EnumConstrainer'; describe('EnumConstrainer', () => { - const enumModel = new EnumModel('test', undefined, []); + const enumModel = new EnumModel('test', undefined, {}, []); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [] ); @@ -38,11 +39,13 @@ describe('EnumConstrainer', () => { test('should not contain duplicate keys', () => { const existingConstrainedEnumValueModel = new ConstrainedEnumValueModel( 'EMPTY', + 'return', 'return' ); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [existingConstrainedEnumValueModel] ); diff --git a/test/generators/dart/constrainer/PropertyKeyConstrainer.spec.ts b/test/generators/dart/constrainer/PropertyKeyConstrainer.spec.ts index dd16f45f8b..4e88ec352c 100644 --- a/test/generators/dart/constrainer/PropertyKeyConstrainer.spec.ts +++ b/test/generators/dart/constrainer/PropertyKeyConstrainer.spec.ts @@ -11,10 +11,11 @@ import { PropertyKeyConstraintOptions } from '../../../../src/generators/dart/constrainer/PropertyKeyConstrainer'; describe('PropertyKeyConstrainer', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); @@ -59,10 +60,11 @@ describe('PropertyKeyConstrainer', () => { expect(constrainedKey).toEqual('someWeirdValueExclamationQuotationHash_2'); }); test('should not contain duplicate properties', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); diff --git a/test/generators/dart/presets/JsonPreset.spec.ts b/test/generators/dart/presets/JsonPreset.spec.ts index f43ddac456..4ddbedcf45 100644 --- a/test/generators/dart/presets/JsonPreset.spec.ts +++ b/test/generators/dart/presets/JsonPreset.spec.ts @@ -13,18 +13,18 @@ describe('DART_JSON_PRESET', () => { }); test('should render json annotations', async () => { - const model = new ConstrainedObjectModel('Clazz', undefined, 'Clazz', { + const model = new ConstrainedObjectModel('Clazz', undefined, {}, 'Clazz', { minNumberProp: new ConstrainedObjectPropertyModel( 'minNumberProp', 'min_number_prop', false, - new ConstrainedFloatModel('minNumberProp', undefined, 'double') + new ConstrainedFloatModel('minNumberProp', undefined, {}, 'double') ), maxNumberProp: new ConstrainedObjectPropertyModel( 'maxNumberProp', 'max_number_prop', false, - new ConstrainedFloatModel('maxNumberProp', undefined, 'double') + new ConstrainedFloatModel('maxNumberProp', undefined, {}, 'double') ) }); const inputModel = new InputMetaModel(); diff --git a/test/generators/go/GoConstrainer.spec.ts b/test/generators/go/GoConstrainer.spec.ts index 54eacc3f7e..46edabcb5f 100644 --- a/test/generators/go/GoConstrainer.spec.ts +++ b/test/generators/go/GoConstrainer.spec.ts @@ -22,7 +22,7 @@ describe('GoConstrainer', () => { }; describe('ObjectModel', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedObjectModel('test', undefined, '', {}); + const model = new ConstrainedObjectModel('test', undefined, {}, '', {}); const type = GoDefaultTypeMapping.Object({ constrainedModel: model, ...defaultOptions @@ -32,10 +32,11 @@ describe('GoConstrainer', () => { }); describe('Reference', () => { test('should render the constrained name as type', () => { - const refModel = new ConstrainedAnyModel('test', undefined, ''); + const refModel = new ConstrainedAnyModel('test', undefined, {}, ''); const model = new ConstrainedReferenceModel( 'test', undefined, + {}, '', refModel ); @@ -48,7 +49,7 @@ describe('GoConstrainer', () => { }); describe('Any', () => { test('should render type', () => { - const model = new ConstrainedAnyModel('test', undefined, ''); + const model = new ConstrainedAnyModel('test', undefined, {}, ''); const type = GoDefaultTypeMapping.Any({ constrainedModel: model, ...defaultOptions @@ -58,7 +59,7 @@ describe('GoConstrainer', () => { }); describe('Float', () => { test('should render type', () => { - const model = new ConstrainedFloatModel('test', undefined, ''); + const model = new ConstrainedFloatModel('test', undefined, {}, ''); const type = GoDefaultTypeMapping.Float({ constrainedModel: model, ...defaultOptions @@ -68,7 +69,7 @@ describe('GoConstrainer', () => { }); describe('Integer', () => { test('should render type', () => { - const model = new ConstrainedIntegerModel('test', undefined, ''); + const model = new ConstrainedIntegerModel('test', undefined, {}, ''); const type = GoDefaultTypeMapping.Integer({ constrainedModel: model, ...defaultOptions @@ -78,7 +79,7 @@ describe('GoConstrainer', () => { }); describe('String', () => { test('should render type', () => { - const model = new ConstrainedStringModel('test', undefined, ''); + const model = new ConstrainedStringModel('test', undefined, {}, ''); const type = GoDefaultTypeMapping.String({ constrainedModel: model, ...defaultOptions @@ -88,7 +89,7 @@ describe('GoConstrainer', () => { }); describe('Boolean', () => { test('should render type', () => { - const model = new ConstrainedBooleanModel('test', undefined, ''); + const model = new ConstrainedBooleanModel('test', undefined, {}, ''); const type = GoDefaultTypeMapping.Boolean({ constrainedModel: model, ...defaultOptions @@ -99,7 +100,7 @@ describe('GoConstrainer', () => { describe('Tuple', () => { test('should render type', () => { - const model = new ConstrainedTupleModel('test', undefined, '', []); + const model = new ConstrainedTupleModel('test', undefined, {}, '', []); const type = GoDefaultTypeMapping.Tuple({ constrainedModel: model, ...defaultOptions @@ -113,11 +114,13 @@ describe('GoConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'string' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -131,7 +134,7 @@ describe('GoConstrainer', () => { describe('Enum', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedEnumModel('test', undefined, '', []); + const model = new ConstrainedEnumModel('test', undefined, {}, '', []); const type = GoDefaultTypeMapping.Enum({ constrainedModel: model, ...defaultOptions @@ -142,7 +145,7 @@ describe('GoConstrainer', () => { describe('Union', () => { test('should render type', () => { - const model = new ConstrainedUnionModel('test', undefined, '', []); + const model = new ConstrainedUnionModel('test', undefined, {}, '', []); const type = GoDefaultTypeMapping.Union({ constrainedModel: model, ...defaultOptions @@ -153,15 +156,22 @@ describe('GoConstrainer', () => { describe('Dictionary', () => { test('should render type', () => { - const keyModel = new ConstrainedStringModel('test', undefined, 'string'); + const keyModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'string' + ); const valueModel = new ConstrainedStringModel( 'test', undefined, + {}, 'string' ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel diff --git a/test/generators/go/__snapshots__/GoGenerator.spec.ts.snap b/test/generators/go/__snapshots__/GoGenerator.spec.ts.snap index 636dbec177..71cdd2436c 100644 --- a/test/generators/go/__snapshots__/GoGenerator.spec.ts.snap +++ b/test/generators/go/__snapshots__/GoGenerator.spec.ts.snap @@ -103,7 +103,7 @@ type Address struct { Marriage bool Members interface{} TupleType []interface{} - ArrayType []interface{} + ArrayType []string AdditionalProperties map[string]interface{} }" `; diff --git a/test/generators/go/constrainer/EnumConstrainer.spec.ts b/test/generators/go/constrainer/EnumConstrainer.spec.ts index c6d7a8e68d..332856cf13 100644 --- a/test/generators/go/constrainer/EnumConstrainer.spec.ts +++ b/test/generators/go/constrainer/EnumConstrainer.spec.ts @@ -10,10 +10,11 @@ import { DefaultEnumKeyConstraints } from '../../../../src/generators/go/constrainer/EnumConstrainer'; describe('EnumConstrainer', () => { - const enumModel = new EnumModel('test', undefined, []); + const enumModel = new EnumModel('test', undefined, {}, []); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [] ); @@ -37,12 +38,14 @@ describe('EnumConstrainer', () => { }); test('should not contain duplicate keys', () => { const existingConstrainedEnumValueModel = new ConstrainedEnumValueModel( + 'TestEmpty', 'TestEmpty', 'TestEmpty' ); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [existingConstrainedEnumValueModel] ); diff --git a/test/generators/go/constrainer/PropertyKeyConstrainer.spec.ts b/test/generators/go/constrainer/PropertyKeyConstrainer.spec.ts index d518e456da..195587071c 100644 --- a/test/generators/go/constrainer/PropertyKeyConstrainer.spec.ts +++ b/test/generators/go/constrainer/PropertyKeyConstrainer.spec.ts @@ -11,10 +11,11 @@ import { PropertyKeyConstraintOptions } from '../../../../src/generators/go/constrainer/PropertyKeyConstrainer'; describe('PropertyKeyConstrainer', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); @@ -56,10 +57,11 @@ describe('PropertyKeyConstrainer', () => { expect(constrainedKey).toEqual('SomeWeirdValueExclamationQuotationHash_2'); }); test('should not contain duplicate properties', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); diff --git a/test/generators/java/JavaConstrainer.spec.ts b/test/generators/java/JavaConstrainer.spec.ts index 84f07ab29d..033d5fffb2 100644 --- a/test/generators/java/JavaConstrainer.spec.ts +++ b/test/generators/java/JavaConstrainer.spec.ts @@ -9,6 +9,7 @@ import { ConstrainedFloatModel, ConstrainedIntegerModel, ConstrainedObjectModel, + ConstrainedObjectPropertyModel, ConstrainedReferenceModel, ConstrainedStringModel, ConstrainedTupleModel, @@ -24,7 +25,7 @@ describe('JavaConstrainer', () => { }; describe('ObjectModel', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedObjectModel('test', undefined, '', {}); + const model = new ConstrainedObjectModel('test', undefined, {}, '', {}); const type = JavaDefaultTypeMapping.Object({ constrainedModel: model, ...defaultOptions @@ -34,10 +35,11 @@ describe('JavaConstrainer', () => { }); describe('Reference', () => { test('should render the constrained name as type', () => { - const refModel = new ConstrainedAnyModel('test', undefined, ''); + const refModel = new ConstrainedAnyModel('test', undefined, {}, ''); const model = new ConstrainedReferenceModel( 'test', undefined, + {}, '', refModel ); @@ -47,10 +49,57 @@ describe('JavaConstrainer', () => { }); expect(type).toEqual(model.name); }); + test('should render the constrained name as type for unions with ConstrainedObjectModel types', () => { + const unionType = new ConstrainedObjectModel( + 'union-type-name', + undefined, + {}, + 'UnionType', + {} + ); + const union = new ConstrainedUnionModel('Union', undefined, {}, '', [ + unionType + ]); + const model = new ConstrainedReferenceModel( + 'test', + undefined, + {}, + '', + union + ); + const type = JavaDefaultTypeMapping.Reference({ + constrainedModel: model, + ...defaultOptions + }); + expect(type).toEqual(model.name); + }); + }); + test('should render Object for unions with built-in types', () => { + const unionType = new ConstrainedAnyModel( + 'String', + undefined, + {}, + 'String' + ); + const union = new ConstrainedUnionModel('Union', undefined, {}, '', [ + unionType + ]); + const model = new ConstrainedReferenceModel( + 'test', + undefined, + {}, + '', + union + ); + const type = JavaDefaultTypeMapping.Reference({ + constrainedModel: model, + ...defaultOptions + }); + expect(type).toEqual('Object'); }); describe('Any', () => { test('should render type', () => { - const model = new ConstrainedAnyModel('test', undefined, ''); + const model = new ConstrainedAnyModel('test', undefined, {}, ''); const type = JavaDefaultTypeMapping.Any({ constrainedModel: model, ...defaultOptions @@ -60,71 +109,166 @@ describe('JavaConstrainer', () => { }); describe('Float', () => { test('should render type', () => { - const model = new ConstrainedFloatModel('test', undefined, ''); + const model = new ConstrainedFloatModel('test', undefined, {}, ''); const type = JavaDefaultTypeMapping.Float({ constrainedModel: model, + partOfProperty: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + model + ), + ...defaultOptions + }); + expect(type).toEqual('double'); + }); + test('should render optional type', () => { + const model = new ConstrainedFloatModel('test', undefined, {}, ''); + const type = JavaDefaultTypeMapping.Float({ + constrainedModel: model, + partOfProperty: new ConstrainedObjectPropertyModel( + 'test', + 'test', + false, + model + ), ...defaultOptions }); expect(type).toEqual('Double'); }); - test('should render double when original input has number format', () => { - const model = new ConstrainedFloatModel('test', { format: 'float' }, ''); + test('should render nullable type', () => { + const model = new ConstrainedFloatModel( + 'test', + undefined, + { isNullable: true }, + '' + ); const type = JavaDefaultTypeMapping.Float({ constrainedModel: model, ...defaultOptions }); + expect(type).toEqual('Double'); + }); + test('should render double when format has number format', () => { + const model = new ConstrainedFloatModel( + 'test', + {}, + { format: 'float' }, + '' + ); + const type = JavaDefaultTypeMapping.Float({ + constrainedModel: model, + partOfProperty: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + model + ), + ...defaultOptions + }); expect(type).toEqual('float'); }); }); describe('Integer', () => { test('should render type', () => { - const model = new ConstrainedIntegerModel('test', undefined, ''); + const model = new ConstrainedIntegerModel('test', undefined, {}, ''); + const type = JavaDefaultTypeMapping.Integer({ + constrainedModel: model, + partOfProperty: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + model + ), + ...defaultOptions + }); + expect(type).toEqual('int'); + }); + test('should render nullable type', () => { + const model = new ConstrainedIntegerModel( + 'test', + undefined, + { isNullable: true }, + '' + ); const type = JavaDefaultTypeMapping.Integer({ constrainedModel: model, ...defaultOptions }); expect(type).toEqual('Integer'); }); - test('should render int when original input has integer format', () => { + test('should render int when format has integer format', () => { const model = new ConstrainedIntegerModel( 'test', + {}, { format: 'integer' }, '' ); const type = JavaDefaultTypeMapping.Integer({ constrainedModel: model, + partOfProperty: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + model + ), ...defaultOptions }); expect(type).toEqual('int'); }); - test('should render int when original input has int32 format', () => { + test('should render int when format has int32 format', () => { const model = new ConstrainedIntegerModel( 'test', + {}, { format: 'int32' }, '' ); const type = JavaDefaultTypeMapping.Integer({ constrainedModel: model, + partOfProperty: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + model + ), ...defaultOptions }); expect(type).toEqual('int'); }); - test('should render long when original input has long format', () => { - const model = new ConstrainedIntegerModel('test', { format: 'long' }, ''); + test('should render long when format has long format', () => { + const model = new ConstrainedIntegerModel( + 'test', + {}, + { format: 'long' }, + '' + ); const type = JavaDefaultTypeMapping.Integer({ constrainedModel: model, + partOfProperty: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + model + ), ...defaultOptions }); expect(type).toEqual('long'); }); - test('should render long when original input has int64 format', () => { + test('should render long when format has int64 format', () => { const model = new ConstrainedIntegerModel( 'test', + {}, { format: 'int64' }, '' ); const type = JavaDefaultTypeMapping.Integer({ constrainedModel: model, + partOfProperty: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + model + ), ...defaultOptions }); expect(type).toEqual('long'); @@ -132,32 +276,43 @@ describe('JavaConstrainer', () => { }); describe('String', () => { test('should render type', () => { - const model = new ConstrainedStringModel('test', undefined, ''); + const model = new ConstrainedStringModel('test', undefined, {}, ''); const type = JavaDefaultTypeMapping.String({ constrainedModel: model, ...defaultOptions }); expect(type).toEqual('String'); }); - test('should render LocalDate when original input has date format', () => { - const model = new ConstrainedStringModel('test', { format: 'date' }, ''); + test('should render LocalDate when format has date format', () => { + const model = new ConstrainedStringModel( + 'test', + {}, + { format: 'date' }, + '' + ); const type = JavaDefaultTypeMapping.String({ constrainedModel: model, ...defaultOptions }); expect(type).toEqual('java.time.LocalDate'); }); - test('should render OffsetTime when original input has time format', () => { - const model = new ConstrainedStringModel('test', { format: 'time' }, ''); + test('should render OffsetTime when format has time format', () => { + const model = new ConstrainedStringModel( + 'test', + {}, + { format: 'time' }, + '' + ); const type = JavaDefaultTypeMapping.String({ constrainedModel: model, ...defaultOptions }); expect(type).toEqual('java.time.OffsetTime'); }); - test('should render OffsetDateTime when original input has dateTime format', () => { + test('should render OffsetDateTime when format has dateTime format', () => { const model = new ConstrainedStringModel( 'test', + {}, { format: 'dateTime' }, '' ); @@ -167,9 +322,10 @@ describe('JavaConstrainer', () => { }); expect(type).toEqual('java.time.OffsetDateTime'); }); - test('should render OffsetDateTime when original input has date-time format', () => { + test('should render OffsetDateTime when format has date-time format', () => { const model = new ConstrainedStringModel( 'test', + {}, { format: 'date-time' }, '' ); @@ -179,9 +335,10 @@ describe('JavaConstrainer', () => { }); expect(type).toEqual('java.time.OffsetDateTime'); }); - test('should render byte when original input has binary format', () => { + test('should render byte when format has binary format', () => { const model = new ConstrainedStringModel( 'test', + {}, { format: 'binary' }, '' ); @@ -194,7 +351,26 @@ describe('JavaConstrainer', () => { }); describe('Boolean', () => { test('should render type', () => { - const model = new ConstrainedBooleanModel('test', undefined, ''); + const model = new ConstrainedBooleanModel('test', undefined, {}, ''); + const type = JavaDefaultTypeMapping.Boolean({ + constrainedModel: model, + partOfProperty: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + model + ), + ...defaultOptions + }); + expect(type).toEqual('boolean'); + }); + test('should render nullable type', () => { + const model = new ConstrainedBooleanModel( + 'test', + undefined, + { isNullable: true }, + '' + ); const type = JavaDefaultTypeMapping.Boolean({ constrainedModel: model, ...defaultOptions @@ -205,7 +381,7 @@ describe('JavaConstrainer', () => { describe('Tuple', () => { test('should render type', () => { - const model = new ConstrainedTupleModel('test', undefined, '', []); + const model = new ConstrainedTupleModel('test', undefined, {}, '', []); const type = JavaDefaultTypeMapping.Tuple({ constrainedModel: model, ...defaultOptions @@ -213,7 +389,7 @@ describe('JavaConstrainer', () => { expect(type).toEqual('Object[]'); }); test('should render tuple as list', () => { - const model = new ConstrainedTupleModel('test', undefined, '', []); + const model = new ConstrainedTupleModel('test', undefined, {}, '', []); const options: JavaOptions = { ...JavaGenerator.defaultOptions, collectionType: 'List' @@ -232,11 +408,13 @@ describe('JavaConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -255,11 +433,13 @@ describe('JavaConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -278,8 +458,12 @@ describe('JavaConstrainer', () => { describe('Enum', () => { test('should render string enum values as String type', () => { - const enumValue = new ConstrainedEnumValueModel('test', 'string type'); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue = new ConstrainedEnumValueModel( + 'test', + 'string type', + {} + ); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue ]); const type = JavaDefaultTypeMapping.Enum({ @@ -289,8 +473,8 @@ describe('JavaConstrainer', () => { expect(type).toEqual('String'); }); test('should render boolean enum values as boolean type', () => { - const enumValue = new ConstrainedEnumValueModel('test', true); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue = new ConstrainedEnumValueModel('test', true, {}); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue ]); const type = JavaDefaultTypeMapping.Enum({ @@ -299,9 +483,9 @@ describe('JavaConstrainer', () => { }); expect(type).toEqual('boolean'); }); - test('should render generic number enum value with format ', () => { - const enumValue = new ConstrainedEnumValueModel('test', 123); - const model = new ConstrainedEnumModel('test', undefined, '', [ + test('should render generic number enum value with format', () => { + const enumValue = new ConstrainedEnumValueModel('test', 123, {}); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue ]); const type = JavaDefaultTypeMapping.Enum({ @@ -311,10 +495,14 @@ describe('JavaConstrainer', () => { expect(type).toEqual('int'); }); test('should render generic number enum value with float format as float type', () => { - const enumValue = new ConstrainedEnumValueModel('test', 12.0); - const model = new ConstrainedEnumModel('test', { format: 'float' }, '', [ - enumValue - ]); + const enumValue = new ConstrainedEnumValueModel('test', 12.0, {}); + const model = new ConstrainedEnumModel( + 'test', + {}, + { format: 'float' }, + '', + [enumValue] + ); const type = JavaDefaultTypeMapping.Enum({ constrainedModel: model, ...defaultOptions @@ -322,10 +510,14 @@ describe('JavaConstrainer', () => { expect(type).toEqual('float'); }); test('should render generic number enum value with double format as double type', () => { - const enumValue = new ConstrainedEnumValueModel('test', 12.0); - const model = new ConstrainedEnumModel('test', { format: 'double' }, '', [ - enumValue - ]); + const enumValue = new ConstrainedEnumValueModel('test', 12.0, {}); + const model = new ConstrainedEnumModel( + 'test', + {}, + { format: 'double' }, + '', + [enumValue] + ); const type = JavaDefaultTypeMapping.Enum({ constrainedModel: model, ...defaultOptions @@ -333,8 +525,8 @@ describe('JavaConstrainer', () => { expect(type).toEqual('double'); }); test('should render object enum value as generic Object', () => { - const enumValue = new ConstrainedEnumValueModel('test', {}); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue = new ConstrainedEnumValueModel('test', {}, {}); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue ]); const type = JavaDefaultTypeMapping.Enum({ @@ -344,9 +536,13 @@ describe('JavaConstrainer', () => { expect(type).toEqual('Object'); }); test('should render multiple value types as generic Object', () => { - const enumValue2 = new ConstrainedEnumValueModel('test', true); - const enumValue1 = new ConstrainedEnumValueModel('test', 'string type'); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue2 = new ConstrainedEnumValueModel('test', true, {}); + const enumValue1 = new ConstrainedEnumValueModel( + 'test', + 'string type', + {} + ); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue1, enumValue2 ]); @@ -357,9 +553,9 @@ describe('JavaConstrainer', () => { expect(type).toEqual('Object'); }); test('should render double and integer as double type', () => { - const enumValue2 = new ConstrainedEnumValueModel('test', 123); - const enumValue1 = new ConstrainedEnumValueModel('test', 123.12); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue2 = new ConstrainedEnumValueModel('test', 123, {}); + const enumValue1 = new ConstrainedEnumValueModel('test', 123.12, {}); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue1, enumValue2 ]); @@ -370,12 +566,15 @@ describe('JavaConstrainer', () => { expect(type).toEqual('double'); }); test('should render int and long as long type', () => { - const enumValue2 = new ConstrainedEnumValueModel('test', 123); - const enumValue1 = new ConstrainedEnumValueModel('test', 123); - const model = new ConstrainedEnumModel('test', { format: 'long' }, '', [ - enumValue1, - enumValue2 - ]); + const enumValue2 = new ConstrainedEnumValueModel('test', 123, {}); + const enumValue1 = new ConstrainedEnumValueModel('test', 123, {}); + const model = new ConstrainedEnumModel( + 'test', + {}, + { format: 'long' }, + '', + [enumValue1, enumValue2] + ); const type = JavaDefaultTypeMapping.Enum({ constrainedModel: model, ...defaultOptions @@ -385,8 +584,52 @@ describe('JavaConstrainer', () => { }); describe('Union', () => { - test('should render type', () => { - const model = new ConstrainedUnionModel('test', undefined, '', []); + test('should render the constrained name for ConstrainedObjectModel type unions', () => { + const union = new ConstrainedObjectModel( + 'test-union', + undefined, + {}, + 'UnionType', + {} + ); + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ + union + ]); + const type = JavaDefaultTypeMapping.Union({ + constrainedModel: model, + ...defaultOptions + }); + expect(type).toEqual('test'); + }); + test('should render the constrained name for referenced ConstrainedObjectModel type unions', () => { + const union = new ConstrainedObjectModel( + 'test-union', + undefined, + {}, + 'UnionType', + {} + ); + const unionRef = new ConstrainedReferenceModel( + 'test-union-ref', + undefined, + {}, + 'UnionRefType', + union + ); + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ + unionRef + ]); + const type = JavaDefaultTypeMapping.Union({ + constrainedModel: model, + ...defaultOptions + }); + expect(type).toEqual('test'); + }); + test('should render Object for non ConstrainedObjectModel type unions', () => { + const union = new ConstrainedAnyModel('test-union', undefined, {}, 'int'); + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ + union + ]); const type = JavaDefaultTypeMapping.Union({ constrainedModel: model, ...defaultOptions @@ -397,15 +640,22 @@ describe('JavaConstrainer', () => { describe('Dictionary', () => { test('should render type', () => { - const keyModel = new ConstrainedStringModel('test', undefined, 'String'); + const keyModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'String' + ); const valueModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel @@ -417,11 +667,22 @@ describe('JavaConstrainer', () => { expect(type).toEqual('Map'); }); test('should not render simple integer type', () => { - const keyModel = new ConstrainedStringModel('test', undefined, 'String'); - const valueModel = new ConstrainedIntegerModel('test', undefined, 'int'); + const keyModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'String' + ); + const valueModel = new ConstrainedIntegerModel( + 'test', + undefined, + {}, + 'int' + ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel diff --git a/test/generators/java/JavaDependencyManager.spec.ts b/test/generators/java/JavaDependencyManager.spec.ts new file mode 100644 index 0000000000..65183e47f7 --- /dev/null +++ b/test/generators/java/JavaDependencyManager.spec.ts @@ -0,0 +1,18 @@ +import { ConstrainedStringModel, JavaOptions } from '../../../src'; +import { JavaDependencyManager } from '../../../src/generators/java/JavaDependencyManager'; + +describe('JavaDependencyManager', () => { + test('renderAllModelDependencies should render models added with addModelDependency', () => { + const dependencyManager = new JavaDependencyManager({} as JavaOptions, []); + dependencyManager.addModelDependency( + new ConstrainedStringModel('testString', undefined, {}, 'String') + ); + + expect( + dependencyManager.renderAllModelDependencies( + new ConstrainedStringModel('', undefined, {}, 'String'), + 'testPackage' + ) + ).toMatchInlineSnapshot(`"import testPackage.testString;"`); + }); +}); diff --git a/test/generators/java/JavaGenerator.spec.ts b/test/generators/java/JavaGenerator.spec.ts index 8e44c82ecb..78ec573505 100644 --- a/test/generators/java/JavaGenerator.spec.ts +++ b/test/generators/java/JavaGenerator.spec.ts @@ -1,4 +1,10 @@ -import { JavaGenerator } from '../../../src/generators'; +import { + JavaGenerator, + JAVA_COMMON_PRESET, + JAVA_CONSTRAINTS_PRESET, + JAVA_DESCRIPTION_PRESET, + JAVA_JACKSON_PRESET +} from '../../../src/generators'; describe('JavaGenerator', () => { let generator: JavaGenerator; @@ -54,9 +60,9 @@ describe('JavaGenerator', () => { }; const expectedDependencies = ['import java.util.Map;']; const models = await generator.generate(doc); - expect(models).toHaveLength(1); - expect(models[0].result).toMatchSnapshot(); - expect(models[0].dependencies).toEqual(expectedDependencies); + expect(models).toHaveLength(4); + expect(models.map((model) => model.result)).toMatchSnapshot(); + expect(models[3].dependencies).toEqual(expectedDependencies); }); test('should work custom preset for `class` type', async () => { @@ -235,9 +241,8 @@ describe('JavaGenerator', () => { }; const config = { packageName: 'test.packageName' }; const models = await generator.generateCompleteModels(doc, config); - expect(models).toHaveLength(2); - expect(models[0].result).toMatchSnapshot(); - expect(models[1].result).toMatchSnapshot(); + expect(models).toHaveLength(5); + expect(models.map((model) => model.result)).toMatchSnapshot(); }); test('should throw error when reserved keyword is used in any part of the package name', async () => { const doc = { @@ -275,4 +280,540 @@ describe('JavaGenerator', () => { expectedError ); }); + + describe('oneOf/discriminator', () => { + test('should create an interface', async () => { + const asyncapiDoc = { + asyncapi: '2.6.0', + info: { + title: 'Vehicle example', + version: '1.0.0' + }, + channels: {}, + components: { + messages: { + Vehicle: { + payload: { + title: 'Vehicle', + type: 'object', + discriminator: 'vehicleType', + properties: { + vehicleType: { + title: 'VehicleType', + type: 'string' + } + }, + required: ['vehicleType'], + oneOf: [ + { + $ref: '#/components/schemas/Car' + }, + { + $ref: '#/components/schemas/Truck' + } + ] + } + } + }, + schemas: { + Car: { + type: 'object', + properties: { + vehicleType: { + const: 'Car' + } + } + }, + + Truck: { + type: 'object', + properties: { + vehicleType: { + const: 'Truck' + } + } + } + } + } + }; + + const models = await generator.generate(asyncapiDoc); + expect(models.map((model) => model.result)).toMatchSnapshot(); + }); + + describe('with jackson preset', () => { + beforeEach(() => { + generator = new JavaGenerator({ + presets: [ + JAVA_COMMON_PRESET, + JAVA_JACKSON_PRESET, + JAVA_DESCRIPTION_PRESET, + JAVA_CONSTRAINTS_PRESET + ], + collectionType: 'List' + }); + }); + + test('handle allOf with const in CloudEvent type', async () => { + const asyncapiDoc = { + asyncapi: '2.5.0', + info: { + title: 'CloudEvent example', + version: '1.0.0' + }, + channels: { + pet: { + publish: { + message: { + oneOf: [ + { + $ref: '#/components/messages/Dog' + }, + { + $ref: '#/components/messages/Cat' + } + ] + } + } + } + }, + components: { + messages: { + Dog: { + payload: { + title: 'Dog', + allOf: [ + { + $ref: '#/components/schemas/CloudEvent' + }, + { + $ref: '#/components/schemas/Dog' + } + ] + } + }, + Cat: { + payload: { + title: 'Cat', + allOf: [ + { + $ref: '#/components/schemas/CloudEvent' + }, + { + $ref: '#/components/schemas/Cat' + } + ] + } + } + }, + schemas: { + CloudEvent: { + title: 'CloudEvent', + type: 'object', + discriminator: 'type', + properties: { + id: { + type: 'string' + }, + source: { + type: 'string', + format: 'uri-reference' + }, + specversion: { + type: 'string', + const: '1.0' + }, + type: { + title: 'CloudEventType', + type: 'string' + }, + dataschema: { + type: 'string', + format: 'uri' + }, + time: { + type: 'string', + format: 'date-time' + } + }, + required: ['id', 'source', 'specversion', 'type'] + }, + Dog: { + type: 'object', + properties: { + type: { + const: 'Dog' + } + } + }, + Cat: { + type: 'object', + properties: { + type: { + const: 'Cat' + } + } + } + } + } + }; + + const models = await generator.generate(asyncapiDoc); + expect(models.map((model) => model.result)).toMatchSnapshot(); + + const dog = models.find((model) => model.modelName === 'Dog'); + expect(dog).not.toBeUndefined(); + expect(dog?.result).toContain( + 'private final CloudEventType type = CloudEventType.DOG;' + ); + + const cat = models.find((model) => model.modelName === 'Cat'); + expect(cat).not.toBeUndefined(); + expect(cat?.result).toContain( + 'private final CloudEventType type = CloudEventType.CAT;' + ); + + const cloudEventType = models.find( + (model) => model.modelName === 'CloudEventType' + ); + expect(cloudEventType).not.toBeUndefined(); + expect(cloudEventType?.result).toContain('DOG'); + expect(cloudEventType?.result).toContain('CAT'); + }); + + test('handle setting title with const', async () => { + const asyncapiDoc = { + asyncapi: '2.5.0', + info: { + title: 'CloudEvent example', + version: '1.0.0' + }, + channels: { + pet: { + publish: { + message: { + oneOf: [ + { + $ref: '#/components/messages/Dog' + }, + { + $ref: '#/components/messages/Cat' + } + ] + } + } + } + }, + components: { + messages: { + Dog: { + payload: { + title: 'Dog', + allOf: [ + { + $ref: '#/components/schemas/CloudEvent' + }, + { + $ref: '#/components/schemas/Dog' + } + ] + } + }, + Cat: { + payload: { + title: 'Cat', + allOf: [ + { + $ref: '#/components/schemas/CloudEvent' + }, + { + $ref: '#/components/schemas/Cat' + } + ] + } + } + }, + schemas: { + CloudEvent: { + title: 'CloudEvent', + type: 'object', + discriminator: 'type', + properties: { + type: { + type: 'string' + } + }, + required: ['type'] + }, + Dog: { + type: 'object', + properties: { + type: { + title: 'DogType', + const: 'Dog' + } + } + }, + Cat: { + type: 'object', + properties: { + type: { + title: 'CatType', + const: 'Cat' + } + } + } + } + } + }; + + const models = await generator.generate(asyncapiDoc); + expect(models.map((model) => model.result)).toMatchSnapshot(); + + const dog = models.find((model) => model.modelName === 'Dog'); + expect(dog).not.toBeUndefined(); + expect(dog?.result).toContain( + 'private final DogType type = DogType.DOG;' + ); + + const cat = models.find((model) => model.modelName === 'Cat'); + expect(cat).not.toBeUndefined(); + expect(cat?.result).toContain( + 'private final CatType type = CatType.CAT;' + ); + + const dogType = models.find((model) => model.modelName === 'DogType'); + expect(dogType).not.toBeUndefined(); + expect(dogType?.result).toContain('DOG'); + + const catType = models.find((model) => model.modelName === 'CatType'); + expect(catType).not.toBeUndefined(); + expect(catType?.result).toContain('CAT'); + }); + + test('handle one const with discriminator', async () => { + const asyncapiDoc = { + asyncapi: '2.6.0', + info: { + title: 'CloudEvent2 example', + version: '1.0.0' + }, + channels: { + pet: { + publish: { + message: { + $ref: '#/components/messages/Dog' + } + } + } + }, + components: { + messages: { + Dog: { + payload: { + title: 'Dog', + allOf: [ + { + $ref: '#/components/schemas/CloudEvent' + }, + { + $ref: '#/components/schemas/Dog' + } + ] + } + } + }, + schemas: { + CloudEvent: { + title: 'CloudEvent', + type: 'object', + discriminator: 'type', + properties: { + id: { + type: 'string' + }, + type: { + title: 'CloudEventType', + type: 'string' + } + }, + required: ['id', 'type'] + }, + Dog: { + type: 'object', + properties: { + type: { + const: 'Dog' + } + } + } + } + } + }; + + const models = await generator.generate(asyncapiDoc); + expect(models.map((model) => model.result)).toMatchSnapshot(); + + const dog = models.find((model) => model.modelName === 'Dog'); + expect(dog).not.toBeUndefined(); + expect(dog?.result).toContain( + 'private final CloudEventType type = CloudEventType.DOG;' + ); + + const cloudEventType = models.find( + (model) => model.modelName === 'CloudEventType' + ); + expect(cloudEventType).not.toBeUndefined(); + expect(cloudEventType?.result).toContain('DOG'); + }); + test('should create an interface for child models', async () => { + const asyncapiDoc = { + asyncapi: '2.6.0', + info: { + title: 'Vehicle example', + version: '1.0.0' + }, + channels: {}, + components: { + messages: { + Vehicle: { + payload: { + title: 'Cargo', + type: 'object', + properties: { + vehicle: { + $ref: '#/components/schemas/Vehicle' + } + } + } + } + }, + schemas: { + Vehicle: { + title: 'Vehicle', + type: 'object', + discriminator: 'vehicleType', + properties: { + vehicleType: { + title: 'VehicleType', + type: 'string' + } + }, + required: ['vehicleType'], + oneOf: [ + { + $ref: '#/components/schemas/Car' + }, + { + $ref: '#/components/schemas/Truck' + } + ] + }, + Car: { + type: 'object', + properties: { + vehicleType: { + const: 'Car' + } + } + }, + + Truck: { + type: 'object', + properties: { + vehicleType: { + const: 'Truck' + } + } + } + } + } + }; + + const models = await generator.generate(asyncapiDoc); + expect(models.map((model) => model.result)).toMatchSnapshot(); + }); + + test('date-time format should render java.time.OffsetDateTime', async () => { + const asyncapiDoc = { + asyncapi: '2.6.0', + info: { + title: 'Event API', + version: 'v1' + }, + channels: { + events: { + subscribe: { + message: { + $ref: '#/components/messages/Event' + } + } + } + }, + components: { + messages: { + Event: { + title: 'Event', + payload: { + title: 'Event', + type: 'object', + properties: { + action: { + title: 'Action', + type: 'string', + enum: ['ADD', 'UPDATE', 'DELETE'] + } + }, + required: ['action'], + allOf: [ + { + if: { + properties: { + action: { + const: 'ADD' + } + }, + required: ['action'] + }, + then: { + $ref: '#/components/schemas/Event.AddOrUpdate' + } + }, + { + if: { + properties: { + action: { + const: 'UPDATE' + } + }, + required: ['action'] + }, + then: { + $ref: '#/components/schemas/Event.AddOrUpdate' + } + } + ] + } + } + }, + schemas: { + 'Event.AddOrUpdate': { + type: 'object', + properties: { + event_time: { + type: 'string', + format: 'date-time' + } + }, + required: ['event_time'] + } + } + } + }; + + const models = await generator.generate(asyncapiDoc); + expect(models.map((model) => model.result)).toMatchSnapshot(); + }); + }); + }); }); diff --git a/test/generators/java/JavaRenderer.spec.ts b/test/generators/java/JavaRenderer.spec.ts index 42fe75765d..edbf22c03e 100644 --- a/test/generators/java/JavaRenderer.spec.ts +++ b/test/generators/java/JavaRenderer.spec.ts @@ -36,4 +36,16 @@ describe('JavaRenderer', () => { ).toEqual('@SomeComment(test=test2)'); }); }); + + describe('renderStringLiteral()', () => { + test('Should be able to render string literal with special characters', () => { + expect( + renderer.renderStringLiteral( + 'this is a "literal" string with \'special\' characters: \\a\n\t\\b' + ) + ).toEqual( + '"this is a \\"literal\\" string with \'special\' characters: \\\\a\\n\\t\\\\b"' + ); + }); + }); }); diff --git a/test/generators/java/__snapshots__/JavaGenerator.spec.ts.snap b/test/generators/java/__snapshots__/JavaGenerator.spec.ts.snap index 931979b5f8..268963de78 100644 --- a/test/generators/java/__snapshots__/JavaGenerator.spec.ts.snap +++ b/test/generators/java/__snapshots__/JavaGenerator.spec.ts.snap @@ -1,5 +1,839 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`JavaGenerator oneOf/discriminator should create an interface 1`] = ` +Array [ + "/** + * Vehicle represents a union of types: Car, Truck + */ +public interface Vehicle { + VehicleType getVehicleType(); +}", + "public class Car implements Vehicle { + private final VehicleType vehicleType = VehicleType.CAR; + private Map additionalProperties; + + public VehicleType getVehicleType() { return this.vehicleType; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } +}", + "public enum VehicleType { + CAR((String)\\"Car\\"), TRUCK((String)\\"Truck\\"); + + private String value; + + VehicleType(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public static VehicleType fromValue(String value) { + for (VehicleType e : VehicleType.values()) { + if (e.value.equals(value)) { + return e; + } + } + throw new IllegalArgumentException(\\"Unexpected value '\\" + value + \\"'\\"); + } + + @Override + public String toString() { + return String.valueOf(value); + } +}", + "public class Truck implements Vehicle { + private final VehicleType vehicleType = VehicleType.TRUCK; + private Map additionalProperties; + + public VehicleType getVehicleType() { return this.vehicleType; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } +}", +] +`; + +exports[`JavaGenerator oneOf/discriminator with jackson preset date-time format should render java.time.OffsetDateTime 1`] = ` +Array [ + "public class Event { + @NotNull + @JsonProperty(\\"action\\") + private Action action; + @JsonProperty(\\"event_time\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private java.time.OffsetDateTime eventTime; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public Action getAction() { return this.action; } + public void setAction(Action action) { this.action = action; } + + public java.time.OffsetDateTime getEventTime() { return this.eventTime; } + public void setEventTime(java.time.OffsetDateTime eventTime) { this.eventTime = eventTime; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Event self = (Event) o; + return + Objects.equals(this.action, self.action) && + Objects.equals(this.eventTime, self.eventTime) && + Objects.equals(this.additionalProperties, self.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash((Object)action, (Object)eventTime, (Object)additionalProperties); + } + + @Override + public String toString() { + return \\"class Event {\\\\n\\" + + \\" action: \\" + toIndentedString(action) + \\"\\\\n\\" + + \\" eventTime: \\" + toIndentedString(eventTime) + \\"\\\\n\\" + + \\" additionalProperties: \\" + toIndentedString(additionalProperties) + \\"\\\\n\\" + + \\"}\\"; + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return \\"null\\"; + } + return o.toString().replace(\\"\\\\n\\", \\"\\\\n \\"); + } +}", + "public enum Action { + ADD((String)\\"ADD\\"), UPDATE((String)\\"UPDATE\\"), DELETE((String)\\"DELETE\\"); + + private String value; + + Action(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @JsonCreator + public static Action fromValue(String value) { + for (Action e : Action.values()) { + if (e.value.equals(value)) { + return e; + } + } + throw new IllegalArgumentException(\\"Unexpected value '\\" + value + \\"'\\"); + } + + @Override + public String toString() { + return String.valueOf(value); + } +}", +] +`; + +exports[`JavaGenerator oneOf/discriminator with jackson preset handle allOf with const in CloudEvent type 1`] = ` +Array [ + "@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.EXISTING_PROPERTY, property=\\"type\\", visible=true) +@JsonSubTypes({ + @JsonSubTypes.Type(value = Dog.class, name = \\"Dog\\"), + @JsonSubTypes.Type(value = Cat.class, name = \\"Cat\\") +}) +/** + * Pet represents a union of types: Dog, Cat + */ +public interface Pet { + CloudEventType getType(); +}", + "public class Dog implements Pet { + @NotNull + @JsonProperty(\\"id\\") + private String id; + @NotNull + @JsonProperty(\\"source\\") + private String source; + @NotNull + @JsonProperty(\\"specversion\\") + private final String specversion = \\"1.0\\"; + @NotNull + @JsonProperty(\\"type\\") + private final CloudEventType type = CloudEventType.DOG; + @JsonProperty(\\"dataschema\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String dataschema; + @JsonProperty(\\"time\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private java.time.OffsetDateTime time; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public String getId() { return this.id; } + public void setId(String id) { this.id = id; } + + public String getSource() { return this.source; } + public void setSource(String source) { this.source = source; } + + public String getSpecversion() { return this.specversion; } + + public CloudEventType getType() { return this.type; } + + public String getDataschema() { return this.dataschema; } + public void setDataschema(String dataschema) { this.dataschema = dataschema; } + + public java.time.OffsetDateTime getTime() { return this.time; } + public void setTime(java.time.OffsetDateTime time) { this.time = time; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Dog self = (Dog) o; + return + Objects.equals(this.id, self.id) && + Objects.equals(this.source, self.source) && + Objects.equals(this.specversion, self.specversion) && + Objects.equals(this.type, self.type) && + Objects.equals(this.dataschema, self.dataschema) && + Objects.equals(this.time, self.time) && + Objects.equals(this.additionalProperties, self.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash((Object)id, (Object)source, (Object)specversion, (Object)type, (Object)dataschema, (Object)time, (Object)additionalProperties); + } + + @Override + public String toString() { + return \\"class Dog {\\\\n\\" + + \\" id: \\" + toIndentedString(id) + \\"\\\\n\\" + + \\" source: \\" + toIndentedString(source) + \\"\\\\n\\" + + \\" specversion: \\" + toIndentedString(specversion) + \\"\\\\n\\" + + \\" type: \\" + toIndentedString(type) + \\"\\\\n\\" + + \\" dataschema: \\" + toIndentedString(dataschema) + \\"\\\\n\\" + + \\" time: \\" + toIndentedString(time) + \\"\\\\n\\" + + \\" additionalProperties: \\" + toIndentedString(additionalProperties) + \\"\\\\n\\" + + \\"}\\"; + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return \\"null\\"; + } + return o.toString().replace(\\"\\\\n\\", \\"\\\\n \\"); + } +}", + "public enum CloudEventType { + DOG((String)\\"Dog\\"), CAT((String)\\"Cat\\"); + + private String value; + + CloudEventType(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @JsonCreator + public static CloudEventType fromValue(String value) { + for (CloudEventType e : CloudEventType.values()) { + if (e.value.equals(value)) { + return e; + } + } + throw new IllegalArgumentException(\\"Unexpected value '\\" + value + \\"'\\"); + } + + @Override + public String toString() { + return String.valueOf(value); + } +}", + "public class Cat implements Pet { + @NotNull + @JsonProperty(\\"id\\") + private String id; + @NotNull + @JsonProperty(\\"source\\") + private String source; + @NotNull + @JsonProperty(\\"specversion\\") + private final String specversion = \\"1.0\\"; + @NotNull + @JsonProperty(\\"type\\") + private final CloudEventType type = CloudEventType.CAT; + @JsonProperty(\\"dataschema\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String dataschema; + @JsonProperty(\\"time\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private java.time.OffsetDateTime time; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public String getId() { return this.id; } + public void setId(String id) { this.id = id; } + + public String getSource() { return this.source; } + public void setSource(String source) { this.source = source; } + + public String getSpecversion() { return this.specversion; } + + public CloudEventType getType() { return this.type; } + + public String getDataschema() { return this.dataschema; } + public void setDataschema(String dataschema) { this.dataschema = dataschema; } + + public java.time.OffsetDateTime getTime() { return this.time; } + public void setTime(java.time.OffsetDateTime time) { this.time = time; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Cat self = (Cat) o; + return + Objects.equals(this.id, self.id) && + Objects.equals(this.source, self.source) && + Objects.equals(this.specversion, self.specversion) && + Objects.equals(this.type, self.type) && + Objects.equals(this.dataschema, self.dataschema) && + Objects.equals(this.time, self.time) && + Objects.equals(this.additionalProperties, self.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash((Object)id, (Object)source, (Object)specversion, (Object)type, (Object)dataschema, (Object)time, (Object)additionalProperties); + } + + @Override + public String toString() { + return \\"class Cat {\\\\n\\" + + \\" id: \\" + toIndentedString(id) + \\"\\\\n\\" + + \\" source: \\" + toIndentedString(source) + \\"\\\\n\\" + + \\" specversion: \\" + toIndentedString(specversion) + \\"\\\\n\\" + + \\" type: \\" + toIndentedString(type) + \\"\\\\n\\" + + \\" dataschema: \\" + toIndentedString(dataschema) + \\"\\\\n\\" + + \\" time: \\" + toIndentedString(time) + \\"\\\\n\\" + + \\" additionalProperties: \\" + toIndentedString(additionalProperties) + \\"\\\\n\\" + + \\"}\\"; + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return \\"null\\"; + } + return o.toString().replace(\\"\\\\n\\", \\"\\\\n \\"); + } +}", +] +`; + +exports[`JavaGenerator oneOf/discriminator with jackson preset handle one const with discriminator 1`] = ` +Array [ + "public class Dog { + @NotNull + @JsonProperty(\\"id\\") + private String id; + @NotNull + @JsonProperty(\\"type\\") + private final CloudEventType type = CloudEventType.DOG; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public String getId() { return this.id; } + public void setId(String id) { this.id = id; } + + public CloudEventType getType() { return this.type; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Dog self = (Dog) o; + return + Objects.equals(this.id, self.id) && + Objects.equals(this.type, self.type) && + Objects.equals(this.additionalProperties, self.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash((Object)id, (Object)type, (Object)additionalProperties); + } + + @Override + public String toString() { + return \\"class Dog {\\\\n\\" + + \\" id: \\" + toIndentedString(id) + \\"\\\\n\\" + + \\" type: \\" + toIndentedString(type) + \\"\\\\n\\" + + \\" additionalProperties: \\" + toIndentedString(additionalProperties) + \\"\\\\n\\" + + \\"}\\"; + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return \\"null\\"; + } + return o.toString().replace(\\"\\\\n\\", \\"\\\\n \\"); + } +}", + "public enum CloudEventType { + DOG((String)\\"Dog\\"); + + private String value; + + CloudEventType(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @JsonCreator + public static CloudEventType fromValue(String value) { + for (CloudEventType e : CloudEventType.values()) { + if (e.value.equals(value)) { + return e; + } + } + throw new IllegalArgumentException(\\"Unexpected value '\\" + value + \\"'\\"); + } + + @Override + public String toString() { + return String.valueOf(value); + } +}", +] +`; + +exports[`JavaGenerator oneOf/discriminator with jackson preset handle setting title with const 1`] = ` +Array [ + "@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.EXISTING_PROPERTY, property=\\"type\\", visible=true) +@JsonSubTypes({ + @JsonSubTypes.Type(value = Dog.class, name = \\"Dog\\"), + @JsonSubTypes.Type(value = Cat.class, name = \\"Cat\\") +}) +/** + * Pet represents a union of types: Dog, Cat + */ +public interface Pet { + +}", + "public class Dog implements Pet { + @NotNull + @JsonProperty(\\"type\\") + private final DogType type = DogType.DOG; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public DogType getType() { return this.type; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Dog self = (Dog) o; + return + Objects.equals(this.type, self.type) && + Objects.equals(this.additionalProperties, self.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash((Object)type, (Object)additionalProperties); + } + + @Override + public String toString() { + return \\"class Dog {\\\\n\\" + + \\" type: \\" + toIndentedString(type) + \\"\\\\n\\" + + \\" additionalProperties: \\" + toIndentedString(additionalProperties) + \\"\\\\n\\" + + \\"}\\"; + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return \\"null\\"; + } + return o.toString().replace(\\"\\\\n\\", \\"\\\\n \\"); + } +}", + "public enum DogType { + DOG((String)\\"Dog\\"); + + private String value; + + DogType(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @JsonCreator + public static DogType fromValue(String value) { + for (DogType e : DogType.values()) { + if (e.value.equals(value)) { + return e; + } + } + throw new IllegalArgumentException(\\"Unexpected value '\\" + value + \\"'\\"); + } + + @Override + public String toString() { + return String.valueOf(value); + } +}", + "public class Cat implements Pet { + @NotNull + @JsonProperty(\\"type\\") + private final CatType type = CatType.CAT; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public CatType getType() { return this.type; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Cat self = (Cat) o; + return + Objects.equals(this.type, self.type) && + Objects.equals(this.additionalProperties, self.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash((Object)type, (Object)additionalProperties); + } + + @Override + public String toString() { + return \\"class Cat {\\\\n\\" + + \\" type: \\" + toIndentedString(type) + \\"\\\\n\\" + + \\" additionalProperties: \\" + toIndentedString(additionalProperties) + \\"\\\\n\\" + + \\"}\\"; + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return \\"null\\"; + } + return o.toString().replace(\\"\\\\n\\", \\"\\\\n \\"); + } +}", + "public enum CatType { + CAT((String)\\"Cat\\"); + + private String value; + + CatType(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @JsonCreator + public static CatType fromValue(String value) { + for (CatType e : CatType.values()) { + if (e.value.equals(value)) { + return e; + } + } + throw new IllegalArgumentException(\\"Unexpected value '\\" + value + \\"'\\"); + } + + @Override + public String toString() { + return String.valueOf(value); + } +}", +] +`; + +exports[`JavaGenerator oneOf/discriminator with jackson preset should create an interface for child models 1`] = ` +Array [ + "@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.EXISTING_PROPERTY, property=\\"vehicleType\\", visible=true) +@JsonSubTypes({ + @JsonSubTypes.Type(value = Car.class, name = \\"Car\\"), + @JsonSubTypes.Type(value = Truck.class, name = \\"Truck\\") +}) +/** + * Vehicle represents a union of types: Car, Truck + */ +public interface Vehicle { + VehicleType getVehicleType(); +}", + "public class Cargo { + @JsonProperty(\\"vehicle\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private Vehicle vehicle; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public Vehicle getVehicle() { return this.vehicle; } + public void setVehicle(Vehicle vehicle) { this.vehicle = vehicle; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Cargo self = (Cargo) o; + return + Objects.equals(this.vehicle, self.vehicle) && + Objects.equals(this.additionalProperties, self.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash((Object)vehicle, (Object)additionalProperties); + } + + @Override + public String toString() { + return \\"class Cargo {\\\\n\\" + + \\" vehicle: \\" + toIndentedString(vehicle) + \\"\\\\n\\" + + \\" additionalProperties: \\" + toIndentedString(additionalProperties) + \\"\\\\n\\" + + \\"}\\"; + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return \\"null\\"; + } + return o.toString().replace(\\"\\\\n\\", \\"\\\\n \\"); + } +}", + "public class Car implements Vehicle { + @NotNull + @JsonProperty(\\"vehicleType\\") + private final VehicleType vehicleType = VehicleType.CAR; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public VehicleType getVehicleType() { return this.vehicleType; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Car self = (Car) o; + return + Objects.equals(this.vehicleType, self.vehicleType) && + Objects.equals(this.additionalProperties, self.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash((Object)vehicleType, (Object)additionalProperties); + } + + @Override + public String toString() { + return \\"class Car {\\\\n\\" + + \\" vehicleType: \\" + toIndentedString(vehicleType) + \\"\\\\n\\" + + \\" additionalProperties: \\" + toIndentedString(additionalProperties) + \\"\\\\n\\" + + \\"}\\"; + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return \\"null\\"; + } + return o.toString().replace(\\"\\\\n\\", \\"\\\\n \\"); + } +}", + "public enum VehicleType { + CAR((String)\\"Car\\"), TRUCK((String)\\"Truck\\"); + + private String value; + + VehicleType(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @JsonCreator + public static VehicleType fromValue(String value) { + for (VehicleType e : VehicleType.values()) { + if (e.value.equals(value)) { + return e; + } + } + throw new IllegalArgumentException(\\"Unexpected value '\\" + value + \\"'\\"); + } + + @Override + public String toString() { + return String.valueOf(value); + } +}", + "public class Truck implements Vehicle { + @NotNull + @JsonProperty(\\"vehicleType\\") + private final VehicleType vehicleType = VehicleType.TRUCK; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public VehicleType getVehicleType() { return this.vehicleType; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Truck self = (Truck) o; + return + Objects.equals(this.vehicleType, self.vehicleType) && + Objects.equals(this.additionalProperties, self.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash((Object)vehicleType, (Object)additionalProperties); + } + + @Override + public String toString() { + return \\"class Truck {\\\\n\\" + + \\" vehicleType: \\" + toIndentedString(vehicleType) + \\"\\\\n\\" + + \\" additionalProperties: \\" + toIndentedString(additionalProperties) + \\"\\\\n\\" + + \\"}\\"; + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return \\"null\\"; + } + return o.toString().replace(\\"\\\\n\\", \\"\\\\n \\"); + } +}", +] +`; + exports[`JavaGenerator should not render reserved keyword 1`] = ` "public class Address { private String reservedReservedEnum; @@ -14,11 +848,15 @@ exports[`JavaGenerator should not render reserved keyword 1`] = ` `; exports[`JavaGenerator should render \`class\` type 1`] = ` -"public class Address { +Array [ + "", + "", + "", + "public class Address { private String streetName; private String city; private String state; - private Double houseNumber; + private double houseNumber; private Boolean marriage; private Object members; private Object[] arrayType; @@ -33,8 +871,8 @@ exports[`JavaGenerator should render \`class\` type 1`] = ` public String getState() { return this.state; } public void setState(String state) { this.state = state; } - public Double getHouseNumber() { return this.houseNumber; } - public void setHouseNumber(Double houseNumber) { this.houseNumber = houseNumber; } + public double getHouseNumber() { return this.houseNumber; } + public void setHouseNumber(double houseNumber) { this.houseNumber = houseNumber; } public Boolean getMarriage() { return this.marriage; } public void setMarriage(Boolean marriage) { this.marriage = marriage; } @@ -47,7 +885,8 @@ exports[`JavaGenerator should render \`class\` type 1`] = ` public Map getAdditionalProperties() { return this.additionalProperties; } public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } -}" +}", +] `; exports[`JavaGenerator should render \`enum\` type (integer type) 1`] = ` @@ -211,14 +1050,27 @@ exports[`JavaGenerator should render enums with translated special characters 1` `; exports[`JavaGenerator should render models and their dependencies 1`] = ` -"package test.packageName; +Array [ + "package test.packageName; + + +", + "package test.packageName; + + +", + "package test.packageName; + + +", + "package test.packageName; import test.packageName.OtherModel; import java.util.Map; public class Address { private String streetName; private String city; private String state; - private Double houseNumber; + private double houseNumber; private Boolean marriage; private Object members; private Object[] arrayType; @@ -234,8 +1086,8 @@ public class Address { public String getState() { return this.state; } public void setState(String state) { this.state = state; } - public Double getHouseNumber() { return this.houseNumber; } - public void setHouseNumber(Double houseNumber) { this.houseNumber = houseNumber; } + public double getHouseNumber() { return this.houseNumber; } + public void setHouseNumber(double houseNumber) { this.houseNumber = houseNumber; } public Boolean getMarriage() { return this.marriage; } public void setMarriage(Boolean marriage) { this.marriage = marriage; } @@ -251,11 +1103,8 @@ public class Address { public Map getAdditionalProperties() { return this.additionalProperties; } public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } -}" -`; - -exports[`JavaGenerator should render models and their dependencies 2`] = ` -"package test.packageName; +}", + "package test.packageName; import java.util.Map; public class OtherModel { @@ -267,7 +1116,8 @@ public class OtherModel { public Map getAdditionalProperties() { return this.additionalProperties; } public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } -}" +}", +] `; exports[`JavaGenerator should work custom preset for \`class\` type 1`] = ` diff --git a/test/generators/java/constrainer/ConstantConstrainer.spec.ts b/test/generators/java/constrainer/ConstantConstrainer.spec.ts new file mode 100644 index 0000000000..c66822deba --- /dev/null +++ b/test/generators/java/constrainer/ConstantConstrainer.spec.ts @@ -0,0 +1,75 @@ +import { + ConstrainedEnumModel, + ConstrainedEnumValueModel, + ConstrainedReferenceModel, + ConstrainedStringModel +} from '../../../../src'; +import { defaultConstantConstraints } from '../../../../src/generators/java/constrainer/ConstantConstrainer'; + +describe('ConstantConstrainer', () => { + test('should not render anything if const options are not set', () => { + const constrainedConstant = defaultConstantConstraints()({ + constrainedMetaModel: new ConstrainedStringModel( + 'testStringModel', + undefined, + {}, + 'String' + ) + }); + expect(constrainedConstant).toBeUndefined(); + }); + + describe('ConstrainedReferenceModel with ConstrainedEnumModel', () => { + test('should render enum', () => { + const constrainedConstant = defaultConstantConstraints()({ + constrainedMetaModel: new ConstrainedReferenceModel( + 'testRefModel', + undefined, + { + const: { + originalInput: 'testValue' + } + }, + 'TestRefType', + new ConstrainedEnumModel( + 'testEnumModel', + undefined, + {}, + 'TestEnumType', + [new ConstrainedEnumValueModel('testKey', 'testValue', 'testValue')] + ) + ) + }); + expect(constrainedConstant).toEqual('TestRefType.testKey'); + }); + }); + + describe('ConstrainedEnumModel', () => { + test('should render enum', () => { + const constrainedConstant = defaultConstantConstraints()({ + constrainedMetaModel: new ConstrainedEnumModel( + 'testEnumModel', + undefined, + { const: { originalInput: 'testValue' } }, + 'TestEnumType', + [new ConstrainedEnumValueModel('testKey', 'testValue', 'testValue')] + ) + }); + expect(constrainedConstant).toEqual('TestEnumType.testKey'); + }); + }); + + describe('ConstrainedStringModel', () => { + test('should render enum', () => { + const constrainedConstant = defaultConstantConstraints()({ + constrainedMetaModel: new ConstrainedStringModel( + 'testStringModel', + undefined, + { const: { originalInput: 'testValue' } }, + 'String' + ) + }); + expect(constrainedConstant).toEqual('"testValue"'); + }); + }); +}); diff --git a/test/generators/java/constrainer/EnumConstrainer.spec.ts b/test/generators/java/constrainer/EnumConstrainer.spec.ts index d97eef748f..0741014e53 100644 --- a/test/generators/java/constrainer/EnumConstrainer.spec.ts +++ b/test/generators/java/constrainer/EnumConstrainer.spec.ts @@ -10,10 +10,11 @@ import { DefaultEnumKeyConstraints } from '../../../../src/generators/java/constrainer/EnumConstrainer'; describe('EnumConstrainer', () => { - const enumModel = new EnumModel('test', undefined, []); + const enumModel = new EnumModel('test', undefined, {}, []); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [] ); @@ -38,11 +39,13 @@ describe('EnumConstrainer', () => { test('should not contain duplicate keys', () => { const existingConstrainedEnumValueModel = new ConstrainedEnumValueModel( 'EMPTY', + 'return', 'return' ); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [existingConstrainedEnumValueModel] ); diff --git a/test/generators/java/constrainer/PropertyKeyConstrainer.spec.ts b/test/generators/java/constrainer/PropertyKeyConstrainer.spec.ts index 8feac99981..3338834422 100644 --- a/test/generators/java/constrainer/PropertyKeyConstrainer.spec.ts +++ b/test/generators/java/constrainer/PropertyKeyConstrainer.spec.ts @@ -11,10 +11,11 @@ import { PropertyKeyConstraintOptions } from '../../../../src/generators/java/constrainer/PropertyKeyConstrainer'; describe('PropertyKeyConstrainer', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); @@ -59,10 +60,11 @@ describe('PropertyKeyConstrainer', () => { expect(constrainedKey).toEqual('someWeirdValueExclamationQuotationHash_2'); }); test('should not contain duplicate properties', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); diff --git a/test/generators/java/presets/ConstraintsPreset.spec.ts b/test/generators/java/presets/ConstraintsPreset.spec.ts index 5d0ba4100b..d83d322881 100644 --- a/test/generators/java/presets/ConstraintsPreset.spec.ts +++ b/test/generators/java/presets/ConstraintsPreset.spec.ts @@ -17,7 +17,11 @@ describe('JAVA_CONSTRAINTS_PRESET', () => { min_number_prop: { type: 'number', minimum: 0 }, max_number_prop: { type: 'number', exclusiveMaximum: 100 }, array_prop: { type: 'array', minItems: 2, maxItems: 3 }, - string_prop: { type: 'string', pattern: '^I_', minLength: 3 } + string_prop: { + type: 'string', + pattern: '^\\w+("\\.\\w+)*$', + minLength: 3 + } }, required: ['min_number_prop', 'max_number_prop'] }; diff --git a/test/generators/java/presets/JacksonPreset.spec.ts b/test/generators/java/presets/JacksonPreset.spec.ts index 41a4787705..7cf5bb25c9 100644 --- a/test/generators/java/presets/JacksonPreset.spec.ts +++ b/test/generators/java/presets/JacksonPreset.spec.ts @@ -13,7 +13,8 @@ describe('JAVA_JACKSON_PRESET', () => { properties: { min_number_prop: { type: 'number' }, max_number_prop: { type: 'number' } - } + }, + required: ['min_number_prop'] }; const expectedDependencies = [ 'import java.util.Map;', @@ -42,4 +43,185 @@ describe('JAVA_JACKSON_PRESET', () => { expect(models[0].result).toMatchSnapshot(); expect(models[0].dependencies).toEqual(expectedDependencies); }); + + describe('union', () => { + test('handle oneOf with AsyncAPI discriminator with Jackson', async () => { + const asyncapiDoc = { + asyncapi: '2.6.0', + info: { + title: 'Vehicle', + version: '1.0.0' + }, + channels: {}, + components: { + messages: { + Vehicle: { + payload: { + title: 'Vehicle', + discriminator: 'vehicle_type', + oneOf: [ + { $ref: '#/components/schemas/Car' }, + { $ref: '#/components/schemas/Truck' } + ] + } + } + }, + schemas: { + Car: { + title: 'Car', + type: 'object', + properties: { + vehicle_type: { type: 'string' }, + name: { type: 'string' } + } + }, + Truck: { + title: 'Truck', + type: 'object', + properties: { + vehicle_type: { type: 'string' }, + name: { type: 'string' } + } + } + } + } + }; + + const models = await generator.generate(asyncapiDoc); + expect(models.map((model) => model.result)).toMatchSnapshot(); + }); + + test('handle oneOf with Swagger v2 discriminator with Jackson', async () => { + const openapiDoc = { + swagger: '2.0', + info: { + title: 'Vehicle', + version: '1.0.0' + }, + paths: { + '/vehicles': { + get: { + responses: { + 200: { + description: 'successful operation', + schema: { + type: 'object', + title: 'Vehicle', + discriminator: 'vehicleType', + oneOf: [ + { $ref: '#/components/schemas/Car' }, + { $ref: '#/components/schemas/Truck' } + ] + } + } + } + } + } + }, + components: { + schemas: { + Car: { + title: 'Car', + type: 'object', + properties: { + vehicleType: { type: 'string' } + } + }, + Truck: { + title: 'Truck', + type: 'object', + properties: { + vehicleType: { type: 'string' } + } + } + } + } + }; + + const models = await generator.generate(openapiDoc); + expect(models.map((model) => model.result)).toMatchSnapshot(); + }); + + test('handle oneOf with OpenAPI v3 discriminator with Jackson', async () => { + const openapiDoc = { + openapi: '3.0.3', + info: { + title: 'Vehicle', + version: '1.0.0' + }, + paths: { + '/vehicles': { + get: { + responses: { + 200: { + description: 'successful operation', + content: { + 'application/json': { + schema: { + type: 'object', + title: 'Vehicle', + discriminator: { propertyName: 'vehicleType' }, + oneOf: [ + { $ref: '#/components/schemas/Car' }, + { $ref: '#/components/schemas/Truck' } + ] + } + } + } + } + } + } + } + }, + components: { + schemas: { + Car: { + title: 'Car', + type: 'object', + properties: { + vehicleType: { type: 'string' } + } + }, + Truck: { + title: 'Truck', + type: 'object', + properties: { + vehicleType: { type: 'string' } + } + } + } + } + }; + + const models = await generator.generate(openapiDoc); + expect(models.map((model) => model.result)).toMatchSnapshot(); + }); + + test('handle oneOf without discriminator with Jackson deduction', async () => { + const jsonSchemaDraft7 = { + $schema: 'http://json-schema.org/draft-07/schema#', + title: 'Vehicle', + type: 'object', + oneOf: [ + { + title: 'Car', + type: 'object', + properties: { + passengers: { type: 'string' } + } + }, + { + title: 'Truck', + type: 'object', + properties: { + cargo: { type: 'string' } + } + } + ] + }; + + const models = await generator.generate(jsonSchemaDraft7); + expect(models.map((model) => model.result)).toMatchSnapshot(); + }); + }); }); diff --git a/test/generators/java/presets/__snapshots__/CommonPreset.spec.ts.snap b/test/generators/java/presets/__snapshots__/CommonPreset.spec.ts.snap index 229ca33199..accc8c5036 100644 --- a/test/generators/java/presets/__snapshots__/CommonPreset.spec.ts.snap +++ b/test/generators/java/presets/__snapshots__/CommonPreset.spec.ts.snap @@ -2,14 +2,14 @@ exports[`JAVA_COMMON_PRESET should render accurately when there is no additional properties 1`] = ` "public class Clazz { - private Boolean requiredProp; + private boolean requiredProp; private String stringProp; private Double numberProp; private Boolean booleanProp; - private Object[] arrayProp; + private String[] arrayProp; - public Boolean getRequiredProp() { return this.requiredProp; } - public void setRequiredProp(Boolean requiredProp) { this.requiredProp = requiredProp; } + public boolean getRequiredProp() { return this.requiredProp; } + public void setRequiredProp(boolean requiredProp) { this.requiredProp = requiredProp; } public String getStringProp() { return this.stringProp; } public void setStringProp(String stringProp) { this.stringProp = stringProp; } @@ -20,8 +20,8 @@ exports[`JAVA_COMMON_PRESET should render accurately when there is no additional public Boolean getBooleanProp() { return this.booleanProp; } public void setBooleanProp(Boolean booleanProp) { this.booleanProp = booleanProp; } - public Object[] getArrayProp() { return this.arrayProp; } - public void setArrayProp(Object[] arrayProp) { this.arrayProp = arrayProp; } + public String[] getArrayProp() { return this.arrayProp; } + public void setArrayProp(String[] arrayProp) { this.arrayProp = arrayProp; } @Override public boolean equals(Object o) { @@ -71,15 +71,15 @@ exports[`JAVA_COMMON_PRESET should render accurately when there is no additional exports[`JAVA_COMMON_PRESET should render common function in class by common preset 1`] = ` "public class Clazz { - private Boolean requiredProp; + private boolean requiredProp; private String stringProp; private Double numberProp; private Boolean booleanProp; - private Object[] arrayProp; + private String[] arrayProp; private Map additionalProperties; - public Boolean getRequiredProp() { return this.requiredProp; } - public void setRequiredProp(Boolean requiredProp) { this.requiredProp = requiredProp; } + public boolean getRequiredProp() { return this.requiredProp; } + public void setRequiredProp(boolean requiredProp) { this.requiredProp = requiredProp; } public String getStringProp() { return this.stringProp; } public void setStringProp(String stringProp) { this.stringProp = stringProp; } @@ -90,8 +90,8 @@ exports[`JAVA_COMMON_PRESET should render common function in class by common pre public Boolean getBooleanProp() { return this.booleanProp; } public void setBooleanProp(Boolean booleanProp) { this.booleanProp = booleanProp; } - public Object[] getArrayProp() { return this.arrayProp; } - public void setArrayProp(Object[] arrayProp) { this.arrayProp = arrayProp; } + public String[] getArrayProp() { return this.arrayProp; } + public void setArrayProp(String[] arrayProp) { this.arrayProp = arrayProp; } public Map getAdditionalProperties() { return this.additionalProperties; } public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } @@ -146,15 +146,15 @@ exports[`JAVA_COMMON_PRESET should render common function in class by common pre exports[`JAVA_COMMON_PRESET with option should not render any functions when all 4 options are disabled 1`] = ` "public class Clazz { - private Boolean requiredProp; + private boolean requiredProp; private String stringProp; private Double numberProp; private Boolean booleanProp; - private Object[] arrayProp; + private String[] arrayProp; private Map additionalProperties; - public Boolean getRequiredProp() { return this.requiredProp; } - public void setRequiredProp(Boolean requiredProp) { this.requiredProp = requiredProp; } + public boolean getRequiredProp() { return this.requiredProp; } + public void setRequiredProp(boolean requiredProp) { this.requiredProp = requiredProp; } public String getStringProp() { return this.stringProp; } public void setStringProp(String stringProp) { this.stringProp = stringProp; } @@ -165,8 +165,8 @@ exports[`JAVA_COMMON_PRESET with option should not render any functions when all public Boolean getBooleanProp() { return this.booleanProp; } public void setBooleanProp(Boolean booleanProp) { this.booleanProp = booleanProp; } - public Object[] getArrayProp() { return this.arrayProp; } - public void setArrayProp(Object[] arrayProp) { this.arrayProp = arrayProp; } + public String[] getArrayProp() { return this.arrayProp; } + public void setArrayProp(String[] arrayProp) { this.arrayProp = arrayProp; } public Map getAdditionalProperties() { return this.additionalProperties; } public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } @@ -175,15 +175,15 @@ exports[`JAVA_COMMON_PRESET with option should not render any functions when all exports[`JAVA_COMMON_PRESET with option should render all functions 1`] = ` "public class Clazz { - private Boolean requiredProp; + private boolean requiredProp; private String stringProp; private Double numberProp; private Boolean booleanProp; - private Object[] arrayProp; + private String[] arrayProp; private Map additionalProperties; - public Boolean getRequiredProp() { return this.requiredProp; } - public void setRequiredProp(Boolean requiredProp) { this.requiredProp = requiredProp; } + public boolean getRequiredProp() { return this.requiredProp; } + public void setRequiredProp(boolean requiredProp) { this.requiredProp = requiredProp; } public String getStringProp() { return this.stringProp; } public void setStringProp(String stringProp) { this.stringProp = stringProp; } @@ -194,8 +194,8 @@ exports[`JAVA_COMMON_PRESET with option should render all functions 1`] = ` public Boolean getBooleanProp() { return this.booleanProp; } public void setBooleanProp(Boolean booleanProp) { this.booleanProp = booleanProp; } - public Object[] getArrayProp() { return this.arrayProp; } - public void setArrayProp(Object[] arrayProp) { this.arrayProp = arrayProp; } + public String[] getArrayProp() { return this.arrayProp; } + public void setArrayProp(String[] arrayProp) { this.arrayProp = arrayProp; } public Map getAdditionalProperties() { return this.additionalProperties; } public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } @@ -250,15 +250,15 @@ exports[`JAVA_COMMON_PRESET with option should render all functions 1`] = ` exports[`JAVA_COMMON_PRESET with option should render classToString 1`] = ` "public class Clazz { - private Boolean requiredProp; + private boolean requiredProp; private String stringProp; private Double numberProp; private Boolean booleanProp; - private Object[] arrayProp; + private String[] arrayProp; private Map additionalProperties; - public Boolean getRequiredProp() { return this.requiredProp; } - public void setRequiredProp(Boolean requiredProp) { this.requiredProp = requiredProp; } + public boolean getRequiredProp() { return this.requiredProp; } + public void setRequiredProp(boolean requiredProp) { this.requiredProp = requiredProp; } public String getStringProp() { return this.stringProp; } public void setStringProp(String stringProp) { this.stringProp = stringProp; } @@ -269,8 +269,8 @@ exports[`JAVA_COMMON_PRESET with option should render classToString 1`] = ` public Boolean getBooleanProp() { return this.booleanProp; } public void setBooleanProp(Boolean booleanProp) { this.booleanProp = booleanProp; } - public Object[] getArrayProp() { return this.arrayProp; } - public void setArrayProp(Object[] arrayProp) { this.arrayProp = arrayProp; } + public String[] getArrayProp() { return this.arrayProp; } + public void setArrayProp(String[] arrayProp) { this.arrayProp = arrayProp; } public Map getAdditionalProperties() { return this.additionalProperties; } public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } @@ -302,15 +302,15 @@ exports[`JAVA_COMMON_PRESET with option should render classToString 1`] = ` exports[`JAVA_COMMON_PRESET with option should render equals 1`] = ` "public class Clazz { - private Boolean requiredProp; + private boolean requiredProp; private String stringProp; private Double numberProp; private Boolean booleanProp; - private Object[] arrayProp; + private String[] arrayProp; private Map additionalProperties; - public Boolean getRequiredProp() { return this.requiredProp; } - public void setRequiredProp(Boolean requiredProp) { this.requiredProp = requiredProp; } + public boolean getRequiredProp() { return this.requiredProp; } + public void setRequiredProp(boolean requiredProp) { this.requiredProp = requiredProp; } public String getStringProp() { return this.stringProp; } public void setStringProp(String stringProp) { this.stringProp = stringProp; } @@ -321,8 +321,8 @@ exports[`JAVA_COMMON_PRESET with option should render equals 1`] = ` public Boolean getBooleanProp() { return this.booleanProp; } public void setBooleanProp(Boolean booleanProp) { this.booleanProp = booleanProp; } - public Object[] getArrayProp() { return this.arrayProp; } - public void setArrayProp(Object[] arrayProp) { this.arrayProp = arrayProp; } + public String[] getArrayProp() { return this.arrayProp; } + public void setArrayProp(String[] arrayProp) { this.arrayProp = arrayProp; } public Map getAdditionalProperties() { return this.additionalProperties; } public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } @@ -349,15 +349,15 @@ exports[`JAVA_COMMON_PRESET with option should render equals 1`] = ` exports[`JAVA_COMMON_PRESET with option should render hashCode 1`] = ` "public class Clazz { - private Boolean requiredProp; + private boolean requiredProp; private String stringProp; private Double numberProp; private Boolean booleanProp; - private Object[] arrayProp; + private String[] arrayProp; private Map additionalProperties; - public Boolean getRequiredProp() { return this.requiredProp; } - public void setRequiredProp(Boolean requiredProp) { this.requiredProp = requiredProp; } + public boolean getRequiredProp() { return this.requiredProp; } + public void setRequiredProp(boolean requiredProp) { this.requiredProp = requiredProp; } public String getStringProp() { return this.stringProp; } public void setStringProp(String stringProp) { this.stringProp = stringProp; } @@ -368,8 +368,8 @@ exports[`JAVA_COMMON_PRESET with option should render hashCode 1`] = ` public Boolean getBooleanProp() { return this.booleanProp; } public void setBooleanProp(Boolean booleanProp) { this.booleanProp = booleanProp; } - public Object[] getArrayProp() { return this.arrayProp; } - public void setArrayProp(Object[] arrayProp) { this.arrayProp = arrayProp; } + public String[] getArrayProp() { return this.arrayProp; } + public void setArrayProp(String[] arrayProp) { this.arrayProp = arrayProp; } public Map getAdditionalProperties() { return this.additionalProperties; } public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } @@ -383,15 +383,15 @@ exports[`JAVA_COMMON_PRESET with option should render hashCode 1`] = ` exports[`JAVA_COMMON_PRESET with option should render un/marshal 1`] = ` "public class Clazz { - private Boolean requiredProp; + private boolean requiredProp; private String stringProp; private Double numberProp; private Boolean booleanProp; - private Object[] arrayProp; + private String[] arrayProp; private Map additionalProperties; - public Boolean getRequiredProp() { return this.requiredProp; } - public void setRequiredProp(Boolean requiredProp) { this.requiredProp = requiredProp; } + public boolean getRequiredProp() { return this.requiredProp; } + public void setRequiredProp(boolean requiredProp) { this.requiredProp = requiredProp; } public String getStringProp() { return this.stringProp; } public void setStringProp(String stringProp) { this.stringProp = stringProp; } @@ -402,8 +402,8 @@ exports[`JAVA_COMMON_PRESET with option should render un/marshal 1`] = ` public Boolean getBooleanProp() { return this.booleanProp; } public void setBooleanProp(Boolean booleanProp) { this.booleanProp = booleanProp; } - public Object[] getArrayProp() { return this.arrayProp; } - public void setArrayProp(Object[] arrayProp) { this.arrayProp = arrayProp; } + public String[] getArrayProp() { return this.arrayProp; } + public void setArrayProp(String[] arrayProp) { this.arrayProp = arrayProp; } public Map getAdditionalProperties() { return this.additionalProperties; } public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } @@ -447,7 +447,7 @@ exports[`JAVA_COMMON_PRESET with option should render un/marshal 1`] = ` result.setBooleanProp(jsonObject.getBoolean(\\"booleanProp\\")); } if(jsonObject.has(\\"arrayProp\\")) { - result.setArrayProp(jsonObject.getObject[](\\"arrayProp\\")); + result.setArrayProp(jsonObject.getString[](\\"arrayProp\\")); } if(jsonObject.has(\\"additionalProperties\\")) { result.setAdditionalProperties(jsonObject.getMap(\\"additionalProperties\\")); diff --git a/test/generators/java/presets/__snapshots__/ConstraintsPreset.spec.ts.snap b/test/generators/java/presets/__snapshots__/ConstraintsPreset.spec.ts.snap index eddd84c8dc..a9652ad936 100644 --- a/test/generators/java/presets/__snapshots__/ConstraintsPreset.spec.ts.snap +++ b/test/generators/java/presets/__snapshots__/ConstraintsPreset.spec.ts.snap @@ -4,22 +4,22 @@ exports[`JAVA_CONSTRAINTS_PRESET should render constraints annotations 1`] = ` "public class Clazz { @NotNull @Min(0) - private Double minNumberProp; + private double minNumberProp; @NotNull @Max(99) - private Double maxNumberProp; + private double maxNumberProp; @Size(min=2, max=3) private Object[] arrayProp; - @Pattern(regexp=\\"^I_\\") + @Pattern(regexp=\\"^\\\\\\\\w+(\\\\\\"\\\\\\\\.\\\\\\\\w+)*$\\") @Size(min=3) private String stringProp; private Map additionalProperties; - public Double getMinNumberProp() { return this.minNumberProp; } - public void setMinNumberProp(Double minNumberProp) { this.minNumberProp = minNumberProp; } + public double getMinNumberProp() { return this.minNumberProp; } + public void setMinNumberProp(double minNumberProp) { this.minNumberProp = minNumberProp; } - public Double getMaxNumberProp() { return this.maxNumberProp; } - public void setMaxNumberProp(Double maxNumberProp) { this.maxNumberProp = maxNumberProp; } + public double getMaxNumberProp() { return this.maxNumberProp; } + public void setMaxNumberProp(double maxNumberProp) { this.maxNumberProp = maxNumberProp; } public Object[] getArrayProp() { return this.arrayProp; } public void setArrayProp(Object[] arrayProp) { this.arrayProp = arrayProp; } diff --git a/test/generators/java/presets/__snapshots__/JacksonPreset.spec.ts.snap b/test/generators/java/presets/__snapshots__/JacksonPreset.spec.ts.snap index 1cb46f0ae1..f7d1757aab 100644 --- a/test/generators/java/presets/__snapshots__/JacksonPreset.spec.ts.snap +++ b/test/generators/java/presets/__snapshots__/JacksonPreset.spec.ts.snap @@ -3,13 +3,15 @@ exports[`JAVA_JACKSON_PRESET should render Jackson annotations for class 1`] = ` "public class Clazz { @JsonProperty(\\"min_number_prop\\") - private Double minNumberProp; + private double minNumberProp; @JsonProperty(\\"max_number_prop\\") + @JsonInclude(JsonInclude.Include.NON_NULL) private Double maxNumberProp; + @JsonInclude(JsonInclude.Include.NON_NULL) private Map additionalProperties; - public Double getMinNumberProp() { return this.minNumberProp; } - public void setMinNumberProp(Double minNumberProp) { this.minNumberProp = minNumberProp; } + public double getMinNumberProp() { return this.minNumberProp; } + public void setMinNumberProp(double minNumberProp) { this.minNumberProp = minNumberProp; } public Double getMaxNumberProp() { return this.maxNumberProp; } public void setMaxNumberProp(Double maxNumberProp) { this.maxNumberProp = maxNumberProp; } @@ -50,3 +52,183 @@ exports[`JAVA_JACKSON_PRESET should render Jackson annotations for enum 1`] = ` } }" `; + +exports[`JAVA_JACKSON_PRESET union handle oneOf with AsyncAPI discriminator with Jackson 1`] = ` +Array [ + "@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.EXISTING_PROPERTY, property=\\"vehicle_type\\", visible=true) +@JsonSubTypes({ + @JsonSubTypes.Type(value = Car.class, name = \\"Car\\"), + @JsonSubTypes.Type(value = Truck.class, name = \\"Truck\\") +}) +/** + * Vehicle represents a union of types: Car, Truck + */ +public interface Vehicle { + String getVehicleType(); +}", + "public class Car implements Vehicle { + @JsonProperty(\\"vehicle_type\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String vehicleType; + @JsonProperty(\\"name\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String name; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public String getVehicleType() { return this.vehicleType; } + public void setVehicleType(String vehicleType) { this.vehicleType = vehicleType; } + + public String getName() { return this.name; } + public void setName(String name) { this.name = name; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } +}", + "public class Truck implements Vehicle { + @JsonProperty(\\"vehicle_type\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String vehicleType; + @JsonProperty(\\"name\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String name; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public String getVehicleType() { return this.vehicleType; } + public void setVehicleType(String vehicleType) { this.vehicleType = vehicleType; } + + public String getName() { return this.name; } + public void setName(String name) { this.name = name; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } +}", +] +`; + +exports[`JAVA_JACKSON_PRESET union handle oneOf with OpenAPI v3 discriminator with Jackson 1`] = ` +Array [ + "@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.EXISTING_PROPERTY, property=\\"vehicleType\\", visible=true) +@JsonSubTypes({ + @JsonSubTypes.Type(value = Car.class, name = \\"Car\\"), + @JsonSubTypes.Type(value = Truck.class, name = \\"Truck\\") +}) +/** + * Vehicle represents a union of types: Car, Truck + */ +public interface Vehicle { + String getVehicleType(); +}", + "public class Car implements Vehicle { + @JsonProperty(\\"vehicleType\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String vehicleType; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public String getVehicleType() { return this.vehicleType; } + public void setVehicleType(String vehicleType) { this.vehicleType = vehicleType; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } +}", + "public class Truck implements Vehicle { + @JsonProperty(\\"vehicleType\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String vehicleType; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public String getVehicleType() { return this.vehicleType; } + public void setVehicleType(String vehicleType) { this.vehicleType = vehicleType; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } +}", +] +`; + +exports[`JAVA_JACKSON_PRESET union handle oneOf with Swagger v2 discriminator with Jackson 1`] = ` +Array [ + "@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.EXISTING_PROPERTY, property=\\"vehicleType\\", visible=true) +@JsonSubTypes({ + @JsonSubTypes.Type(value = Car.class, name = \\"Car\\"), + @JsonSubTypes.Type(value = Truck.class, name = \\"Truck\\") +}) +/** + * Vehicle represents a union of types: Car, Truck + */ +public interface Vehicle { + String getVehicleType(); +}", + "public class Car implements Vehicle { + @JsonProperty(\\"vehicleType\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String vehicleType; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public String getVehicleType() { return this.vehicleType; } + public void setVehicleType(String vehicleType) { this.vehicleType = vehicleType; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } +}", + "public class Truck implements Vehicle { + @JsonProperty(\\"vehicleType\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String vehicleType; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public String getVehicleType() { return this.vehicleType; } + public void setVehicleType(String vehicleType) { this.vehicleType = vehicleType; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } +}", +] +`; + +exports[`JAVA_JACKSON_PRESET union handle oneOf without discriminator with Jackson deduction 1`] = ` +Array [ + "@JsonTypeInfo(use=JsonTypeInfo.Id.DEDUCTION) +@JsonSubTypes({ + @JsonSubTypes.Type(value = Car.class, name = \\"Car\\"), + @JsonSubTypes.Type(value = Truck.class, name = \\"Truck\\") +}) +/** + * Vehicle represents a union of types: Car, Truck + */ +public interface Vehicle { + +}", + "public class Car implements Vehicle { + @JsonProperty(\\"passengers\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String passengers; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public String getPassengers() { return this.passengers; } + public void setPassengers(String passengers) { this.passengers = passengers; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } +}", + "public class Truck implements Vehicle { + @JsonProperty(\\"cargo\\") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String cargo; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map additionalProperties; + + public String getCargo() { return this.cargo; } + public void setCargo(String cargo) { this.cargo = cargo; } + + public Map getAdditionalProperties() { return this.additionalProperties; } + public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } +}", +] +`; diff --git a/test/generators/javascript/JavaScriptConstrainer.spec.ts b/test/generators/javascript/JavaScriptConstrainer.spec.ts index 54dd8ccebd..27234e42f7 100644 --- a/test/generators/javascript/JavaScriptConstrainer.spec.ts +++ b/test/generators/javascript/JavaScriptConstrainer.spec.ts @@ -24,7 +24,7 @@ describe('JavaScriptConstrainer', () => { }; describe('ObjectModel', () => { test('should have no type', () => { - const model = new ConstrainedObjectModel('test', undefined, '', {}); + const model = new ConstrainedObjectModel('test', undefined, {}, '', {}); const type = JavaScriptDefaultTypeMapping.Object({ constrainedModel: model, ...defaultOptions @@ -34,10 +34,11 @@ describe('JavaScriptConstrainer', () => { }); describe('Reference', () => { test('should have no type', () => { - const refModel = new ConstrainedAnyModel('test', undefined, ''); + const refModel = new ConstrainedAnyModel('test', undefined, {}, ''); const model = new ConstrainedReferenceModel( 'test', undefined, + {}, '', refModel ); @@ -50,7 +51,7 @@ describe('JavaScriptConstrainer', () => { }); describe('Any', () => { test('should have no type', () => { - const model = new ConstrainedAnyModel('test', undefined, ''); + const model = new ConstrainedAnyModel('test', undefined, {}, ''); const type = JavaScriptDefaultTypeMapping.Any({ constrainedModel: model, ...defaultOptions @@ -60,7 +61,7 @@ describe('JavaScriptConstrainer', () => { }); describe('Float', () => { test('should have no type', () => { - const model = new ConstrainedFloatModel('test', undefined, ''); + const model = new ConstrainedFloatModel('test', undefined, {}, ''); const type = JavaScriptDefaultTypeMapping.Float({ constrainedModel: model, ...defaultOptions @@ -70,7 +71,7 @@ describe('JavaScriptConstrainer', () => { }); describe('Integer', () => { test('should have no type', () => { - const model = new ConstrainedIntegerModel('test', undefined, ''); + const model = new ConstrainedIntegerModel('test', undefined, {}, ''); const type = JavaScriptDefaultTypeMapping.Integer({ constrainedModel: model, ...defaultOptions @@ -80,7 +81,7 @@ describe('JavaScriptConstrainer', () => { }); describe('String', () => { test('should have no type', () => { - const model = new ConstrainedStringModel('test', undefined, ''); + const model = new ConstrainedStringModel('test', undefined, {}, ''); const type = JavaScriptDefaultTypeMapping.String({ constrainedModel: model, ...defaultOptions @@ -90,7 +91,7 @@ describe('JavaScriptConstrainer', () => { }); describe('Boolean', () => { test('should have no type', () => { - const model = new ConstrainedBooleanModel('test', undefined, ''); + const model = new ConstrainedBooleanModel('test', undefined, {}, ''); const type = JavaScriptDefaultTypeMapping.Boolean({ constrainedModel: model, ...defaultOptions @@ -101,7 +102,7 @@ describe('JavaScriptConstrainer', () => { describe('Tuple', () => { test('should have no type', () => { - const model = new ConstrainedTupleModel('test', undefined, '', []); + const model = new ConstrainedTupleModel('test', undefined, {}, '', []); const type = JavaScriptDefaultTypeMapping.Tuple({ constrainedModel: model, ...defaultOptions @@ -115,11 +116,13 @@ describe('JavaScriptConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -133,7 +136,7 @@ describe('JavaScriptConstrainer', () => { describe('Enum', () => { test('should have no type', () => { - const model = new ConstrainedEnumModel('test', undefined, '', []); + const model = new ConstrainedEnumModel('test', undefined, {}, '', []); const type = JavaScriptDefaultTypeMapping.Enum({ constrainedModel: model, ...defaultOptions @@ -144,7 +147,7 @@ describe('JavaScriptConstrainer', () => { describe('Union', () => { test('should have no type', () => { - const model = new ConstrainedUnionModel('test', undefined, '', []); + const model = new ConstrainedUnionModel('test', undefined, {}, '', []); const type = JavaScriptDefaultTypeMapping.Union({ constrainedModel: model, ...defaultOptions @@ -155,15 +158,22 @@ describe('JavaScriptConstrainer', () => { describe('Dictionary', () => { test('should have no type', () => { - const keyModel = new ConstrainedStringModel('test', undefined, 'String'); + const keyModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'String' + ); const valueModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel diff --git a/test/generators/javascript/constrainer/EnumConstrainer.spec.ts b/test/generators/javascript/constrainer/EnumConstrainer.spec.ts index 3c6bde74f5..53e11edcec 100644 --- a/test/generators/javascript/constrainer/EnumConstrainer.spec.ts +++ b/test/generators/javascript/constrainer/EnumConstrainer.spec.ts @@ -5,10 +5,11 @@ import { ConstrainedEnumValueModel } from '../../../../src'; describe('EnumConstrainer', () => { - const enumModel = new EnumModel('test', undefined, []); + const enumModel = new EnumModel('test', undefined, {}, []); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [] ); @@ -33,11 +34,13 @@ describe('EnumConstrainer', () => { test('should not contain duplicate keys', () => { const existingConstrainedEnumValueModel = new ConstrainedEnumValueModel( 'EMPTY', + 'return', 'return' ); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [existingConstrainedEnumValueModel] ); diff --git a/test/generators/javascript/constrainer/PropertyKeyConstrainer.spec.ts b/test/generators/javascript/constrainer/PropertyKeyConstrainer.spec.ts index 9d814bd282..330e8c36a6 100644 --- a/test/generators/javascript/constrainer/PropertyKeyConstrainer.spec.ts +++ b/test/generators/javascript/constrainer/PropertyKeyConstrainer.spec.ts @@ -11,10 +11,11 @@ import { PropertyKeyConstraintOptions } from '../../../../src/generators/javascript/constrainer/PropertyKeyConstrainer'; describe('PropertyKeyConstrainer', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); @@ -56,10 +57,11 @@ describe('PropertyKeyConstrainer', () => { expect(constrainedKey).toEqual('someWeirdValueExclamationQuotationHash_2'); }); test('should not contain duplicate properties', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); diff --git a/test/generators/javascript/preset/__snapshots__/MarshallingPreset.spec.ts.snap b/test/generators/javascript/preset/__snapshots__/MarshallingPreset.spec.ts.snap index 2eca68bb72..b14b1a90cf 100644 --- a/test/generators/javascript/preset/__snapshots__/MarshallingPreset.spec.ts.snap +++ b/test/generators/javascript/preset/__snapshots__/MarshallingPreset.spec.ts.snap @@ -60,7 +60,7 @@ exports[`Marshalling preset should render un/marshal code 1`] = ` //Not part of core properties //Only go over remaining. properties - for (const [key, value] of Object.entries(obj).filter((([key,]) => {return ![\\"stringProp\\",\\"numberProp\\",\\"additionalProperties\\"].includes(key);}))) { + for (const [key, value] of Object.entries(obj).filter((([key,]) => {return ![\\"string prop\\",\\"numberProp\\",\\"additionalProperties\\"].includes(key);}))) { } diff --git a/test/generators/javascript/preset/utils/ExampleFunctions.spec.ts b/test/generators/javascript/preset/utils/ExampleFunctions.spec.ts index 4038384f3b..ee3a16cf79 100644 --- a/test/generators/javascript/preset/utils/ExampleFunctions.spec.ts +++ b/test/generators/javascript/preset/utils/ExampleFunctions.spec.ts @@ -17,11 +17,13 @@ describe('Example preset', () => { const refModel = new ConstrainedAnyModel( 'SomeOtherModel', undefined, + {}, 'SomeOtherModel' ); const model = new ConstrainedReferenceModel( 'test', undefined, + {}, '', refModel ); @@ -30,24 +32,34 @@ describe('Example preset', () => { }); describe('types', () => { test('Should render strings correctly', () => { - const model = new ConstrainedStringModel('test', undefined, ''); + const model = new ConstrainedStringModel('test', undefined, {}, ''); const output = renderValueFromModel(model); expect(output).toEqual('"string"'); }); test('Should render numbers correctly', () => { - const model = new ConstrainedIntegerModel('test', undefined, ''); + const model = new ConstrainedIntegerModel('test', undefined, {}, ''); const output = renderValueFromModel(model); expect(output).toEqual('0'); }); test('Should render booleans correctly', () => { - const model = new ConstrainedBooleanModel('test', undefined, ''); + const model = new ConstrainedBooleanModel('test', undefined, {}, ''); const output = renderValueFromModel(model); expect(output).toEqual('true'); }); test('Should use first value if there is more then one', () => { - const stringModel = new ConstrainedStringModel('test', undefined, ''); - const booleanModel = new ConstrainedBooleanModel('test', undefined, ''); - const model = new ConstrainedUnionModel('test', undefined, '', [ + const stringModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + '' + ); + const booleanModel = new ConstrainedBooleanModel( + 'test', + undefined, + {}, + '' + ); + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ booleanModel, stringModel ]); @@ -56,13 +68,19 @@ describe('Example preset', () => { }); describe('array', () => { test('should render multiple array values', () => { - const stringModel = new ConstrainedStringModel('test', undefined, ''); + const stringModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + '' + ); const integerModel = new ConstrainedIntegerModel( 'test', undefined, + {}, '' ); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ new ConstrainedTupleValueModel(0, stringModel), new ConstrainedTupleValueModel(1, integerModel) ]); @@ -73,11 +91,13 @@ describe('Example preset', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -86,7 +106,7 @@ describe('Example preset', () => { }); }); test('Should ignore if none are present', () => { - const model = new ConstrainedAnyModel('test', undefined, ''); + const model = new ConstrainedAnyModel('test', undefined, {}, ''); const output = renderValueFromModel(model); expect(output).toBeUndefined(); }); diff --git a/test/generators/kotlin/KotlinConstrainer.spec.ts b/test/generators/kotlin/KotlinConstrainer.spec.ts index 81f1412607..a9acb96be8 100644 --- a/test/generators/kotlin/KotlinConstrainer.spec.ts +++ b/test/generators/kotlin/KotlinConstrainer.spec.ts @@ -19,158 +19,199 @@ import { describe('KotlinConstrainer', () => { describe('ObjectModel', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedObjectModel('test', undefined, '', {}); + const model = new ConstrainedObjectModel('test', undefined, {}, '', {}); const type = KotlinDefaultTypeMapping.Object({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(model.name); }); }); describe('Reference', () => { test('should render the constrained name as type', () => { - const refModel = new ConstrainedAnyModel('test', undefined, ''); + const refModel = new ConstrainedAnyModel('test', undefined, {}, ''); const model = new ConstrainedReferenceModel( 'test', undefined, + {}, '', refModel ); const type = KotlinDefaultTypeMapping.Reference({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(model.name); }); }); describe('Any', () => { test('should render type', () => { - const model = new ConstrainedAnyModel('test', undefined, ''); + const model = new ConstrainedAnyModel('test', undefined, {}, ''); const type = KotlinDefaultTypeMapping.Any({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Any'); }); }); describe('Float', () => { test('should render type', () => { - const model = new ConstrainedFloatModel('test', undefined, ''); + const model = new ConstrainedFloatModel('test', undefined, {}, ''); const type = KotlinDefaultTypeMapping.Float({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Double'); }); - test('should render Float when original input has number format', () => { - const model = new ConstrainedFloatModel('test', { format: 'float' }, ''); + test('should render Float when format has number format', () => { + const model = new ConstrainedFloatModel( + 'test', + {}, + { format: 'float' }, + '' + ); const type = KotlinDefaultTypeMapping.Float({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Float'); }); }); describe('Integer', () => { test('should render type', () => { - const model = new ConstrainedIntegerModel('test', undefined, ''); + const model = new ConstrainedIntegerModel('test', undefined, {}, ''); const type = KotlinDefaultTypeMapping.Integer({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Int'); }); - test('should render Int when original input has integer format', () => { + test('should render Int when format has integer format', () => { const model = new ConstrainedIntegerModel( 'test', + {}, { format: 'int32' }, '' ); const type = KotlinDefaultTypeMapping.Integer({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Int'); }); - test('should render Long when original input has long format', () => { - const model = new ConstrainedIntegerModel('test', { format: 'long' }, ''); + test('should render Long when format has long format', () => { + const model = new ConstrainedIntegerModel( + 'test', + {}, + { format: 'long' }, + '' + ); const type = KotlinDefaultTypeMapping.Integer({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Long'); }); - test('should render Long when original input has int64 format', () => { + test('should render Long when format has int64 format', () => { const model = new ConstrainedIntegerModel( 'test', + {}, { format: 'int64' }, '' ); const type = KotlinDefaultTypeMapping.Integer({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Long'); }); }); describe('String', () => { test('should render type', () => { - const model = new ConstrainedStringModel('test', undefined, ''); + const model = new ConstrainedStringModel('test', undefined, {}, ''); const type = KotlinDefaultTypeMapping.String({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('String'); }); - test('should render LocalDate when original input has date format', () => { - const model = new ConstrainedStringModel('test', { format: 'date' }, ''); + test('should render LocalDate when format has date format', () => { + const model = new ConstrainedStringModel( + 'test', + {}, + { format: 'date' }, + '' + ); const type = KotlinDefaultTypeMapping.String({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('java.time.LocalDate'); }); - test('should render OffsetTime when original input has time format', () => { - const model = new ConstrainedStringModel('test', { format: 'time' }, ''); + test('should render OffsetTime when format has time format', () => { + const model = new ConstrainedStringModel( + 'test', + {}, + { format: 'time' }, + '' + ); const type = KotlinDefaultTypeMapping.String({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('java.time.OffsetTime'); }); - test('should render OffsetDateTime when original input has dateTime format', () => { + test('should render OffsetDateTime when format has dateTime format', () => { const model = new ConstrainedStringModel( 'test', + {}, { format: 'dateTime' }, '' ); const type = KotlinDefaultTypeMapping.String({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('java.time.OffsetDateTime'); }); - test('should render OffsetDateTime when original input has date-time format', () => { + test('should render OffsetDateTime when format has date-time format', () => { const model = new ConstrainedStringModel( 'test', + {}, { format: 'date-time' }, '' ); const type = KotlinDefaultTypeMapping.String({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('java.time.OffsetDateTime'); }); - test('should render byte when original input has binary format', () => { + test('should render byte when format has binary format', () => { const model = new ConstrainedStringModel( 'test', + {}, { format: 'binary' }, '' ); const type = KotlinDefaultTypeMapping.String({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('ByteArray'); }); @@ -178,10 +219,11 @@ describe('KotlinConstrainer', () => { describe('Boolean', () => { test('should render type', () => { - const model = new ConstrainedBooleanModel('test', undefined, ''); + const model = new ConstrainedBooleanModel('test', undefined, {}, ''); const type = KotlinDefaultTypeMapping.Boolean({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Boolean'); }); @@ -192,15 +234,17 @@ describe('KotlinConstrainer', () => { const stringModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const tupleValueModel = new ConstrainedTupleValueModel(0, stringModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel ]); const type = KotlinDefaultTypeMapping.Tuple({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('List'); }); @@ -208,17 +252,19 @@ describe('KotlinConstrainer', () => { const stringModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const tupleValueModel0 = new ConstrainedTupleValueModel(0, stringModel); const tupleValueModel1 = new ConstrainedTupleValueModel(1, stringModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel0, tupleValueModel1 ]); const type = KotlinDefaultTypeMapping.Tuple({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('List'); }); @@ -229,11 +275,13 @@ describe('KotlinConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -243,7 +291,8 @@ describe('KotlinConstrainer', () => { }; const type = KotlinDefaultTypeMapping.Array({ constrainedModel: model, - options + options, + dependencyManager: undefined as never }); expect(type).toEqual('Array'); }); @@ -251,11 +300,13 @@ describe('KotlinConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -265,7 +316,8 @@ describe('KotlinConstrainer', () => { }; const type = KotlinDefaultTypeMapping.Array({ constrainedModel: model, - options + options, + dependencyManager: undefined as never }); expect(type).toEqual('List'); }); @@ -273,107 +325,135 @@ describe('KotlinConstrainer', () => { describe('Enum', () => { test('should render string enum values as String type', () => { - const enumValue = new ConstrainedEnumValueModel('test', 'string type'); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue = new ConstrainedEnumValueModel( + 'test', + 'string type', + {} + ); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue ]); const type = KotlinDefaultTypeMapping.Enum({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('String'); }); test('should render boolean enum values as boolean type', () => { - const enumValue = new ConstrainedEnumValueModel('test', true); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue = new ConstrainedEnumValueModel('test', true, {}); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue ]); const type = KotlinDefaultTypeMapping.Enum({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Boolean'); }); - test('should render generic number enum value with format ', () => { - const enumValue = new ConstrainedEnumValueModel('test', 123); - const model = new ConstrainedEnumModel('test', undefined, '', [ + test('should render generic number enum value with format', () => { + const enumValue = new ConstrainedEnumValueModel('test', 123, {}); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue ]); const type = KotlinDefaultTypeMapping.Enum({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Int'); }); test('should render generic number enum value with float format as float type', () => { - const enumValue = new ConstrainedEnumValueModel('test', 12.0); - const model = new ConstrainedEnumModel('test', { format: 'float' }, '', [ - enumValue - ]); + const enumValue = new ConstrainedEnumValueModel('test', 12.0, {}); + const model = new ConstrainedEnumModel( + 'test', + {}, + { format: 'float' }, + '', + [enumValue] + ); const type = KotlinDefaultTypeMapping.Enum({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Float'); }); test('should render generic number enum value with double format as double type', () => { - const enumValue = new ConstrainedEnumValueModel('test', 12.0); - const model = new ConstrainedEnumModel('test', { format: 'double' }, '', [ - enumValue - ]); + const enumValue = new ConstrainedEnumValueModel('test', 12.0, {}); + const model = new ConstrainedEnumModel( + 'test', + {}, + { format: 'double' }, + '', + [enumValue] + ); const type = KotlinDefaultTypeMapping.Enum({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Double'); }); test('should render object enum value as generic Object', () => { - const enumValue = new ConstrainedEnumValueModel('test', {}); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue = new ConstrainedEnumValueModel('test', {}, {}); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue ]); const type = KotlinDefaultTypeMapping.Enum({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Any'); }); test('should render multiple value types as generic Object', () => { - const enumValue2 = new ConstrainedEnumValueModel('test', true); - const enumValue1 = new ConstrainedEnumValueModel('test', 'string type'); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue2 = new ConstrainedEnumValueModel('test', true, {}); + const enumValue1 = new ConstrainedEnumValueModel( + 'test', + 'string type', + {} + ); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue1, enumValue2 ]); const type = KotlinDefaultTypeMapping.Enum({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Any'); }); test('should render double and integer as double type', () => { - const enumValue2 = new ConstrainedEnumValueModel('test', 123); - const enumValue1 = new ConstrainedEnumValueModel('test', 123.12); - const model = new ConstrainedEnumModel('test', undefined, '', [ + const enumValue2 = new ConstrainedEnumValueModel('test', 123, {}); + const enumValue1 = new ConstrainedEnumValueModel('test', 123.12, {}); + const model = new ConstrainedEnumModel('test', undefined, {}, '', [ enumValue1, enumValue2 ]); const type = KotlinDefaultTypeMapping.Enum({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Double'); }); test('should render int and long as long type', () => { - const enumValue2 = new ConstrainedEnumValueModel('test', 123); - const enumValue1 = new ConstrainedEnumValueModel('test', 123); - const model = new ConstrainedEnumModel('test', { format: 'long' }, '', [ - enumValue1, - enumValue2 - ]); + const enumValue2 = new ConstrainedEnumValueModel('test', 123, {}); + const enumValue1 = new ConstrainedEnumValueModel('test', 123, {}); + const model = new ConstrainedEnumModel( + 'test', + {}, + { format: 'long' }, + '', + [enumValue1, enumValue2] + ); const type = KotlinDefaultTypeMapping.Enum({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Long'); }); @@ -381,13 +461,19 @@ describe('KotlinConstrainer', () => { describe('Union', () => { test('should render type', () => { - const unionModel = new ConstrainedStringModel('test', undefined, 'str'); - const model = new ConstrainedUnionModel('test', undefined, '', [ + const unionModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ unionModel ]); const type = KotlinDefaultTypeMapping.Union({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Any'); }); @@ -395,22 +481,30 @@ describe('KotlinConstrainer', () => { describe('Dictionary', () => { test('should render type', () => { - const keyModel = new ConstrainedStringModel('test', undefined, 'String'); + const keyModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'String' + ); const valueModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel ); const type = KotlinDefaultTypeMapping.Dictionary({ constrainedModel: model, - options: KotlinGenerator.defaultOptions + options: KotlinGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Map'); }); diff --git a/test/generators/kotlin/__snapshots__/KotlinGenerator.spec.ts.snap b/test/generators/kotlin/__snapshots__/KotlinGenerator.spec.ts.snap index fe4c92ca7a..73030d4757 100644 --- a/test/generators/kotlin/__snapshots__/KotlinGenerator.spec.ts.snap +++ b/test/generators/kotlin/__snapshots__/KotlinGenerator.spec.ts.snap @@ -2,7 +2,7 @@ exports[`KotlinGenerator should not render reserved keyword 1`] = ` "data class Address( - val reservedClass: String, + val reservedClass: String? = null, )" `; @@ -12,14 +12,14 @@ exports[`KotlinGenerator should render \`data class\` type 1`] = ` val city: String, val state: String, val houseNumber: Double, - val marriage: Boolean, - val members: Any, + val marriage: Boolean? = null, + val members: Any? = null, val arrayType: List, - val date: java.time.LocalDate, - val time: java.time.OffsetTime, - val dateTime: java.time.OffsetDateTime, - val binary: ByteArray, - val additionalProperties: Map, + val date: java.time.LocalDate? = null, + val time: java.time.OffsetTime? = null, + val dateTime: java.time.OffsetDateTime? = null, + val binary: ByteArray? = null, + val additionalProperties: Map? = null, )" `; @@ -55,7 +55,7 @@ exports[`KotlinGenerator should render \`enum\` type (union type) 1`] = ` exports[`KotlinGenerator should render List type for collections 1`] = ` "data class CustomClass( - val arrayType: List, + val arrayType: List? = null, )" `; @@ -78,11 +78,11 @@ data class Address( val city: String, val state: String, val houseNumber: Double, - val marriage: Boolean, - val members: Any, + val marriage: Boolean? = null, + val members: Any? = null, val arrayType: List, - val otherModel: OtherModel, - val additionalProperties: Map, + val otherModel: OtherModel? = null, + val additionalProperties: Map? = null, )" `; @@ -91,7 +91,7 @@ exports[`KotlinGenerator should render models and their dependencies 2`] = ` data class OtherModel( - val streetName: String, - val additionalProperties: Map, + val streetName: String? = null, + val additionalProperties: Map? = null, )" `; diff --git a/test/generators/kotlin/constrainer/EnumConstrainer.spec.ts b/test/generators/kotlin/constrainer/EnumConstrainer.spec.ts index a2580ab409..c86e762313 100644 --- a/test/generators/kotlin/constrainer/EnumConstrainer.spec.ts +++ b/test/generators/kotlin/constrainer/EnumConstrainer.spec.ts @@ -11,10 +11,11 @@ import { } from '../../../../src/generators/kotlin/constrainer/EnumConstrainer'; describe('EnumConstrainer', () => { - const enumModel = new EnumModel('test', undefined, []); + const enumModel = new EnumModel('test', undefined, {}, []); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [] ); @@ -39,11 +40,13 @@ describe('EnumConstrainer', () => { test('should not contain duplicate keys', () => { const existingConstrainedEnumValueModel = new ConstrainedEnumValueModel( 'EMPTY', + 'return', 'return' ); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [existingConstrainedEnumValueModel] ); diff --git a/test/generators/kotlin/constrainer/PropertyKeyConstrainer.spec.ts b/test/generators/kotlin/constrainer/PropertyKeyConstrainer.spec.ts index eb42e26c29..faa6eb05c7 100644 --- a/test/generators/kotlin/constrainer/PropertyKeyConstrainer.spec.ts +++ b/test/generators/kotlin/constrainer/PropertyKeyConstrainer.spec.ts @@ -11,10 +11,11 @@ import { PropertyKeyConstraintOptions } from '../../../../src/generators/kotlin/constrainer/PropertyKeyConstrainer'; describe('PropertyKeyConstrainer', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); @@ -59,10 +60,11 @@ describe('PropertyKeyConstrainer', () => { expect(constrainedKey).toEqual('someWeirdValueExclamationQuotationHash_2'); }); test('should not contain duplicate properties', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); diff --git a/test/generators/kotlin/presets/__snapshots__/ConstraintsPreset.spec.ts.snap b/test/generators/kotlin/presets/__snapshots__/ConstraintsPreset.spec.ts.snap index cb10445098..e47ccb4e5d 100644 --- a/test/generators/kotlin/presets/__snapshots__/ConstraintsPreset.spec.ts.snap +++ b/test/generators/kotlin/presets/__snapshots__/ConstraintsPreset.spec.ts.snap @@ -9,10 +9,10 @@ exports[`KOTLIN_CONSTRAINTS_PRESET should render constraints annotations 1`] = ` @get:Max(99) val maxNumberProp: Double, @get:Size(min=2, max=3) - val arrayProp: List, + val arrayProp: List? = null, @get:Pattern(regexp=\\"^I_\\") @get:Size(min=3) - val stringProp: String, - val additionalProperties: Map, + val stringProp: String? = null, + val additionalProperties: Map? = null, )" `; diff --git a/test/generators/kotlin/presets/__snapshots__/DescriptionPreset.spec.ts.snap b/test/generators/kotlin/presets/__snapshots__/DescriptionPreset.spec.ts.snap index d8a4c26f41..22bbeb3e4c 100644 --- a/test/generators/kotlin/presets/__snapshots__/DescriptionPreset.spec.ts.snap +++ b/test/generators/kotlin/presets/__snapshots__/DescriptionPreset.spec.ts.snap @@ -11,8 +11,8 @@ exports[`KOTLIN_DESCRIPTION_PRESET should render description and examples for cl * {\\"prop\\":\\"value\\"} */ data class Clazz( - val prop: String, - val additionalProperties: Map, + val prop: String? = null, + val additionalProperties: Map? = null, )" `; diff --git a/test/generators/php/PhpConstrainer.spec.ts b/test/generators/php/PhpConstrainer.spec.ts index d5a4804ac6..86937943fa 100644 --- a/test/generators/php/PhpConstrainer.spec.ts +++ b/test/generators/php/PhpConstrainer.spec.ts @@ -20,7 +20,7 @@ import { PhpDependencyManager } from '../../../src/generators/php/PhpDependencyM describe('PhpConstrainer', () => { describe('ObjectModel', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedObjectModel('test', undefined, '', {}); + const model = new ConstrainedObjectModel('test', undefined, {}, '', {}); const type = PhpDefaultTypeMapping.Object({ constrainedModel: model, options: PhpGenerator.defaultOptions, @@ -31,10 +31,11 @@ describe('PhpConstrainer', () => { }); describe('Reference', () => { test('should render the constrained name as type', () => { - const refModel = new ConstrainedAnyModel('test', undefined, ''); + const refModel = new ConstrainedAnyModel('test', undefined, {}, ''); const model = new ConstrainedReferenceModel( 'test', undefined, + {}, '', refModel ); @@ -48,7 +49,7 @@ describe('PhpConstrainer', () => { }); describe('Any', () => { test('should render type', () => { - const model = new ConstrainedAnyModel('test', undefined, ''); + const model = new ConstrainedAnyModel('test', undefined, {}, ''); const type = PhpDefaultTypeMapping.Any({ constrainedModel: model, options: PhpGenerator.defaultOptions, @@ -59,7 +60,7 @@ describe('PhpConstrainer', () => { }); describe('Float', () => { test('should render type', () => { - const model = new ConstrainedFloatModel('test', undefined, ''); + const model = new ConstrainedFloatModel('test', undefined, {}, ''); const type = PhpDefaultTypeMapping.Float({ constrainedModel: model, options: PhpGenerator.defaultOptions, @@ -70,7 +71,7 @@ describe('PhpConstrainer', () => { }); describe('Integer', () => { test('should render type', () => { - const model = new ConstrainedIntegerModel('test', undefined, ''); + const model = new ConstrainedIntegerModel('test', undefined, {}, ''); const type = PhpDefaultTypeMapping.Integer({ constrainedModel: model, options: PhpGenerator.defaultOptions, @@ -81,7 +82,7 @@ describe('PhpConstrainer', () => { }); describe('String', () => { test('should render type', () => { - const model = new ConstrainedStringModel('test', undefined, ''); + const model = new ConstrainedStringModel('test', undefined, {}, ''); const type = PhpDefaultTypeMapping.String({ constrainedModel: model, options: PhpGenerator.defaultOptions, @@ -92,7 +93,7 @@ describe('PhpConstrainer', () => { }); describe('Boolean', () => { test('should render type', () => { - const model = new ConstrainedBooleanModel('test', undefined, ''); + const model = new ConstrainedBooleanModel('test', undefined, {}, ''); const type = PhpDefaultTypeMapping.Boolean({ constrainedModel: model, options: PhpGenerator.defaultOptions, @@ -107,10 +108,11 @@ describe('PhpConstrainer', () => { const stringModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const tupleValueModel = new ConstrainedTupleValueModel(0, stringModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel ]); const type = PhpDefaultTypeMapping.Tuple({ @@ -124,11 +126,12 @@ describe('PhpConstrainer', () => { const stringModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const tupleValueModel0 = new ConstrainedTupleValueModel(0, stringModel); const tupleValueModel1 = new ConstrainedTupleValueModel(1, stringModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel0, tupleValueModel1 ]); @@ -146,11 +149,13 @@ describe('PhpConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -165,7 +170,7 @@ describe('PhpConstrainer', () => { describe('Enum', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedEnumModel('Test', undefined, '', []); + const model = new ConstrainedEnumModel('Test', undefined, {}, '', []); const type = PhpDefaultTypeMapping.Enum({ constrainedModel: model, options: PhpGenerator.defaultOptions, @@ -177,8 +182,13 @@ describe('PhpConstrainer', () => { describe('Union', () => { test('should render type', () => { - const unionModel = new ConstrainedStringModel('test', undefined, 'str'); - const model = new ConstrainedUnionModel('test', undefined, '', [ + const unionModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ unionModel ]); const type = PhpDefaultTypeMapping.Union({ @@ -189,9 +199,19 @@ describe('PhpConstrainer', () => { expect(type).toEqual('mixed'); }); test('should render multiple types', () => { - const unionModel1 = new ConstrainedStringModel('test', undefined, 'str'); - const unionModel2 = new ConstrainedStringModel('test', undefined, 'str'); - const model = new ConstrainedUnionModel('test', undefined, '', [ + const unionModel1 = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); + const unionModel2 = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ unionModel1, unionModel2 ]); @@ -206,11 +226,17 @@ describe('PhpConstrainer', () => { describe('Dictionary', () => { test('should render type', () => { - const keyModel = new ConstrainedStringModel('test', undefined, 'str'); - const valueModel = new ConstrainedStringModel('test', undefined, 'str'); + const keyModel = new ConstrainedStringModel('test', undefined, {}, 'str'); + const valueModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel diff --git a/test/generators/php/PhpRenderer.spec.ts b/test/generators/php/PhpRenderer.spec.ts index 847371e44e..373545157f 100644 --- a/test/generators/php/PhpRenderer.spec.ts +++ b/test/generators/php/PhpRenderer.spec.ts @@ -11,7 +11,7 @@ describe('PhpRenderer', () => { PhpGenerator.defaultOptions, new PhpGenerator(), [], - new ConstrainedObjectModel('', undefined, '', {}), + new ConstrainedObjectModel('', undefined, {}, '', {}), new InputMetaModel(), new PhpDependencyManager(PhpGenerator.defaultOptions) ); diff --git a/test/generators/python/PythonConstrainer.spec.ts b/test/generators/python/PythonConstrainer.spec.ts index ac86be41b2..8a4f134587 100644 --- a/test/generators/python/PythonConstrainer.spec.ts +++ b/test/generators/python/PythonConstrainer.spec.ts @@ -25,7 +25,7 @@ describe('PythonConstrainer', () => { }; describe('ObjectModel', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedObjectModel('test', undefined, '', {}); + const model = new ConstrainedObjectModel('test', undefined, {}, '', {}); const type = PythonDefaultTypeMapping.Object({ constrainedModel: model, ...defaultOptions @@ -35,10 +35,11 @@ describe('PythonConstrainer', () => { }); describe('Reference', () => { test('should render the constrained name as type', () => { - const refModel = new ConstrainedAnyModel('test', undefined, ''); + const refModel = new ConstrainedAnyModel('test', undefined, {}, ''); const model = new ConstrainedReferenceModel( 'test', undefined, + {}, '', refModel ); @@ -51,7 +52,7 @@ describe('PythonConstrainer', () => { }); describe('Any', () => { test('should render type', () => { - const model = new ConstrainedAnyModel('test', undefined, ''); + const model = new ConstrainedAnyModel('test', undefined, {}, ''); const type = PythonDefaultTypeMapping.Any({ constrainedModel: model, ...defaultOptions @@ -61,7 +62,7 @@ describe('PythonConstrainer', () => { }); describe('Float', () => { test('should render type', () => { - const model = new ConstrainedFloatModel('test', undefined, ''); + const model = new ConstrainedFloatModel('test', undefined, {}, ''); const type = PythonDefaultTypeMapping.Float({ constrainedModel: model, ...defaultOptions @@ -71,7 +72,7 @@ describe('PythonConstrainer', () => { }); describe('Integer', () => { test('should render type', () => { - const model = new ConstrainedIntegerModel('test', undefined, ''); + const model = new ConstrainedIntegerModel('test', undefined, {}, ''); const type = PythonDefaultTypeMapping.Integer({ constrainedModel: model, ...defaultOptions @@ -81,7 +82,7 @@ describe('PythonConstrainer', () => { }); describe('String', () => { test('should render type', () => { - const model = new ConstrainedStringModel('test', undefined, ''); + const model = new ConstrainedStringModel('test', undefined, {}, ''); const type = PythonDefaultTypeMapping.String({ constrainedModel: model, ...defaultOptions @@ -91,7 +92,7 @@ describe('PythonConstrainer', () => { }); describe('Boolean', () => { test('should render type', () => { - const model = new ConstrainedBooleanModel('test', undefined, ''); + const model = new ConstrainedBooleanModel('test', undefined, {}, ''); const type = PythonDefaultTypeMapping.Boolean({ constrainedModel: model, ...defaultOptions @@ -102,9 +103,14 @@ describe('PythonConstrainer', () => { describe('Tuple', () => { test('should render type', () => { - const stringModel = new ConstrainedStringModel('test', undefined, 'str'); + const stringModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); const tupleValueModel = new ConstrainedTupleValueModel(0, stringModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel ]); const type = PythonDefaultTypeMapping.Tuple({ @@ -114,10 +120,15 @@ describe('PythonConstrainer', () => { expect(type).toEqual('tuple[str]'); }); test('should render multiple tuple types', () => { - const stringModel = new ConstrainedStringModel('test', undefined, 'str'); + const stringModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); const tupleValueModel0 = new ConstrainedTupleValueModel(0, stringModel); const tupleValueModel1 = new ConstrainedTupleValueModel(1, stringModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel0, tupleValueModel1 ]); @@ -131,10 +142,16 @@ describe('PythonConstrainer', () => { describe('Array', () => { test('should render type', () => { - const arrayModel = new ConstrainedStringModel('test', undefined, 'str'); + const arrayModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -148,7 +165,7 @@ describe('PythonConstrainer', () => { describe('Enum', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedEnumModel('Test', undefined, '', []); + const model = new ConstrainedEnumModel('Test', undefined, {}, '', []); const type = PythonDefaultTypeMapping.Enum({ constrainedModel: model, ...defaultOptions @@ -159,8 +176,13 @@ describe('PythonConstrainer', () => { describe('Union', () => { test('should render type', () => { - const unionModel = new ConstrainedStringModel('test', undefined, 'str'); - const model = new ConstrainedUnionModel('test', undefined, '', [ + const unionModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ unionModel ]); const type = PythonDefaultTypeMapping.Union({ @@ -170,9 +192,19 @@ describe('PythonConstrainer', () => { expect(type).toEqual('str'); }); test('should render multiple types', () => { - const unionModel1 = new ConstrainedStringModel('test', undefined, 'str'); - const unionModel2 = new ConstrainedStringModel('test', undefined, 'str'); - const model = new ConstrainedUnionModel('test', undefined, '', [ + const unionModel1 = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); + const unionModel2 = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ unionModel1, unionModel2 ]); @@ -186,11 +218,17 @@ describe('PythonConstrainer', () => { describe('Dictionary', () => { test('should render type', () => { - const keyModel = new ConstrainedStringModel('test', undefined, 'str'); - const valueModel = new ConstrainedStringModel('test', undefined, 'str'); + const keyModel = new ConstrainedStringModel('test', undefined, {}, 'str'); + const valueModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel diff --git a/test/generators/rust/RustConstrainer.spec.ts b/test/generators/rust/RustConstrainer.spec.ts index 22e8c6b8f8..9273e10c2c 100644 --- a/test/generators/rust/RustConstrainer.spec.ts +++ b/test/generators/rust/RustConstrainer.spec.ts @@ -32,7 +32,7 @@ describe('RustConstrainer', () => { }; describe('ObjectModel', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedObjectModel('test', undefined, '', {}); + const model = new ConstrainedObjectModel('test', undefined, {}, '', {}); const type = RustDefaultTypeMapping.Object({ constrainedModel: model, ...defaultOptions @@ -42,10 +42,11 @@ describe('RustConstrainer', () => { }); describe('Reference', () => { test('should render the constrained name as type', () => { - const refModel = new ConstrainedAnyModel('test', undefined, ''); + const refModel = new ConstrainedAnyModel('test', undefined, {}, ''); const model = new ConstrainedReferenceModel( 'test', undefined, + {}, '', refModel ); @@ -58,7 +59,7 @@ describe('RustConstrainer', () => { }); describe('Any', () => { test('should render type', () => { - const model = new ConstrainedAnyModel('test', undefined, ''); + const model = new ConstrainedAnyModel('test', undefined, {}, ''); const type = RustDefaultTypeMapping.Any({ constrainedModel: model, ...defaultOptions @@ -68,16 +69,17 @@ describe('RustConstrainer', () => { }); describe('Float', () => { test('should render type', () => { - const model = new ConstrainedFloatModel('test', undefined, ''); + const model = new ConstrainedFloatModel('test', undefined, {}, ''); const type = RustDefaultTypeMapping.Float({ constrainedModel: model, ...defaultOptions }); expect(type).toEqual('f64'); }); - test('should render f32 when original input has number format', () => { + test('should render f32 when format has number format', () => { const model = new ConstrainedFloatModel( 'test', + {}, { format: 'float32' }, '' ); @@ -90,16 +92,17 @@ describe('RustConstrainer', () => { }); describe('Integer', () => { test('should render type', () => { - const model = new ConstrainedIntegerModel('test', undefined, ''); + const model = new ConstrainedIntegerModel('test', undefined, {}, ''); const type = RustDefaultTypeMapping.Integer({ constrainedModel: model, ...defaultOptions }); expect(type).toEqual('i32'); }); - test('should render int when original input has integer format', () => { + test('should render int when format has integer format', () => { const model = new ConstrainedIntegerModel( 'test', + {}, { format: 'integer' }, '' ); @@ -109,9 +112,10 @@ describe('RustConstrainer', () => { }); expect(type).toEqual('i32'); }); - test('should render int when original input has int32 format', () => { + test('should render int when format has int32 format', () => { const model = new ConstrainedIntegerModel( 'test', + {}, { format: 'int32' }, '' ); @@ -121,17 +125,23 @@ describe('RustConstrainer', () => { }); expect(type).toEqual('i32'); }); - test('should render long when original input has long format', () => { - const model = new ConstrainedIntegerModel('test', { format: 'long' }, ''); + test('should render long when format has long format', () => { + const model = new ConstrainedIntegerModel( + 'test', + {}, + { format: 'long' }, + '' + ); const type = RustDefaultTypeMapping.Integer({ constrainedModel: model, ...defaultOptions }); expect(type).toEqual('i64'); }); - test('should render long when original input has int64 format', () => { + test('should render long when format has int64 format', () => { const model = new ConstrainedIntegerModel( 'test', + {}, { format: 'int64' }, '' ); @@ -144,16 +154,17 @@ describe('RustConstrainer', () => { }); describe('String', () => { test('should render type', () => { - const model = new ConstrainedStringModel('test', undefined, ''); + const model = new ConstrainedStringModel('test', undefined, {}, ''); const type = RustDefaultTypeMapping.String({ constrainedModel: model, ...defaultOptions }); expect(type).toEqual('String'); }); - test('should render Vec when original input has binary format', () => { + test('should render Vec when format has binary format', () => { const model = new ConstrainedStringModel( 'test', + {}, { format: 'binary' }, '' ); @@ -166,7 +177,7 @@ describe('RustConstrainer', () => { }); describe('Boolean', () => { test('should render type', () => { - const model = new ConstrainedBooleanModel('test', undefined, ''); + const model = new ConstrainedBooleanModel('test', undefined, {}, ''); const type = RustDefaultTypeMapping.Boolean({ constrainedModel: model, ...defaultOptions @@ -177,7 +188,7 @@ describe('RustConstrainer', () => { describe('Tuple', () => { test('should render type', () => { - const model = new ConstrainedTupleModel('Test', undefined, '', []); + const model = new ConstrainedTupleModel('Test', undefined, {}, '', []); const type = RustDefaultTypeMapping.Tuple({ constrainedModel: model, ...defaultOptions @@ -191,11 +202,13 @@ describe('RustConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -209,7 +222,7 @@ describe('RustConstrainer', () => { describe('Enum', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedEnumModel('Test', undefined, '', []); + const model = new ConstrainedEnumModel('Test', undefined, {}, '', []); const type = RustDefaultTypeMapping.Enum({ constrainedModel: model, ...defaultOptions @@ -220,7 +233,7 @@ describe('RustConstrainer', () => { describe('Union', () => { test('should render type', () => { - const model = new ConstrainedUnionModel('Test', undefined, '', []); + const model = new ConstrainedUnionModel('Test', undefined, {}, '', []); const type = RustDefaultTypeMapping.Union({ constrainedModel: model, ...defaultOptions @@ -231,15 +244,22 @@ describe('RustConstrainer', () => { describe('Dictionary', () => { test('should render type', () => { - const keyModel = new ConstrainedStringModel('test', undefined, 'String'); + const keyModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'String' + ); const valueModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel @@ -253,100 +273,122 @@ describe('RustConstrainer', () => { }); describe('derive', () => { - const i32Model = new ConstrainedIntegerModel('test', undefined, ''); + const i32Model = new ConstrainedIntegerModel('test', undefined, {}, ''); const i64Model = new ConstrainedIntegerModel( 'test', { format: 'int64' }, + {}, '' ); - const f64Model = new ConstrainedFloatModel('test', undefined, ''); + const f64Model = new ConstrainedFloatModel('test', undefined, {}, ''); const f32Model = new ConstrainedFloatModel( 'test', { format: 'float32' }, + {}, '' ); const dictModel = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', f32Model, f64Model ); - const anyModel = new ConstrainedAnyModel('test', undefined, ''); - const boolModel = new ConstrainedBooleanModel('test', undefined, ''); - const stringModel = new ConstrainedStringModel('test', undefined, 'String'); + const anyModel = new ConstrainedAnyModel('test', undefined, {}, ''); + const boolModel = new ConstrainedBooleanModel('test', undefined, {}, ''); + const stringModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'String' + ); describe('deriveCopy', () => { test('should return false for types that do not implement Copy trait', () => { const refModel = new ConstrainedReferenceModel( 'test', undefined, + {}, '', stringModel ); - const tupleModel = new ConstrainedTupleModel('test', undefined, '', [ - new ConstrainedTupleValueModel(0, stringModel), - new ConstrainedTupleValueModel(1, anyModel) - ]); - const unionModel = new ConstrainedUnionModel('test', undefined, '', [ - stringModel, - refModel, - dictModel, - anyModel, - tupleModel - ]); - const enumModel = new ConstrainedEnumModel('test', undefined, '', [ - new ConstrainedEnumValueModel('one', stringModel), - new ConstrainedEnumValueModel('two', stringModel) + const tupleModel = new ConstrainedTupleModel( + 'test', + undefined, + {}, + '', + [ + new ConstrainedTupleValueModel(0, stringModel), + new ConstrainedTupleValueModel(1, anyModel) + ] + ); + const unionModel = new ConstrainedUnionModel( + 'test', + undefined, + {}, + '', + [stringModel, refModel, dictModel, anyModel, tupleModel] + ); + const enumModel = new ConstrainedEnumModel('test', undefined, {}, '', [ + new ConstrainedEnumValueModel('one', stringModel, {}), + new ConstrainedEnumValueModel('two', stringModel, {}) ]); - const objectModel = new ConstrainedObjectModel('test', undefined, '', { - stringProp: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - stringModel - ), - refProp: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - refModel - ), - dictProp: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - dictModel - ), - anyProp: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - anyModel - ), - tupleModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - tupleModel - ), - unionModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - unionModel - ), - enumModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - enumModel - ) - }); + const objectModel = new ConstrainedObjectModel( + 'test', + undefined, + {}, + '', + { + stringProp: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + stringModel + ), + refProp: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + refModel + ), + dictProp: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + dictModel + ), + anyProp: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + anyModel + ), + tupleModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + tupleModel + ), + unionModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + unionModel + ), + enumModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + enumModel + ) + } + ); const arrayModel = new ConstrainedArrayModel( 'test', undefined, + {}, '', refModel ); @@ -363,89 +405,115 @@ describe('RustConstrainer', () => { }); test('should return true for types that implement Copy trait', () => { - const i32Model = new ConstrainedIntegerModel('test', undefined, ''); + const i32Model = new ConstrainedIntegerModel('test', undefined, {}, ''); const i64Model = new ConstrainedIntegerModel( 'test', { format: 'int64' }, + {}, '' ); - const f64Model = new ConstrainedFloatModel('test', undefined, ''); + const f64Model = new ConstrainedFloatModel('test', undefined, {}, ''); const f32Model = new ConstrainedFloatModel( 'test', { format: 'float32' }, + {}, '' ); - const boolModel = new ConstrainedBooleanModel('test', undefined, ''); - const tupleModel = new ConstrainedTupleModel('test', undefined, '', [ - new ConstrainedTupleValueModel(0, boolModel), - new ConstrainedTupleValueModel(1, boolModel) - ]); + const boolModel = new ConstrainedBooleanModel( + 'test', + undefined, + {}, + '' + ); + const tupleModel = new ConstrainedTupleModel( + 'test', + undefined, + {}, + '', + [ + new ConstrainedTupleValueModel(0, boolModel), + new ConstrainedTupleValueModel(1, boolModel) + ] + ); const arrayModel = new ConstrainedArrayModel( 'test', undefined, + {}, '', i32Model ); - const enumModel = new ConstrainedEnumModel('test', undefined, '', [ - new ConstrainedEnumValueModel('one', i32Model), - new ConstrainedEnumValueModel('two', i32Model) - ]); - - const unionModel = new ConstrainedUnionModel('test', undefined, '', [ - i32Model, - i64Model, - f64Model, - f32Model, - boolModel, - tupleModel, - arrayModel, - enumModel + const enumModel = new ConstrainedEnumModel('test', undefined, {}, '', [ + new ConstrainedEnumValueModel('one', i32Model, {}), + new ConstrainedEnumValueModel('two', i32Model, {}) ]); - const objectModel = new ConstrainedObjectModel('test', undefined, '', { - i32Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i32Model - ), - i64Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i64Model - ), - f32Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - f32Model - ), - f64Mode: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - f64Model - ), - tupleModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - tupleModel - ), - unionModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - unionModel - ), - enumModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, + const unionModel = new ConstrainedUnionModel( + 'test', + undefined, + {}, + '', + [ + i32Model, + i64Model, + f64Model, + f32Model, + boolModel, + tupleModel, + arrayModel, enumModel - ) - }); + ] + ); + + const objectModel = new ConstrainedObjectModel( + 'test', + undefined, + {}, + '', + { + i32Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i32Model + ), + i64Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i64Model + ), + f32Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + f32Model + ), + f64Mode: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + f64Model + ), + tupleModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + tupleModel + ), + unionModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + unionModel + ), + enumModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + enumModel + ) + } + ); expect(deriveCopy(i32Model)).toEqual(true); expect(deriveCopy(i64Model)).toEqual(true); @@ -469,74 +537,86 @@ describe('RustConstrainer', () => { }); test('should return true for types that implement Hash trait', () => { - const tupleModel = new ConstrainedTupleModel('test', undefined, '', [ - new ConstrainedTupleValueModel(0, boolModel), - new ConstrainedTupleValueModel(1, boolModel) - ]); + const tupleModel = new ConstrainedTupleModel( + 'test', + undefined, + {}, + '', + [ + new ConstrainedTupleValueModel(0, boolModel), + new ConstrainedTupleValueModel(1, boolModel) + ] + ); const arrayModel = new ConstrainedArrayModel( 'test', undefined, + {}, '', i32Model ); - const enumModel = new ConstrainedEnumModel('test', undefined, '', [ - new ConstrainedEnumValueModel('one', i32Model), - new ConstrainedEnumValueModel('two', i32Model) + const enumModel = new ConstrainedEnumModel('test', undefined, {}, '', [ + new ConstrainedEnumValueModel('one', i32Model, {}), + new ConstrainedEnumValueModel('two', i32Model, {}) ]); - const unionModel = new ConstrainedUnionModel('test', undefined, '', [ - i32Model, - i64Model, - boolModel, - tupleModel, - arrayModel, - enumModel - ]); + const unionModel = new ConstrainedUnionModel( + 'test', + undefined, + {}, + '', + [i32Model, i64Model, boolModel, tupleModel, arrayModel, enumModel] + ); - const objectModel = new ConstrainedObjectModel('test', undefined, '', { - stringProp: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - stringModel - ), - i32Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i32Model - ), - i64Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i64Model - ), - boolProp: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - boolModel - ), - tupleModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - tupleModel - ), - unionModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - unionModel - ), - enumModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - enumModel - ) - }); + const objectModel = new ConstrainedObjectModel( + 'test', + undefined, + {}, + '', + { + stringProp: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + stringModel + ), + i32Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i32Model + ), + i64Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i64Model + ), + boolProp: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + boolModel + ), + tupleModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + tupleModel + ), + unionModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + unionModel + ), + enumModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + enumModel + ) + } + ); expect(deriveHash(stringModel)).toEqual(true); expect(deriveHash(i32Model)).toEqual(true); expect(deriveHash(i64Model)).toEqual(true); @@ -557,73 +637,85 @@ describe('RustConstrainer', () => { }); test('should return true for types that implement Eq trait', () => { - const tupleModel = new ConstrainedTupleModel('test', undefined, '', [ - new ConstrainedTupleValueModel(0, boolModel), - new ConstrainedTupleValueModel(1, boolModel) - ]); + const tupleModel = new ConstrainedTupleModel( + 'test', + undefined, + {}, + '', + [ + new ConstrainedTupleValueModel(0, boolModel), + new ConstrainedTupleValueModel(1, boolModel) + ] + ); const arrayModel = new ConstrainedArrayModel( 'test', undefined, + {}, '', i32Model ); - const enumModel = new ConstrainedEnumModel('test', undefined, '', [ - new ConstrainedEnumValueModel('one', i32Model), - new ConstrainedEnumValueModel('two', i32Model) + const enumModel = new ConstrainedEnumModel('test', undefined, {}, '', [ + new ConstrainedEnumValueModel('one', i32Model, {}), + new ConstrainedEnumValueModel('two', i32Model, {}) ]); - const unionModel = new ConstrainedUnionModel('test', undefined, '', [ - i32Model, - i64Model, - boolModel, - tupleModel, - arrayModel, - enumModel - ]); - const objectModel = new ConstrainedObjectModel('test', undefined, '', { - stringProp: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - stringModel - ), - i32Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i32Model - ), - i64Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i64Model - ), - boolProp: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - boolModel - ), - tupleModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - tupleModel - ), - unionModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - unionModel - ), - enumModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - enumModel - ) - }); + const unionModel = new ConstrainedUnionModel( + 'test', + undefined, + {}, + '', + [i32Model, i64Model, boolModel, tupleModel, arrayModel, enumModel] + ); + const objectModel = new ConstrainedObjectModel( + 'test', + undefined, + {}, + '', + { + stringProp: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + stringModel + ), + i32Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i32Model + ), + i64Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i64Model + ), + boolProp: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + boolModel + ), + tupleModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + tupleModel + ), + unionModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + unionModel + ), + enumModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + enumModel + ) + } + ); expect(deriveEq(stringModel)).toEqual(true); expect(deriveEq(i32Model)).toEqual(true); expect(deriveEq(i64Model)).toEqual(true); diff --git a/test/generators/rust/RustGenerator.spec.ts b/test/generators/rust/RustGenerator.spec.ts index 6fdb7a6bee..74db2acfb3 100644 --- a/test/generators/rust/RustGenerator.spec.ts +++ b/test/generators/rust/RustGenerator.spec.ts @@ -146,7 +146,7 @@ describe('RustGenerator', () => { // }, }; - test('should render `struct` type ', async () => { + test('should render `struct` type', async () => { const models = await generator.generate(doc); expect(models).toHaveLength(3); // Adress, TupleType, and Member models should be generated expect(models[0].result).toMatchSnapshot(); // Address model @@ -219,7 +219,7 @@ describe('RustGenerator', () => { discriminator: 'petType', properties: { petType: { - $id: 'PetType', + title: 'PetType', type: 'string' }, name: { diff --git a/test/generators/rust/RustRenderer.spec.ts b/test/generators/rust/RustRenderer.spec.ts index 153ea95be9..88cd4ef2e1 100644 --- a/test/generators/rust/RustRenderer.spec.ts +++ b/test/generators/rust/RustRenderer.spec.ts @@ -27,8 +27,9 @@ describe('RustRenderer', () => { RustGenerator.defaultOptions, new RustGenerator(), [], - new ConstrainedObjectModel('', undefined, '', {}), - new InputMetaModel() + new ConstrainedObjectModel('', undefined, {}, '', {}), + new InputMetaModel(), + undefined as never ); }); @@ -39,23 +40,31 @@ describe('RustRenderer', () => { }); describe('renderMacro()', () => { - const i32Model = new ConstrainedIntegerModel('test', undefined, ''); + const i32Model = new ConstrainedIntegerModel('test', undefined, {}, ''); const i64Model = new ConstrainedIntegerModel( 'test', { format: 'int64' }, + {}, '' ); - const boolModel = new ConstrainedBooleanModel('test', undefined, ''); - const stringModel = new ConstrainedStringModel('test', undefined, 'String'); - const f64Model = new ConstrainedFloatModel('test', undefined, ''); + const boolModel = new ConstrainedBooleanModel('test', undefined, {}, ''); + const stringModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'String' + ); + const f64Model = new ConstrainedFloatModel('test', undefined, {}, ''); const f32Model = new ConstrainedFloatModel( 'test', { format: 'float32' }, + {}, '' ); const dictModel = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', i32Model, i64Model @@ -63,28 +72,30 @@ describe('RustRenderer', () => { const floatDictModel = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', f32Model, f64Model ); - const anyModel = new ConstrainedAnyModel('test', undefined, ''); + const anyModel = new ConstrainedAnyModel('test', undefined, {}, ''); test('Should derive all traits', () => { - const tupleModel = new ConstrainedTupleModel('test', undefined, '', [ + const tupleModel = new ConstrainedTupleModel('test', undefined, {}, '', [ new ConstrainedTupleValueModel(0, boolModel), new ConstrainedTupleValueModel(1, boolModel) ]); const arrayModel = new ConstrainedArrayModel( 'test', undefined, + {}, '', i32Model ); - const enumModel = new ConstrainedEnumModel('test', undefined, '', [ - new ConstrainedEnumValueModel('one', i32Model), - new ConstrainedEnumValueModel('two', i32Model) + const enumModel = new ConstrainedEnumModel('test', undefined, {}, '', [ + new ConstrainedEnumValueModel('one', i32Model, {}), + new ConstrainedEnumValueModel('two', i32Model, {}) ]); - const unionModel = new ConstrainedUnionModel('test', undefined, '', [ + const unionModel = new ConstrainedUnionModel('test', undefined, {}, '', [ i32Model, i64Model, boolModel, @@ -92,44 +103,50 @@ describe('RustRenderer', () => { arrayModel, enumModel ]); - const objectModel = new ConstrainedObjectModel('test', undefined, '', { - i32Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i32Model - ), - i64Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i64Model - ), - boolProp: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - boolModel - ), - tupleModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - tupleModel - ), - unionModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - unionModel - ), - enumModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - enumModel - ) - }); + const objectModel = new ConstrainedObjectModel( + 'test', + undefined, + {}, + '', + { + i32Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i32Model + ), + i64Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i64Model + ), + boolProp: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + boolModel + ), + tupleModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + tupleModel + ), + unionModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + unionModel + ), + enumModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + enumModel + ) + } + ); expect(renderer.renderMacro(arrayModel)).toEqual( '#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]' @@ -144,21 +161,22 @@ describe('RustRenderer', () => { test('Should not derive Copy trait', () => { // String does not implement Copy - const tupleModel = new ConstrainedTupleModel('test', undefined, '', [ + const tupleModel = new ConstrainedTupleModel('test', undefined, {}, '', [ new ConstrainedTupleValueModel(0, stringModel), new ConstrainedTupleValueModel(1, stringModel) ]); const arrayModel = new ConstrainedArrayModel( 'test', undefined, + {}, '', stringModel ); - const enumModel = new ConstrainedEnumModel('test', undefined, '', [ - new ConstrainedEnumValueModel('one', stringModel), - new ConstrainedEnumValueModel('two', stringModel) + const enumModel = new ConstrainedEnumModel('test', undefined, {}, '', [ + new ConstrainedEnumValueModel('one', stringModel, {}), + new ConstrainedEnumValueModel('two', stringModel, {}) ]); - const unionModel = new ConstrainedUnionModel('test', undefined, '', [ + const unionModel = new ConstrainedUnionModel('test', undefined, {}, '', [ stringModel, i32Model, i64Model, @@ -167,44 +185,50 @@ describe('RustRenderer', () => { arrayModel, enumModel ]); - const objectModel = new ConstrainedObjectModel('test', undefined, '', { - i32Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i32Model - ), - i64Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i64Model - ), - boolProp: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - boolModel - ), - tupleModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - tupleModel - ), - unionModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - unionModel - ), - enumModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - enumModel - ) - }); + const objectModel = new ConstrainedObjectModel( + 'test', + undefined, + {}, + '', + { + i32Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i32Model + ), + i64Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i64Model + ), + boolProp: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + boolModel + ), + tupleModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + tupleModel + ), + unionModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + unionModel + ), + enumModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + enumModel + ) + } + ); expect(renderer.renderMacro(arrayModel)).toEqual( '#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]' @@ -218,21 +242,22 @@ describe('RustRenderer', () => { }); test('Should not derive Hash, Eq, Ord traits', () => { // float does not implement Hash, Eq, Ord - const tupleModel = new ConstrainedTupleModel('test', undefined, '', [ + const tupleModel = new ConstrainedTupleModel('test', undefined, {}, '', [ new ConstrainedTupleValueModel(0, f32Model), new ConstrainedTupleValueModel(1, f64Model) ]); const arrayModel = new ConstrainedArrayModel( 'test', undefined, + {}, '', f64Model ); - const enumModel = new ConstrainedEnumModel('test', undefined, '', [ - new ConstrainedEnumValueModel('one', f64Model), - new ConstrainedEnumValueModel('two', f32Model) + const enumModel = new ConstrainedEnumModel('test', undefined, {}, '', [ + new ConstrainedEnumValueModel('one', f64Model, {}), + new ConstrainedEnumValueModel('two', f32Model, {}) ]); - const unionModel = new ConstrainedUnionModel('test', undefined, '', [ + const unionModel = new ConstrainedUnionModel('test', undefined, {}, '', [ i32Model, i64Model, boolModel, @@ -240,44 +265,50 @@ describe('RustRenderer', () => { arrayModel, enumModel ]); - const objectModel = new ConstrainedObjectModel('test', undefined, '', { - i32Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i32Model - ), - i64Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i64Model - ), - boolProp: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - boolModel - ), - tupleModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - tupleModel - ), - unionModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - unionModel - ), - enumModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - enumModel - ) - }); + const objectModel = new ConstrainedObjectModel( + 'test', + undefined, + {}, + '', + { + i32Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i32Model + ), + i64Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i64Model + ), + boolProp: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + boolModel + ), + tupleModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + tupleModel + ), + unionModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + unionModel + ), + enumModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + enumModel + ) + } + ); expect(renderer.renderMacro(arrayModel)).toEqual( '#[derive(Clone, Copy, Debug, Deserialize, PartialEq, PartialOrd, Serialize)]' @@ -291,21 +322,22 @@ describe('RustRenderer', () => { }); test('Should not derive Hash, Copy, PartialOrd, Ord traits', () => { // dict (HashMap) does not implement Copy, PartialOrd, Ord - const tupleModel = new ConstrainedTupleModel('test', undefined, '', [ + const tupleModel = new ConstrainedTupleModel('test', undefined, {}, '', [ new ConstrainedTupleValueModel(0, boolModel), new ConstrainedTupleValueModel(1, boolModel) ]); const arrayModel = new ConstrainedArrayModel( 'test', undefined, + {}, '', dictModel ); - const enumModel = new ConstrainedEnumModel('test', undefined, '', [ - new ConstrainedEnumValueModel('one', i32Model), - new ConstrainedEnumValueModel('two', dictModel) + const enumModel = new ConstrainedEnumModel('test', undefined, {}, '', [ + new ConstrainedEnumValueModel('one', i32Model, {}), + new ConstrainedEnumValueModel('two', dictModel, {}) ]); - const unionModel = new ConstrainedUnionModel('test', undefined, '', [ + const unionModel = new ConstrainedUnionModel('test', undefined, {}, '', [ i32Model, i64Model, boolModel, @@ -313,44 +345,50 @@ describe('RustRenderer', () => { arrayModel, enumModel ]); - const objectModel = new ConstrainedObjectModel('test', undefined, '', { - i32Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i32Model - ), - i64Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i64Model - ), - boolProp: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - boolModel - ), - tupleModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - tupleModel - ), - unionModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - unionModel - ), - enumModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - enumModel - ) - }); + const objectModel = new ConstrainedObjectModel( + 'test', + undefined, + {}, + '', + { + i32Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i32Model + ), + i64Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i64Model + ), + boolProp: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + boolModel + ), + tupleModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + tupleModel + ), + unionModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + unionModel + ), + enumModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + enumModel + ) + } + ); expect(renderer.renderMacro(arrayModel)).toEqual( '#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]' @@ -364,21 +402,22 @@ describe('RustRenderer', () => { }); test('Should not derive Hash, Copy, PartialOrd, Ord, PartialEq, traits', () => { // dict (HashMap) + float does not implement Copy, PartialOrd, Ord, Eq - const tupleModel = new ConstrainedTupleModel('test', undefined, '', [ + const tupleModel = new ConstrainedTupleModel('test', undefined, {}, '', [ new ConstrainedTupleValueModel(0, boolModel), new ConstrainedTupleValueModel(1, f32Model) ]); const arrayModel = new ConstrainedArrayModel( 'test', undefined, + {}, '', floatDictModel ); - const enumModel = new ConstrainedEnumModel('test', undefined, '', [ - new ConstrainedEnumValueModel('one', f32Model), - new ConstrainedEnumValueModel('two', dictModel) + const enumModel = new ConstrainedEnumModel('test', undefined, {}, '', [ + new ConstrainedEnumValueModel('one', f32Model, {}), + new ConstrainedEnumValueModel('two', dictModel, {}) ]); - const unionModel = new ConstrainedUnionModel('test', undefined, '', [ + const unionModel = new ConstrainedUnionModel('test', undefined, {}, '', [ i32Model, i64Model, boolModel, @@ -386,44 +425,50 @@ describe('RustRenderer', () => { arrayModel, enumModel ]); - const objectModel = new ConstrainedObjectModel('test', undefined, '', { - i32Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i32Model - ), - i64Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i64Model - ), - boolProp: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - boolModel - ), - tupleModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - tupleModel - ), - unionModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - unionModel - ), - enumModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - enumModel - ) - }); + const objectModel = new ConstrainedObjectModel( + 'test', + undefined, + {}, + '', + { + i32Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i32Model + ), + i64Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i64Model + ), + boolProp: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + boolModel + ), + tupleModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + tupleModel + ), + unionModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + unionModel + ), + enumModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + enumModel + ) + } + ); expect(renderer.renderMacro(arrayModel)).toEqual( '#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]' @@ -437,21 +482,22 @@ describe('RustRenderer', () => { }); test('Should not derive Hash, Copy, PartialOrd, Ord, PartialEq, Eq', () => { // any prevents those traits - const tupleModel = new ConstrainedTupleModel('test', undefined, '', [ + const tupleModel = new ConstrainedTupleModel('test', undefined, {}, '', [ new ConstrainedTupleValueModel(0, boolModel), new ConstrainedTupleValueModel(1, anyModel) ]); const arrayModel = new ConstrainedArrayModel( 'test', undefined, + {}, '', anyModel ); - const enumModel = new ConstrainedEnumModel('test', undefined, '', [ - new ConstrainedEnumValueModel('one', i32Model), - new ConstrainedEnumValueModel('two', anyModel) + const enumModel = new ConstrainedEnumModel('test', undefined, {}, '', [ + new ConstrainedEnumValueModel('one', i32Model, {}), + new ConstrainedEnumValueModel('two', anyModel, {}) ]); - const unionModel = new ConstrainedUnionModel('test', undefined, '', [ + const unionModel = new ConstrainedUnionModel('test', undefined, {}, '', [ i32Model, i64Model, boolModel, @@ -459,44 +505,50 @@ describe('RustRenderer', () => { arrayModel, enumModel ]); - const objectModel = new ConstrainedObjectModel('test', undefined, '', { - i32Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i32Model - ), - i64Model: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - i64Model - ), - boolProp: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - boolModel - ), - tupleModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - tupleModel - ), - unionModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - unionModel - ), - enumModel: new ConstrainedObjectPropertyModel( - 'test', - 'test', - true, - enumModel - ) - }); + const objectModel = new ConstrainedObjectModel( + 'test', + undefined, + {}, + '', + { + i32Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i32Model + ), + i64Model: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + i64Model + ), + boolProp: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + boolModel + ), + tupleModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + tupleModel + ), + unionModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + unionModel + ), + enumModel: new ConstrainedObjectPropertyModel( + 'test', + 'test', + true, + enumModel + ) + } + ); expect(renderer.renderMacro(arrayModel)).toEqual( '#[derive(Clone, Debug, Deserialize, Serialize)]' diff --git a/test/generators/rust/__snapshots__/RustGenerator.spec.ts.snap b/test/generators/rust/__snapshots__/RustGenerator.spec.ts.snap index 54d570282b..bcd22cae6a 100644 --- a/test/generators/rust/__snapshots__/RustGenerator.spec.ts.snap +++ b/test/generators/rust/__snapshots__/RustGenerator.spec.ts.snap @@ -199,6 +199,22 @@ pub use self::numbers::*;" `; exports[`RustGenerator Struct & Complete Models Should render complete models 1`] = ` +"// Members represents a union of types: String, f64, bool +#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] +#[serde(untagged)] +pub enum Members { + #[serde(rename=\\"MembersOneOf0\\")] + MembersOneOf0(String), + #[serde(rename=\\"MembersOneOf1\\")] + MembersOneOf1(f64), + #[serde(rename=\\"MembersOneOf2\\")] + MembersOneOf2(bool), +} + +" +`; + +exports[`RustGenerator Struct & Complete Models Should render complete models 2`] = ` "// Address represents a Address model. #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] pub struct Address { @@ -224,7 +240,15 @@ pub struct Address { " `; -exports[`RustGenerator Struct & Complete Models Should render complete models 2`] = ` +exports[`RustGenerator Struct & Complete Models Should render complete models 3`] = ` +"// TupleType represents a TupleType model. +#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] +pub struct TupleType(String, f64); + +" +`; + +exports[`RustGenerator Struct & Complete Models should render \`struct\` type 1`] = ` "// Members represents a union of types: String, f64, bool #[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] #[serde(untagged)] @@ -240,15 +264,7 @@ pub enum Members { " `; -exports[`RustGenerator Struct & Complete Models Should render complete models 3`] = ` -"// TupleType represents a TupleType model. -#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] -pub struct TupleType(String, f64); - -" -`; - -exports[`RustGenerator Struct & Complete Models should render \`struct\` type 1`] = ` +exports[`RustGenerator Struct & Complete Models should render \`struct\` type 2`] = ` "// Address represents a Address model. #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] pub struct Address { @@ -274,23 +290,7 @@ pub struct Address { " `; -exports[`RustGenerator Struct & Complete Models should render \`struct\` type 2`] = ` -"// Members represents a union of types: String, f64, bool -#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] -#[serde(untagged)] -pub enum Members { - #[serde(rename=\\"MembersOneOf0\\")] - MembersOneOf0(String), - #[serde(rename=\\"MembersOneOf1\\")] - MembersOneOf1(f64), - #[serde(rename=\\"MembersOneOf2\\")] - MembersOneOf2(bool), -} - -" -`; - -exports[`RustGenerator Struct & Complete Models should render \`struct\` type 3`] = ` +exports[`RustGenerator Struct & Complete Models should render \`struct\` type 3`] = ` "// TupleType represents a TupleType model. #[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] pub struct TupleType(String, f64); diff --git a/test/generators/rust/constrainer/EnumConstrainer.spec.ts b/test/generators/rust/constrainer/EnumConstrainer.spec.ts index 7aec65e61b..7c70f115ad 100644 --- a/test/generators/rust/constrainer/EnumConstrainer.spec.ts +++ b/test/generators/rust/constrainer/EnumConstrainer.spec.ts @@ -8,10 +8,11 @@ import { import { RESERVED_RUST_KEYWORDS } from '../../../../src/generators/rust/Constants'; import { defaultEnumKeyConstraints } from '../../../../src/generators/rust/constrainer/EnumConstrainer'; describe('EnumConstrainer', () => { - const enumModel = new EnumModel('test', undefined, []); + const enumModel = new EnumModel('test', undefined, {}, []); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [] ); @@ -36,11 +37,13 @@ describe('EnumConstrainer', () => { test('should not contain duplicate keys', () => { const existingConstrainedEnumValueModel = new ConstrainedEnumValueModel( 'EMPTY', + 'return', 'return' ); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [existingConstrainedEnumValueModel] ); diff --git a/test/generators/rust/constrainer/PropertyKeyConstrainer.spec.ts b/test/generators/rust/constrainer/PropertyKeyConstrainer.spec.ts index 8d2702f3ef..81ffc61575 100644 --- a/test/generators/rust/constrainer/PropertyKeyConstrainer.spec.ts +++ b/test/generators/rust/constrainer/PropertyKeyConstrainer.spec.ts @@ -6,10 +6,11 @@ import { ObjectPropertyModel } from '../../../../src'; describe('PropertyKeyConstrainer', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); @@ -53,10 +54,11 @@ describe('PropertyKeyConstrainer', () => { ); }); test('should not contain duplicate properties', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); diff --git a/test/generators/rust/presets/CommonPreset.spec.ts b/test/generators/rust/presets/CommonPreset.spec.ts index 238bbdd564..5e77ae659c 100644 --- a/test/generators/rust/presets/CommonPreset.spec.ts +++ b/test/generators/rust/presets/CommonPreset.spec.ts @@ -143,10 +143,9 @@ describe('RUST_COMMON_PRESET', () => { }; const models = await generator.generate(doc); - expect(models).toHaveLength(3); + expect(models).toHaveLength(2); expect(models[0].result).toMatchSnapshot(); expect(models[1].result).toMatchSnapshot(); - expect(models[2].result).toMatchSnapshot(); }); }); diff --git a/test/generators/rust/presets/__snapshots__/CommonPreset.spec.ts.snap b/test/generators/rust/presets/__snapshots__/CommonPreset.spec.ts.snap index a171cefa0b..a1d7e35eb8 100644 --- a/test/generators/rust/presets/__snapshots__/CommonPreset.spec.ts.snap +++ b/test/generators/rust/presets/__snapshots__/CommonPreset.spec.ts.snap @@ -1,30 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`RUST_COMMON_PRESET Enum should render \`enum\` of union type with Default implementation of integer type 1`] = ` -"// Address represents a Address model. -#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] -pub struct Address { - #[serde(rename=\\"members\\")] - pub members: Box, - #[serde(rename=\\"optional_members\\", skip_serializing_if = \\"Option::is_none\\")] - pub optional_members: Option>, - #[serde(rename=\\"additionalProperties\\", skip_serializing_if = \\"Option::is_none\\")] - pub additional_properties: Option>, -} - -impl Address { - pub fn new(members: crate::Members, optional_members: Option, additional_properties: Option>) -> Address { - Address { - members: Box::new(members), - optional_members: optional_members.map(Box::new), - additional_properties, - } - } -} -" -`; - -exports[`RUST_COMMON_PRESET Enum should render \`enum\` of union type with Default implementation of integer type 2`] = ` "// Members represents a union of types: String, f64, bool #[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] #[serde(untagged)] @@ -40,7 +16,7 @@ pub enum Members { " `; -exports[`RUST_COMMON_PRESET Enum should render \`enum\` of union type with Default implementation of integer type 3`] = ` +exports[`RUST_COMMON_PRESET Enum should render \`enum\` of union type with Default implementation of integer type 2`] = ` "// OptionalMembers represents a union of types: String, f64, bool #[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] #[serde(untagged)] @@ -56,7 +32,7 @@ pub enum OptionalMembers { " `; -exports[`RUST_COMMON_PRESET Enum should render \`enum\` of union type with Default implementation of string type 1`] = ` +exports[`RUST_COMMON_PRESET Enum should render \`enum\` of union type with Default implementation of integer type 3`] = ` "// Address represents a Address model. #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] pub struct Address { @@ -80,7 +56,7 @@ impl Address { " `; -exports[`RUST_COMMON_PRESET Enum should render \`enum\` of union type with Default implementation of string type 2`] = ` +exports[`RUST_COMMON_PRESET Enum should render \`enum\` of union type with Default implementation of string type 1`] = ` "// Members represents a union of types: String, f64, bool #[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] #[serde(untagged)] @@ -96,7 +72,7 @@ pub enum Members { " `; -exports[`RUST_COMMON_PRESET Enum should render \`enum\` of union type with Default implementation of string type 3`] = ` +exports[`RUST_COMMON_PRESET Enum should render \`enum\` of union type with Default implementation of string type 2`] = ` "// OptionalMembers represents a union of types: String, f64, bool #[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] #[serde(untagged)] @@ -112,6 +88,30 @@ pub enum OptionalMembers { " `; +exports[`RUST_COMMON_PRESET Enum should render \`enum\` of union type with Default implementation of string type 3`] = ` +"// Address represents a Address model. +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct Address { + #[serde(rename=\\"members\\")] + pub members: Box, + #[serde(rename=\\"optional_members\\", skip_serializing_if = \\"Option::is_none\\")] + pub optional_members: Option>, + #[serde(rename=\\"additionalProperties\\", skip_serializing_if = \\"Option::is_none\\")] + pub additional_properties: Option>, +} + +impl Address { + pub fn new(members: crate::Members, optional_members: Option, additional_properties: Option>) -> Address { + Address { + members: Box::new(members), + optional_members: optional_members.map(Box::new), + additional_properties, + } + } +} +" +`; + exports[`RUST_COMMON_PRESET Enum should render \`enum\` with mixed types (union type) and Default implementation 1`] = ` "// Things represents a Things model. #[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] @@ -197,13 +197,13 @@ exports[`RUST_COMMON_PRESET Enum should render reserved union for dict array 1`] #[derive(Clone, Debug, Deserialize, Serialize)] pub struct Class { #[serde(rename=\\"students\\")] - pub students: Vec, + pub students: Vec, #[serde(rename=\\"additionalProperties\\", skip_serializing_if = \\"Option::is_none\\")] pub additional_properties: Option>, } impl Class { - pub fn new(students: Vec, additional_properties: Option>) -> Class { + pub fn new(students: Vec, additional_properties: Option>) -> Class { Class { students, additional_properties, @@ -214,20 +214,6 @@ impl Class { `; exports[`RUST_COMMON_PRESET Enum should render reserved union for dict array 2`] = ` -"// Union represents a union of types: Student, serde_json::Value -#[derive(Clone, Debug, Deserialize, Serialize)] -#[serde(untagged)] -pub enum Union { - #[serde(rename=\\"Student\\")] - Student(crate::Student), - #[serde(rename=\\"Undefined\\")] - Undefined(serde_json::Value), -} - -" -`; - -exports[`RUST_COMMON_PRESET Enum should render reserved union for dict array 3`] = ` "// Student represents a Student model. #[derive(Clone, Debug, Deserialize, Serialize)] pub struct Student { @@ -252,6 +238,22 @@ impl Student { `; exports[`RUST_COMMON_PRESET Struct & Complete Models should render \`struct\` type with all implementations 1`] = ` +"// Members represents a union of types: String, f64, bool +#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] +#[serde(untagged)] +pub enum Members { + #[serde(rename=\\"MembersOneOf0\\")] + MembersOneOf0(String), + #[serde(rename=\\"MembersOneOf1\\")] + MembersOneOf1(f64), + #[serde(rename=\\"MembersOneOf2\\")] + MembersOneOf2(bool), +} + +" +`; + +exports[`RUST_COMMON_PRESET Struct & Complete Models should render \`struct\` type with all implementations 2`] = ` "// Address represents a Address model. #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] pub struct Address { @@ -293,22 +295,6 @@ impl Address { " `; -exports[`RUST_COMMON_PRESET Struct & Complete Models should render \`struct\` type with all implementations 2`] = ` -"// Members represents a union of types: String, f64, bool -#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] -#[serde(untagged)] -pub enum Members { - #[serde(rename=\\"MembersOneOf0\\")] - MembersOneOf0(String), - #[serde(rename=\\"MembersOneOf1\\")] - MembersOneOf1(f64), - #[serde(rename=\\"MembersOneOf2\\")] - MembersOneOf2(bool), -} - -" -`; - exports[`RUST_COMMON_PRESET Struct & Complete Models should render \`struct\` type with all implementations 3`] = ` "// TupleType represents a TupleType model. #[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] @@ -324,31 +310,17 @@ impl TupleType { `; exports[`RUST_COMMON_PRESET Struct & Complete Models should render \`struct\` without Default or new() implementation 1`] = ` -"// Address represents a Address model. -#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] -pub struct Address { - #[serde(rename=\\"street_name\\")] - pub street_name: String, - #[serde(rename=\\"city\\")] - pub city: String, - #[serde(rename=\\"state\\")] - pub state: String, - #[serde(rename=\\"house_number\\")] - pub house_number: f64, - #[serde(rename=\\"marriage\\", skip_serializing_if = \\"Option::is_none\\")] - pub marriage: Option, - #[serde(rename=\\"members\\", skip_serializing_if = \\"Option::is_none\\")] - pub members: Option>, - #[serde(rename=\\"tuple_type\\", skip_serializing_if = \\"Option::is_none\\")] - pub tuple_type: Option>, - #[serde(rename=\\"array_type\\")] - pub array_type: Vec, - #[serde(rename=\\"additionalProperties\\", skip_serializing_if = \\"Option::is_none\\")] - pub additional_properties: Option>, +"// Members represents a union of types: String, f64, bool +#[derive(Clone, Debug, Deserialize, PartialEq, PartialOrd, Serialize)] +#[serde(untagged)] +pub enum Members { + #[serde(rename=\\"MembersOneOf0\\")] + MembersOneOf0(String), + #[serde(rename=\\"MembersOneOf1\\")] + MembersOneOf1(f64), + #[serde(rename=\\"MembersOneOf2\\")] + MembersOneOf2(bool), } -impl Address { - -} " `; diff --git a/test/generators/template/TemplateConstrainer.spec.ts b/test/generators/template/TemplateConstrainer.spec.ts index 4891ef3799..1be85036a0 100644 --- a/test/generators/template/TemplateConstrainer.spec.ts +++ b/test/generators/template/TemplateConstrainer.spec.ts @@ -18,76 +18,84 @@ import { describe('TemplateConstrainer', () => { describe('ObjectModel', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedObjectModel('test', undefined, '', {}); + const model = new ConstrainedObjectModel('test', undefined, {}, '', {}); const type = TemplateDefaultTypeMapping.Object({ constrainedModel: model, - options: TemplateGenerator.defaultOptions + options: TemplateGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(model.name); }); }); describe('Reference', () => { test('should render the constrained name as type', () => { - const refModel = new ConstrainedAnyModel('test', undefined, ''); + const refModel = new ConstrainedAnyModel('test', undefined, {}, ''); const model = new ConstrainedReferenceModel( 'test', undefined, + {}, '', refModel ); const type = TemplateDefaultTypeMapping.Reference({ constrainedModel: model, - options: TemplateGenerator.defaultOptions + options: TemplateGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(model.name); }); }); describe('Any', () => { test('should render type', () => { - const model = new ConstrainedAnyModel('test', undefined, ''); + const model = new ConstrainedAnyModel('test', undefined, {}, ''); const type = TemplateDefaultTypeMapping.Any({ constrainedModel: model, - options: TemplateGenerator.defaultOptions + options: TemplateGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(''); }); }); describe('Float', () => { test('should render type', () => { - const model = new ConstrainedFloatModel('test', undefined, ''); + const model = new ConstrainedFloatModel('test', undefined, {}, ''); const type = TemplateDefaultTypeMapping.Float({ constrainedModel: model, - options: TemplateGenerator.defaultOptions + options: TemplateGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(''); }); }); describe('Integer', () => { test('should render type', () => { - const model = new ConstrainedIntegerModel('test', undefined, ''); + const model = new ConstrainedIntegerModel('test', undefined, {}, ''); const type = TemplateDefaultTypeMapping.Integer({ constrainedModel: model, - options: TemplateGenerator.defaultOptions + options: TemplateGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(''); }); }); describe('String', () => { test('should render type', () => { - const model = new ConstrainedStringModel('test', undefined, ''); + const model = new ConstrainedStringModel('test', undefined, {}, ''); const type = TemplateDefaultTypeMapping.String({ constrainedModel: model, - options: TemplateGenerator.defaultOptions + options: TemplateGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(''); }); }); describe('Boolean', () => { test('should render type', () => { - const model = new ConstrainedBooleanModel('test', undefined, ''); + const model = new ConstrainedBooleanModel('test', undefined, {}, ''); const type = TemplateDefaultTypeMapping.Boolean({ constrainedModel: model, - options: TemplateGenerator.defaultOptions + options: TemplateGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(''); }); @@ -98,15 +106,17 @@ describe('TemplateConstrainer', () => { const stringModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const tupleValueModel = new ConstrainedTupleValueModel(0, stringModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel ]); const type = TemplateDefaultTypeMapping.Tuple({ constrainedModel: model, - options: TemplateGenerator.defaultOptions + options: TemplateGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(''); }); @@ -114,17 +124,19 @@ describe('TemplateConstrainer', () => { const stringModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const tupleValueModel0 = new ConstrainedTupleValueModel(0, stringModel); const tupleValueModel1 = new ConstrainedTupleValueModel(1, stringModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel0, tupleValueModel1 ]); const type = TemplateDefaultTypeMapping.Tuple({ constrainedModel: model, - options: TemplateGenerator.defaultOptions + options: TemplateGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(''); }); @@ -135,17 +147,20 @@ describe('TemplateConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); const type = TemplateDefaultTypeMapping.Array({ constrainedModel: model, - options: TemplateGenerator.defaultOptions + options: TemplateGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(''); }); @@ -153,10 +168,11 @@ describe('TemplateConstrainer', () => { describe('Enum', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedEnumModel('Test', undefined, '', []); + const model = new ConstrainedEnumModel('Test', undefined, {}, '', []); const type = TemplateDefaultTypeMapping.Enum({ constrainedModel: model, - options: TemplateGenerator.defaultOptions + options: TemplateGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(model.name); }); @@ -164,26 +180,43 @@ describe('TemplateConstrainer', () => { describe('Union', () => { test('should render type', () => { - const unionModel = new ConstrainedStringModel('test', undefined, 'str'); - const model = new ConstrainedUnionModel('test', undefined, '', [ + const unionModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ unionModel ]); const type = TemplateDefaultTypeMapping.Union({ constrainedModel: model, - options: TemplateGenerator.defaultOptions + options: TemplateGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(''); }); test('should render multiple types', () => { - const unionModel1 = new ConstrainedStringModel('test', undefined, 'str'); - const unionModel2 = new ConstrainedStringModel('test', undefined, 'str'); - const model = new ConstrainedUnionModel('test', undefined, '', [ + const unionModel1 = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); + const unionModel2 = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ unionModel1, unionModel2 ]); const type = TemplateDefaultTypeMapping.Union({ constrainedModel: model, - options: TemplateGenerator.defaultOptions + options: TemplateGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(''); }); @@ -191,18 +224,25 @@ describe('TemplateConstrainer', () => { describe('Dictionary', () => { test('should render type', () => { - const keyModel = new ConstrainedStringModel('test', undefined, 'str'); - const valueModel = new ConstrainedStringModel('test', undefined, 'str'); + const keyModel = new ConstrainedStringModel('test', undefined, {}, 'str'); + const valueModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'str' + ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel ); const type = TemplateDefaultTypeMapping.Dictionary({ constrainedModel: model, - options: TemplateGenerator.defaultOptions + options: TemplateGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(''); }); diff --git a/test/generators/typescript/TypeScriptConstrainer.spec.ts b/test/generators/typescript/TypeScriptConstrainer.spec.ts index ae556e0ab4..632f03eb21 100644 --- a/test/generators/typescript/TypeScriptConstrainer.spec.ts +++ b/test/generators/typescript/TypeScriptConstrainer.spec.ts @@ -18,76 +18,84 @@ import { describe('TypeScriptConstrainer', () => { describe('ObjectModel', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedObjectModel('test', undefined, '', {}); + const model = new ConstrainedObjectModel('test', undefined, {}, '', {}); const type = TypeScriptDefaultTypeMapping.Object({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(model.name); }); }); describe('Reference', () => { test('should render the constrained name as type', () => { - const refModel = new ConstrainedAnyModel('test', undefined, ''); + const refModel = new ConstrainedAnyModel('test', undefined, {}, ''); const model = new ConstrainedReferenceModel( 'test', undefined, + {}, '', refModel ); const type = TypeScriptDefaultTypeMapping.Reference({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(model.name); }); }); describe('Any', () => { test('should render type', () => { - const model = new ConstrainedAnyModel('test', undefined, ''); + const model = new ConstrainedAnyModel('test', undefined, {}, ''); const type = TypeScriptDefaultTypeMapping.Any({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('any'); }); }); describe('Float', () => { test('should render type', () => { - const model = new ConstrainedFloatModel('test', undefined, ''); + const model = new ConstrainedFloatModel('test', undefined, {}, ''); const type = TypeScriptDefaultTypeMapping.Float({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('number'); }); }); describe('Integer', () => { test('should render type', () => { - const model = new ConstrainedIntegerModel('test', undefined, ''); + const model = new ConstrainedIntegerModel('test', undefined, {}, ''); const type = TypeScriptDefaultTypeMapping.Integer({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('number'); }); }); describe('String', () => { test('should render type', () => { - const model = new ConstrainedStringModel('test', undefined, ''); + const model = new ConstrainedStringModel('test', undefined, {}, ''); const type = TypeScriptDefaultTypeMapping.String({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('string'); }); }); describe('Boolean', () => { test('should render type', () => { - const model = new ConstrainedBooleanModel('test', undefined, ''); + const model = new ConstrainedBooleanModel('test', undefined, {}, ''); const type = TypeScriptDefaultTypeMapping.Boolean({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('boolean'); }); @@ -98,15 +106,17 @@ describe('TypeScriptConstrainer', () => { const stringModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const tupleValueModel = new ConstrainedTupleValueModel(0, stringModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel ]); const type = TypeScriptDefaultTypeMapping.Tuple({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('[String]'); }); @@ -114,17 +124,19 @@ describe('TypeScriptConstrainer', () => { const stringModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const tupleValueModel0 = new ConstrainedTupleValueModel(0, stringModel); const tupleValueModel1 = new ConstrainedTupleValueModel(1, stringModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel0, tupleValueModel1 ]); const type = TypeScriptDefaultTypeMapping.Tuple({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('[String, String]'); }); @@ -135,17 +147,20 @@ describe('TypeScriptConstrainer', () => { const arrayModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); const type = TypeScriptDefaultTypeMapping.Array({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('String[]'); }); @@ -153,24 +168,28 @@ describe('TypeScriptConstrainer', () => { const stringModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); - const anyModel = new ConstrainedAnyModel('test', undefined, 'any'); + const anyModel = new ConstrainedAnyModel('test', undefined, {}, 'any'); const unionModel = new ConstrainedUnionModel( 'test', undefined, + {}, 'String | any', [anyModel, stringModel] ); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', unionModel ); const type = TypeScriptDefaultTypeMapping.Array({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('(String | any)[]'); }); @@ -178,10 +197,11 @@ describe('TypeScriptConstrainer', () => { describe('Enum', () => { test('should render the constrained name as type', () => { - const model = new ConstrainedEnumModel('test', undefined, '', []); + const model = new ConstrainedEnumModel('test', undefined, {}, '', []); const type = TypeScriptDefaultTypeMapping.Enum({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual(model.name); }); @@ -192,14 +212,16 @@ describe('TypeScriptConstrainer', () => { const unionModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); - const model = new ConstrainedUnionModel('test', undefined, '', [ + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ unionModel ]); const type = TypeScriptDefaultTypeMapping.Union({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('String'); }); @@ -207,20 +229,23 @@ describe('TypeScriptConstrainer', () => { const unionModel1 = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const unionModel2 = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); - const model = new ConstrainedUnionModel('test', undefined, '', [ + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ unionModel1, unionModel2 ]); const type = TypeScriptDefaultTypeMapping.Union({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('String | String'); }); @@ -228,35 +253,50 @@ describe('TypeScriptConstrainer', () => { describe('Dictionary', () => { test('should render type with default map type', () => { - const keyModel = new ConstrainedStringModel('test', undefined, 'String'); + const keyModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'String' + ); const valueModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel ); const type = TypeScriptDefaultTypeMapping.Dictionary({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Map'); }); test('should render type with indexed object map type', () => { - const keyModel = new ConstrainedStringModel('test', undefined, 'String'); + const keyModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'String' + ); const valueModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel @@ -266,27 +306,36 @@ describe('TypeScriptConstrainer', () => { options: { ...TypeScriptGenerator.defaultOptions, mapType: 'indexedObject' - } + }, + dependencyManager: undefined as never }); expect(type).toEqual('{ [name: String]: String }'); }); test('should render type with record map type', () => { - const keyModel = new ConstrainedStringModel('test', undefined, 'String'); + const keyModel = new ConstrainedStringModel( + 'test', + undefined, + {}, + 'String' + ); const valueModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel ); const type = TypeScriptDefaultTypeMapping.Dictionary({ constrainedModel: model, - options: { ...TypeScriptGenerator.defaultOptions, mapType: 'record' } + options: { ...TypeScriptGenerator.defaultOptions, mapType: 'record' }, + dependencyManager: undefined as never }); expect(type).toEqual('Record'); }); @@ -294,24 +343,28 @@ describe('TypeScriptConstrainer', () => { const keyModel = new ConstrainedUnionModel( 'test', undefined, + {}, 'String', [] ); const valueModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const model = new ConstrainedDictionaryModel( 'test', undefined, + {}, '', keyModel, valueModel ); const type = TypeScriptDefaultTypeMapping.Dictionary({ constrainedModel: model, - options: TypeScriptGenerator.defaultOptions + options: TypeScriptGenerator.defaultOptions, + dependencyManager: undefined as never }); expect(type).toEqual('Map'); }); diff --git a/test/generators/typescript/TypeScriptGenerator.spec.ts b/test/generators/typescript/TypeScriptGenerator.spec.ts index 034a917c5f..085501ec40 100644 --- a/test/generators/typescript/TypeScriptGenerator.spec.ts +++ b/test/generators/typescript/TypeScriptGenerator.spec.ts @@ -408,7 +408,7 @@ ${content}`; discriminator: 'petType', properties: { petType: { - $id: 'PetType', + title: 'PetType', type: 'string' }, name: { @@ -429,6 +429,7 @@ ${content}`; }, huntingSkill: { type: 'string', + title: 'HuntingSkill', enum: ['clueless', 'lazy', 'adventurous', 'aggressive'] } }, @@ -624,6 +625,7 @@ ${content}`; min: 0 } }, + required: ['petType'], oneOf: [ { $ref: '#/components/schemas/Cat' }, { $ref: '#/components/schemas/Dog' } @@ -686,4 +688,304 @@ ${content}`; expect(dog?.result).not.toContain('huntingSkill'); }); }); + describe('CloudEvent', () => { + const asyncapiDoc = { + asyncapi: '2.5.0', + info: { + title: 'CloudEvent example', + version: '1.0.0' + }, + channels: { + pet: { + publish: { + message: { + oneOf: [ + { + $ref: '#/components/messages/Dog' + }, + { + $ref: '#/components/messages/Cat' + } + ] + } + } + } + }, + components: { + messages: { + Dog: { + payload: { + title: 'Dog', + allOf: [ + { + $ref: '#/components/schemas/CloudEvent' + }, + { + type: 'object', + properties: { + type: { + title: 'DogType', + const: 'Dog' + } + } + } + ] + } + }, + Cat: { + payload: { + title: 'Cat', + allOf: [ + { + $ref: '#/components/schemas/CloudEvent' + }, + { + type: 'object', + properties: { + type: { + title: 'CatType', + const: 'Cat' + } + } + } + ] + } + } + }, + schemas: { + CloudEvent: { + title: 'CloudEvent', + type: 'object', + discriminator: 'type', + properties: { + id: { + type: 'string' + }, + source: { + type: 'string', + format: 'uri-reference' + }, + specversion: { + type: 'string', + default: '1.0', + examples: ['1.0'] + }, + type: { + type: 'string' + }, + dataschema: { + type: 'string', + format: 'uri' + }, + time: { + type: 'string', + format: 'date-time' + } + }, + required: ['id', 'source', 'specversion', 'type'] + } + } + } + }; + + test('handle allOf with const in CloudEvent type', async () => { + const models = await generator.generate(asyncapiDoc); + expect(models.map((model) => model.result)).toMatchSnapshot(); + + const dog = models.find((model) => model.modelName === 'Dog'); + expect(dog).not.toBeUndefined(); + expect(dog?.result).toContain('DogType'); + + const cat = models.find((model) => model.modelName === 'Cat'); + expect(cat).not.toBeUndefined(); + expect(cat?.result).toContain('CatType'); + }); + }); + + describe('if/then/else', () => { + test('handle if/then/else required properties', async () => { + const asyncapiDoc = { + asyncapi: '2.6.0', + info: { + title: 'if/else/then example', + version: '1.0.0' + }, + channels: { + event: { + publish: { + message: { + $ref: '#/components/messages/Event' + } + } + } + }, + components: { + messages: { + Event: { + payload: { + title: 'Event', + type: 'object', + properties: { + id: { + type: 'string' + }, + action: { + title: 'Action', + type: 'string', + enum: ['ADD', 'UPDATE', 'DELETE'], + default: 'ADD' + } + }, + required: ['id'], + allOf: [ + { + if: { + properties: { + action: { + const: 'DELETE' + } + }, + required: ['action'] + }, + else: { + $ref: '#/components/schemas/EventAddOrUpdate' + } + } + ] + } + } + }, + schemas: { + EventAddOrUpdate: { + type: 'object', + properties: { + event_time: { + type: 'string', + format: 'date-time' + } + }, + required: ['event_time'] + } + } + } + }; + + const models = await generator.generate(asyncapiDoc); + expect(models.map((model) => model.result)).toMatchSnapshot(); + }); + + test('handle recursive schemas', async () => { + const models = await generator.generate({ + $schema: 'http://json-schema.org/draft-07/schema#', + properties: { + condition: { + type: 'string' + }, + test: { + properties: { + test2: { + type: 'string' + } + } + } + }, + if: { + properties: { + condition: { + const: 'something' + } + } + }, + then: { + properties: { + test: { + required: ['test2'] + } + } + } + }); + expect(models.map((model) => model.result)).toMatchSnapshot(); + }); + }); + + describe('const', () => { + test('should generate a const string', async () => { + const models = await generator.generate({ + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + title: 'LightMeasured', + additionalProperties: false, + properties: { + type: { + type: 'string', + const: 'test' + } + } + }); + expect(models.map((model) => model.result)).toMatchSnapshot(); + }); + + test('should generate a single enum with two values and a string enum', async () => { + const models = await generator.generate({ + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + title: 'LightMeasured', + additionalProperties: false, + properties: { + type: { + oneOf: [ + { + $ref: '#/definitions/MyCommonEnums' + }, + { + const: 'MyMessage2' + } + ] + } + }, + definitions: { + MyCommonEnums: { + title: 'MyCommonEnums', + enum: ['MyMessage', 'MyMessage2'] + } + } + }); + expect(models.map((model) => model.result)).toMatchSnapshot(); + }); + + test('should generate a single enum with two values', async () => { + const models = await generator.generate({ + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + title: 'LightMeasured', + additionalProperties: false, + properties: { + type: { + const: 'MyMessage', + allOf: [ + { + $ref: '#/definitions/MyCommonEnums' + } + ] + }, + type2: { + allOf: [ + { + $ref: '#/definitions/MyCommonEnums' + }, + { + const: 'MyMessage2' + } + ] + } + }, + definitions: { + MyCommonEnums: { + enum: ['MyMessage', 'MyMessage2'] + } + } + }); + expect(models.map((model) => model.result)).toMatchSnapshot(); + }); + }); }); diff --git a/test/generators/typescript/__snapshots__/TypeScriptGenerator.spec.ts.snap b/test/generators/typescript/__snapshots__/TypeScriptGenerator.spec.ts.snap index 6a78713c18..cdacd89e0c 100644 --- a/test/generators/typescript/__snapshots__/TypeScriptGenerator.spec.ts.snap +++ b/test/generators/typescript/__snapshots__/TypeScriptGenerator.spec.ts.snap @@ -4,57 +4,51 @@ exports[`TypeScriptGenerator AsyncAPI with polymorphism should render 6 models ( Array [ "type AnonymousSchema_1 = Cat | Dog | StickInsect;", "class Cat { - private _petType: PetType; + private _petType: PetType.CAT = PetType.CAT; private _reservedName: string; - private _huntingSkill: AnonymousSchema_5; + private _huntingSkill: HuntingSkill; constructor(input: { - petType: PetType, reservedName: string, - huntingSkill: AnonymousSchema_5, + huntingSkill: HuntingSkill, }) { - this._petType = input.petType; this._reservedName = input.reservedName; this._huntingSkill = input.huntingSkill; } - get petType(): PetType { return this._petType; } - set petType(petType: PetType) { this._petType = petType; } + get petType(): PetType.CAT { return this._petType; } get reservedName(): string { return this._reservedName; } set reservedName(reservedName: string) { this._reservedName = reservedName; } - get huntingSkill(): AnonymousSchema_5 { return this._huntingSkill; } - set huntingSkill(huntingSkill: AnonymousSchema_5) { this._huntingSkill = huntingSkill; } + get huntingSkill(): HuntingSkill { return this._huntingSkill; } + set huntingSkill(huntingSkill: HuntingSkill) { this._huntingSkill = huntingSkill; } }", "enum PetType { CAT = \\"Cat\\", DOG = \\"Dog\\", STICK_BUG = \\"StickBug\\", }", - "enum AnonymousSchema_5 { + "enum HuntingSkill { CLUELESS = \\"clueless\\", LAZY = \\"lazy\\", ADVENTUROUS = \\"adventurous\\", AGGRESSIVE = \\"aggressive\\", }", "class Dog { - private _petType: PetType; + private _petType: PetType.DOG = PetType.DOG; private _reservedName: string; private _packSize: number; constructor(input: { - petType: PetType, reservedName: string, packSize: number, }) { - this._petType = input.petType; this._reservedName = input.reservedName; this._packSize = input.packSize; } - get petType(): PetType { return this._petType; } - set petType(petType: PetType) { this._petType = petType; } + get petType(): PetType.DOG { return this._petType; } get reservedName(): string { return this._reservedName; } set reservedName(reservedName: string) { this._reservedName = reservedName; } @@ -63,22 +57,19 @@ Array [ set packSize(packSize: number) { this._packSize = packSize; } }", "class StickInsect { - private _petType: PetType; + private _petType: PetType.STICK_BUG = PetType.STICK_BUG; private _reservedName: string; private _color: string; constructor(input: { - petType: PetType, reservedName: string, color: string, }) { - this._petType = input.petType; this._reservedName = input.reservedName; this._color = input.color; } - get petType(): PetType { return this._petType; } - set petType(petType: PetType) { this._petType = petType; } + get petType(): PetType.STICK_BUG { return this._petType; } get reservedName(): string { return this._reservedName; } set reservedName(reservedName: string) { this._reservedName = reservedName; } @@ -97,26 +88,125 @@ exports[`TypeScriptGenerator AsyncAPI with polymorphism should render enum with }" `; +exports[`TypeScriptGenerator CloudEvent handle allOf with const in CloudEvent type 1`] = ` +Array [ + "type Pet = Dog | Cat;", + "class Dog { + private _id: string; + private _source: string; + private _specversion: string; + private _reservedType: DogType.DOG = DogType.DOG; + private _dataschema?: string; + private _time?: string; + private _additionalProperties?: Map; + + constructor(input: { + id: string, + source: string, + specversion: string, + dataschema?: string, + time?: string, + additionalProperties?: Map, + }) { + this._id = input.id; + this._source = input.source; + this._specversion = input.specversion; + this._dataschema = input.dataschema; + this._time = input.time; + this._additionalProperties = input.additionalProperties; + } + + get id(): string { return this._id; } + set id(id: string) { this._id = id; } + + get source(): string { return this._source; } + set source(source: string) { this._source = source; } + + get specversion(): string { return this._specversion; } + set specversion(specversion: string) { this._specversion = specversion; } + + get reservedType(): DogType.DOG { return this._reservedType; } + + get dataschema(): string | undefined { return this._dataschema; } + set dataschema(dataschema: string | undefined) { this._dataschema = dataschema; } + + get time(): string | undefined { return this._time; } + set time(time: string | undefined) { this._time = time; } + + get additionalProperties(): Map | undefined { return this._additionalProperties; } + set additionalProperties(additionalProperties: Map | undefined) { this._additionalProperties = additionalProperties; } +}", + "enum DogType { + DOG = \\"Dog\\", +}", + "class Cat { + private _id: string; + private _source: string; + private _specversion: string; + private _reservedType: CatType.CAT = CatType.CAT; + private _dataschema?: string; + private _time?: string; + private _additionalProperties?: Map; + + constructor(input: { + id: string, + source: string, + specversion: string, + dataschema?: string, + time?: string, + additionalProperties?: Map, + }) { + this._id = input.id; + this._source = input.source; + this._specversion = input.specversion; + this._dataschema = input.dataschema; + this._time = input.time; + this._additionalProperties = input.additionalProperties; + } + + get id(): string { return this._id; } + set id(id: string) { this._id = id; } + + get source(): string { return this._source; } + set source(source: string) { this._source = source; } + + get specversion(): string { return this._specversion; } + set specversion(specversion: string) { this._specversion = specversion; } + + get reservedType(): CatType.CAT { return this._reservedType; } + + get dataschema(): string | undefined { return this._dataschema; } + set dataschema(dataschema: string | undefined) { this._dataschema = dataschema; } + + get time(): string | undefined { return this._time; } + set time(time: string | undefined) { this._time = time; } + + get additionalProperties(): Map | undefined { return this._additionalProperties; } + set additionalProperties(additionalProperties: Map | undefined) { this._additionalProperties = additionalProperties; } +}", + "enum CatType { + CAT = \\"Cat\\", +}", +] +`; + exports[`TypeScriptGenerator Combine oneOf and allOf should combine oneOf and allOf 1`] = ` Array [ "type Pet = Cat | Dog;", "class Cat { - private _animalType?: AnimalType; + private _animalType?: AnimalType.CAT = AnimalType.CAT; private _age?: number; private _huntingSkill?: HuntingSkill; constructor(input: { - animalType?: AnimalType, age?: number, huntingSkill?: HuntingSkill, }) { - this._animalType = input.animalType; this._age = input.age; this._huntingSkill = input.huntingSkill; } - get animalType(): AnimalType | undefined { return this._animalType; } - set animalType(animalType: AnimalType | undefined) { this._animalType = animalType; } + get animalType(): AnimalType.CAT | undefined { return this._animalType; } get age(): number | undefined { return this._age; } set age(age: number | undefined) { this._age = age; } @@ -133,22 +223,19 @@ Array [ LAZY = \\"lazy\\", }", "class Dog { - private _animalType?: AnimalType; + private _animalType?: AnimalType.DOG = AnimalType.DOG; private _age?: number; private _breed?: DogBreed; constructor(input: { - animalType?: AnimalType, age?: number, breed?: DogBreed, }) { - this._animalType = input.animalType; this._age = input.age; this._breed = input.breed; } - get animalType(): AnimalType | undefined { return this._animalType; } - set animalType(animalType: AnimalType | undefined) { this._animalType = animalType; } + get animalType(): AnimalType.DOG | undefined { return this._animalType; } get age(): number | undefined { return this._age; } set age(age: number | undefined) { this._age = age; } @@ -167,22 +254,19 @@ exports[`TypeScriptGenerator Combine properties and oneOf should combine propert Array [ "type Pet = Cat | Dog;", "class Cat { - private _petType?: PetType; + private _petType: PetType.CAT = PetType.CAT; private _age?: number; private _huntingSkill?: HuntingSkill; constructor(input: { - petType?: PetType, age?: number, huntingSkill?: HuntingSkill, }) { - this._petType = input.petType; this._age = input.age; this._huntingSkill = input.huntingSkill; } - get petType(): PetType | undefined { return this._petType; } - set petType(petType: PetType | undefined) { this._petType = petType; } + get petType(): PetType.CAT { return this._petType; } get age(): number | undefined { return this._age; } set age(age: number | undefined) { this._age = age; } @@ -199,22 +283,19 @@ Array [ LAZY = \\"lazy\\", }", "class Dog { - private _petType?: PetType; + private _petType: PetType.DOG = PetType.DOG; private _age?: number; private _breed?: DogBreed; constructor(input: { - petType?: PetType, age?: number, breed?: DogBreed, }) { - this._petType = input.petType; this._age = input.age; this._breed = input.breed; } - get petType(): PetType | undefined { return this._petType; } - set petType(petType: PetType | undefined) { this._petType = petType; } + get petType(): PetType.DOG { return this._petType; } get age(): number | undefined { return this._age; } set age(age: number | undefined) { this._age = age; } @@ -229,6 +310,145 @@ Array [ ] `; +exports[`TypeScriptGenerator const should generate a const string 1`] = ` +Array [ + "class LightMeasured { + private _reservedType?: 'test' = 'test'; + + constructor(input: { + + }) { + + } + + get reservedType(): 'test' | undefined { return this._reservedType; } +}", +] +`; + +exports[`TypeScriptGenerator const should generate a single enum with two values 1`] = ` +Array [ + "class LightMeasured { + private _reservedType?: ReservedType.MY_MESSAGE = ReservedType.MY_MESSAGE; + private _type2?: Type2.MY_MESSAGE2 = Type2.MY_MESSAGE2; + + constructor(input: { + + }) { + + } + + get reservedType(): ReservedType.MY_MESSAGE | undefined { return this._reservedType; } + + get type2(): Type2.MY_MESSAGE2 | undefined { return this._type2; } +}", + "enum ReservedType { + MY_MESSAGE = \\"MyMessage\\", + MY_MESSAGE2 = \\"MyMessage2\\", +}", + "enum Type2 { + MY_MESSAGE = \\"MyMessage\\", + MY_MESSAGE2 = \\"MyMessage2\\", +}", +] +`; + +exports[`TypeScriptGenerator const should generate a single enum with two values and a string enum 1`] = ` +Array [ + "class LightMeasured { + private _reservedType?: MyCommonEnums | 'MyMessage2'; + + constructor(input: { + reservedType?: MyCommonEnums | 'MyMessage2', + }) { + this._reservedType = input.reservedType; + } + + get reservedType(): MyCommonEnums | 'MyMessage2' | undefined { return this._reservedType; } + set reservedType(reservedType: MyCommonEnums | 'MyMessage2' | undefined) { this._reservedType = reservedType; } +}", + "enum MyCommonEnums { + MY_MESSAGE = \\"MyMessage\\", + MY_MESSAGE2 = \\"MyMessage2\\", +}", +] +`; + +exports[`TypeScriptGenerator if/then/else handle if/then/else required properties 1`] = ` +Array [ + "class ReservedEvent { + private _id: string; + private _action?: Action; + private _eventTime?: string; + private _additionalProperties?: Map; + + constructor(input: { + id: string, + action?: Action, + eventTime?: string, + additionalProperties?: Map, + }) { + this._id = input.id; + this._action = input.action; + this._eventTime = input.eventTime; + this._additionalProperties = input.additionalProperties; + } + + get id(): string { return this._id; } + set id(id: string) { this._id = id; } + + get action(): Action | undefined { return this._action; } + set action(action: Action | undefined) { this._action = action; } + + get eventTime(): string | undefined { return this._eventTime; } + set eventTime(eventTime: string | undefined) { this._eventTime = eventTime; } + + get additionalProperties(): Map | undefined { return this._additionalProperties; } + set additionalProperties(additionalProperties: Map | undefined) { this._additionalProperties = additionalProperties; } +}", + "enum Action { + ADD = \\"ADD\\", + UPDATE = \\"UPDATE\\", + RESERVED_DELETE = \\"DELETE\\", +}", +] +`; + +exports[`TypeScriptGenerator if/then/else handle recursive schemas 1`] = ` +Array [ + "class Root { + private _condition?: string; + private _test?: Test; + + constructor(input: { + condition?: string, + test?: Test, + }) { + this._condition = input.condition; + this._test = input.test; + } + + get condition(): string | undefined { return this._condition; } + set condition(condition: string | undefined) { this._condition = condition; } + + get test(): Test | undefined { return this._test; } + set test(test: Test | undefined) { this._test = test; } +}", + "class Test { + private _test2?: string; + + constructor(input: { + test2?: string, + }) { + this._test2 = input.test2; + } + + get test2(): string | undefined { return this._test2; } + set test2(test2: string | undefined) { this._test2 = test2; } +}", +] +`; + exports[`TypeScriptGenerator should not render \`class\` with reserved keyword 1`] = ` "class Address { private _reservedReservedEnum?: string; @@ -260,7 +480,7 @@ exports[`TypeScriptGenerator should render \`class\` type 1`] = ` private _members?: string | number | boolean; private _tupleType?: [string, number]; private _tupleTypeWithAdditionalItems?: (string | number | any)[]; - private _arrayType: (string | any)[]; + private _arrayType: string[]; private _additionalProperties?: Map; constructor(input: { @@ -272,7 +492,7 @@ exports[`TypeScriptGenerator should render \`class\` type 1`] = ` members?: string | number | boolean, tupleType?: [string, number], tupleTypeWithAdditionalItems?: (string | number | any)[], - arrayType: (string | any)[], + arrayType: string[], additionalProperties?: Map, }) { this._streetName = input.streetName; @@ -311,8 +531,8 @@ exports[`TypeScriptGenerator should render \`class\` type 1`] = ` get tupleTypeWithAdditionalItems(): (string | number | any)[] | undefined { return this._tupleTypeWithAdditionalItems; } set tupleTypeWithAdditionalItems(tupleTypeWithAdditionalItems: (string | number | any)[] | undefined) { this._tupleTypeWithAdditionalItems = tupleTypeWithAdditionalItems; } - get arrayType(): (string | any)[] { return this._arrayType; } - set arrayType(arrayType: (string | any)[]) { this._arrayType = arrayType; } + get arrayType(): string[] { return this._arrayType; } + set arrayType(arrayType: string[]) { this._arrayType = arrayType; } get additionalProperties(): Map | undefined { return this._additionalProperties; } set additionalProperties(additionalProperties: Map | undefined) { this._additionalProperties = additionalProperties; } @@ -339,14 +559,14 @@ exports[`TypeScriptGenerator should render \`interface\` type 1`] = ` members?: string | number | boolean; tupleType?: [string, number]; tupleTypeWithAdditionalItems?: (string | number | any)[]; - arrayType: (string | any)[]; + arrayType: string[]; additionalProperties?: Map; }" `; -exports[`TypeScriptGenerator should render \`type\` type - array of primitive type 1`] = `"type TypeArray = (string | any)[];"`; +exports[`TypeScriptGenerator should render \`type\` type - array of primitive type 1`] = `"type TypeArray = string[];"`; -exports[`TypeScriptGenerator should render \`type\` type - array of union type 1`] = `"type TypeArray = (string | number | boolean | any)[];"`; +exports[`TypeScriptGenerator should render \`type\` type - array of union type 1`] = `"type TypeArray = (string | number | boolean)[];"`; exports[`TypeScriptGenerator should render \`type\` type - enum 1`] = ` "enum TypeEnum { diff --git a/test/generators/typescript/constrainer/ConstantConstrainer.spec.ts b/test/generators/typescript/constrainer/ConstantConstrainer.spec.ts new file mode 100644 index 0000000000..dcce0beb88 --- /dev/null +++ b/test/generators/typescript/constrainer/ConstantConstrainer.spec.ts @@ -0,0 +1,75 @@ +import { + ConstrainedEnumModel, + ConstrainedEnumValueModel, + ConstrainedReferenceModel, + ConstrainedStringModel +} from '../../../../src'; +import { defaultConstantConstraints } from '../../../../src/generators/typescript/constrainer/ConstantConstrainer'; + +describe('ConstantConstrainer', () => { + test('should not render anything if const options are not set', () => { + const constrainedConstant = defaultConstantConstraints()({ + constrainedMetaModel: new ConstrainedStringModel( + 'testStringModel', + undefined, + {}, + 'String' + ) + }); + expect(constrainedConstant).toBeUndefined(); + }); + + describe('ConstrainedReferenceModel with ConstrainedEnumModel', () => { + test('should render enum', () => { + const constrainedConstant = defaultConstantConstraints()({ + constrainedMetaModel: new ConstrainedReferenceModel( + 'testRefModel', + undefined, + { + const: { + originalInput: 'testValue' + } + }, + 'TestRefType', + new ConstrainedEnumModel( + 'testEnumModel', + undefined, + {}, + 'TestEnumType', + [new ConstrainedEnumValueModel('testKey', 'testValue', 'testValue')] + ) + ) + }); + expect(constrainedConstant).toEqual('TestRefType.testKey'); + }); + }); + + describe('ConstrainedEnumModel', () => { + test('should render enum', () => { + const constrainedConstant = defaultConstantConstraints()({ + constrainedMetaModel: new ConstrainedEnumModel( + 'testEnumModel', + undefined, + { const: { originalInput: 'testValue' } }, + 'TestEnumType', + [new ConstrainedEnumValueModel('testKey', 'testValue', 'testValue')] + ) + }); + expect(constrainedConstant).toEqual('TestEnumType.testKey'); + }); + }); + + describe('ConstrainedStringModel', () => { + test('should render enum', () => { + const constrainedConstant = defaultConstantConstraints()({ + constrainedMetaModel: new ConstrainedStringModel( + 'testStringModel', + undefined, + { const: { originalInput: 'testValue' } }, + 'String' + ) + }); + expect(constrainedConstant).toEqual("'testValue'"); + }); + }); +}); diff --git a/test/generators/typescript/constrainer/EnumConstrainer.spec.ts b/test/generators/typescript/constrainer/EnumConstrainer.spec.ts index 52c02bf620..561436cfda 100644 --- a/test/generators/typescript/constrainer/EnumConstrainer.spec.ts +++ b/test/generators/typescript/constrainer/EnumConstrainer.spec.ts @@ -10,10 +10,11 @@ import { DefaultEnumKeyConstraints } from '../../../../src/generators/typescript/constrainer/EnumConstrainer'; describe('EnumConstrainer', () => { - const enumModel = new EnumModel('test', undefined, []); + const enumModel = new EnumModel('test', undefined, {}, []); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [] ); @@ -38,11 +39,13 @@ describe('EnumConstrainer', () => { test('should not contain duplicate keys', () => { const existingConstrainedEnumValueModel = new ConstrainedEnumValueModel( 'EMPTY', + 'return', 'return' ); const constrainedEnumModel = new ConstrainedEnumModel( 'test', undefined, + {}, '', [existingConstrainedEnumValueModel] ); @@ -97,29 +100,29 @@ describe('EnumConstrainer', () => { }); expect(constrainedValue).toEqual('"true"'); }); - test.skip('should render numbers', () => { + test('should render numbers', () => { const constrainedValue = TypeScriptDefaultConstraints.enumValue({ enumModel, constrainedEnumModel, enumValue: 123 }); - expect(constrainedValue).toEqual(123); + expect(constrainedValue).toEqual('123'); }); - test.skip('should render object', () => { + test('should render object', () => { const constrainedValue = TypeScriptDefaultConstraints.enumValue({ enumModel, constrainedEnumModel, enumValue: { test: 'test' } }); - expect(constrainedValue).toEqual('"{\\"test\\":\\"test\\"}"'); + expect(constrainedValue).toEqual('\'{"test":"test"}\''); }); - test.skip('should render unknown value', () => { + test('should render unknown value', () => { const constrainedValue = TypeScriptDefaultConstraints.enumValue({ enumModel, constrainedEnumModel, enumValue: undefined }); - expect(constrainedValue).toEqual('"undefined"'); + expect(constrainedValue).toEqual('undefined'); }); }); describe('custom constraints', () => { diff --git a/test/generators/typescript/constrainer/PropertyKeyConstrainer.spec.ts b/test/generators/typescript/constrainer/PropertyKeyConstrainer.spec.ts index 3da3a8b430..ef9198919b 100644 --- a/test/generators/typescript/constrainer/PropertyKeyConstrainer.spec.ts +++ b/test/generators/typescript/constrainer/PropertyKeyConstrainer.spec.ts @@ -11,10 +11,11 @@ import { PropertyKeyConstraintOptions } from '../../../../src/generators/typescript/constrainer/PropertyKeyConstrainer'; describe('PropertyKeyConstrainer', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); @@ -56,10 +57,11 @@ describe('PropertyKeyConstrainer', () => { expect(constrainedKey).toEqual('someWeirdValueExclamationQuotationHash_2'); }); test('should not contain duplicate properties', () => { - const objectModel = new ObjectModel('test', undefined, {}); + const objectModel = new ObjectModel('test', undefined, {}, {}); const constrainedObjectModel = new ConstrainedObjectModel( 'test', undefined, + {}, '', {} ); diff --git a/test/generators/typescript/preset/__snapshots__/MarshallingPreset.spec.ts.snap b/test/generators/typescript/preset/__snapshots__/MarshallingPreset.spec.ts.snap index 7b5ba4be62..8342b7fb67 100644 --- a/test/generators/typescript/preset/__snapshots__/MarshallingPreset.spec.ts.snap +++ b/test/generators/typescript/preset/__snapshots__/MarshallingPreset.spec.ts.snap @@ -133,7 +133,7 @@ exports[`Marshalling preset should render un/marshal code 1`] = ` } if (instance.additionalProperties === undefined) {instance.additionalProperties = new Map();} - for (const [key, value] of Object.entries(obj).filter((([key,]) => {return ![\\"stringProp\\",\\"enumProp\\",\\"numberProp\\",\\"nestedObject\\",\\"unionTest\\",\\"unionArrayTest\\",\\"arrayTest\\",\\"additionalProperties\\"].includes(key);}))) { + for (const [key, value] of Object.entries(obj).filter((([key,]) => {return ![\\"string prop\\",\\"enumProp\\",\\"numberProp\\",\\"nestedObject\\",\\"unionTest\\",\\"unionArrayTest\\",\\"arrayTest\\",\\"additionalProperties\\"].includes(key);}))) { instance.additionalProperties.set(key, NestedTest.unmarshal(value as any)); } diff --git a/test/generators/typescript/preset/utils/ExampleFunctions.spec.ts b/test/generators/typescript/preset/utils/ExampleFunctions.spec.ts index da480db654..9f681fbd21 100644 --- a/test/generators/typescript/preset/utils/ExampleFunctions.spec.ts +++ b/test/generators/typescript/preset/utils/ExampleFunctions.spec.ts @@ -16,10 +16,11 @@ import { describe('Marshalling preset', () => { describe('.renderValueFromModel()', () => { test('should render refs correctly', () => { - const refModel = new ConstrainedAnyModel('test', undefined, ''); + const refModel = new ConstrainedAnyModel('test', undefined, {}, ''); const model = new ConstrainedReferenceModel( 'SomeOtherModel', undefined, + {}, '', refModel ); @@ -27,38 +28,39 @@ describe('Marshalling preset', () => { expect(output).toEqual('SomeOtherModel.example()'); }); test('Should render strings correctly', () => { - const model = new ConstrainedStringModel('test', undefined, ''); + const model = new ConstrainedStringModel('test', undefined, {}, ''); const output = renderValueFromModel(model); expect(output).toEqual('"string"'); }); test('Should render numbers correctly', () => { - const model = new ConstrainedIntegerModel('test', undefined, ''); + const model = new ConstrainedIntegerModel('test', undefined, {}, ''); const output = renderValueFromModel(model); expect(output).toEqual('0'); }); test('Should render floating numbers correctly', () => { - const model = new ConstrainedFloatModel('test', undefined, ''); + const model = new ConstrainedFloatModel('test', undefined, {}, ''); const output = renderValueFromModel(model); expect(output).toEqual('0.0'); }); test('Should render booleans correctly', () => { - const model = new ConstrainedBooleanModel('test', undefined, ''); + const model = new ConstrainedBooleanModel('test', undefined, {}, ''); const output = renderValueFromModel(model); expect(output).toEqual('true'); }); test('Should use first value if there is more then one', () => { - const unionModel = new ConstrainedBooleanModel('test', undefined, ''); - const model = new ConstrainedUnionModel('test', undefined, '', [ + const unionModel = new ConstrainedBooleanModel('test', undefined, {}, ''); + const model = new ConstrainedUnionModel('test', undefined, {}, '', [ unionModel ]); const output = renderValueFromModel(model); expect(output).toEqual('true'); }); test('Should render array value', () => { - const arrayModel = new ConstrainedBooleanModel('test', undefined, ''); + const arrayModel = new ConstrainedBooleanModel('test', undefined, {}, ''); const model = new ConstrainedArrayModel( 'test', undefined, + {}, '', arrayModel ); @@ -66,13 +68,13 @@ describe('Marshalling preset', () => { expect(output).toEqual('[true]'); }); test('Should handle unknown types', () => { - const model = new ConstrainedAnyModel('test', undefined, ''); + const model = new ConstrainedAnyModel('test', undefined, {}, ''); const output = renderValueFromModel(model); expect(output).toEqual(undefined); }); describe('tuples', () => { test('should not render anything if no items are defined', () => { - const model = new ConstrainedTupleModel('test', undefined, '', []); + const model = new ConstrainedTupleModel('test', undefined, {}, '', []); const output = renderValueFromModel(model); expect(output).toEqual(undefined); }); @@ -80,15 +82,21 @@ describe('Marshalling preset', () => { const stringModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const tupleValueModel1 = new ConstrainedTupleValueModel(0, stringModel); - const integerModel = new ConstrainedIntegerModel('test', undefined, ''); + const integerModel = new ConstrainedIntegerModel( + 'test', + undefined, + {}, + '' + ); const tupleValueModel2 = new ConstrainedTupleValueModel( 0, integerModel ); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel1, tupleValueModel2 ]); @@ -99,10 +107,11 @@ describe('Marshalling preset', () => { const stringModel = new ConstrainedStringModel( 'test', undefined, + {}, 'String' ); const tupleValueModel = new ConstrainedTupleValueModel(0, stringModel); - const model = new ConstrainedTupleModel('test', undefined, '', [ + const model = new ConstrainedTupleModel('test', undefined, {}, '', [ tupleValueModel ]); const output = renderValueFromModel(model); diff --git a/test/helpers/CommonModelToMetaModel.spec.ts b/test/helpers/CommonModelToMetaModel.spec.ts index 0a02fd3c34..27c9d3e4ea 100644 --- a/test/helpers/CommonModelToMetaModel.spec.ts +++ b/test/helpers/CommonModelToMetaModel.spec.ts @@ -17,6 +17,67 @@ describe('CommonModelToMetaModel', () => { afterEach(() => { jest.restoreAllMocks(); }); + describe('nullable', () => { + test('should apply null type', () => { + const cm = new CommonModel(); + cm.$id = 'test'; + cm.type = ['string', 'null']; + + const model = convertToMetaModel(cm); + + expect(model).not.toBeUndefined(); + expect(model instanceof StringModel).toEqual(true); + expect(model.options.isNullable).toEqual(true); + }); + test('should not apply null type', () => { + const cm = new CommonModel(); + cm.$id = 'test'; + cm.type = ['string']; + + const model = convertToMetaModel(cm); + + expect(model).not.toBeUndefined(); + expect(model instanceof StringModel).toEqual(true); + expect(model.options.isNullable).toEqual(false); + }); + test('should apply null for unions', () => { + const cm1 = new CommonModel(); + cm1.type = ['null']; + const cm2 = new CommonModel(); + cm2.type = ['string']; + + const cm = new CommonModel(); + cm.$id = 'test'; + cm.union = [cm1, cm2]; + + const model = convertToMetaModel(cm); + + expect(model).not.toBeUndefined(); + expect(model instanceof UnionModel).toEqual(true); + expect(model.options.isNullable).toEqual(true); + expect((model as UnionModel).union.length).toEqual(1); + expect((model as UnionModel).union[0].options.isNullable).toEqual(false); + }); + + test('should not apply null for unions', () => { + const cm1 = new CommonModel(); + cm1.type = ['string', 'null']; + const cm2 = new CommonModel(); + cm2.type = ['string']; + + const cm = new CommonModel(); + cm.$id = 'test'; + cm.union = [cm1, cm2]; + + const model = convertToMetaModel(cm); + + expect(model).not.toBeUndefined(); + expect(model instanceof UnionModel).toEqual(true); + expect((model as UnionModel).union.length).toEqual(2); + expect((model as UnionModel).union[0].options.isNullable).toEqual(true); + expect((model as UnionModel).union[1].options.isNullable).toEqual(false); + }); + }); test('should default to any model', () => { const cm = new CommonModel(); cm.$id = 'test'; @@ -44,6 +105,16 @@ describe('CommonModelToMetaModel', () => { expect(model).not.toBeUndefined(); expect(model instanceof AnyModel).toEqual(true); }); + test('should convert to any model with missing null', () => { + const cm = new CommonModel(); + cm.type = ['string', 'number', 'integer', 'boolean', 'object', 'array']; + cm.$id = 'test'; + + const model = convertToMetaModel(cm); + + expect(model).not.toBeUndefined(); + expect(model instanceof AnyModel).toEqual(true); + }); describe('should convert to enum model', () => { test('when string enums', () => { const cm = new CommonModel(); @@ -134,6 +205,7 @@ describe('CommonModelToMetaModel', () => { expect(model).not.toBeUndefined(); expect(model instanceof ArrayModel).toEqual(true); + expect((model as ArrayModel).valueModel instanceof AnyModel).toEqual(true); }); test('should convert to object model', () => { const spm = new CommonModel(); @@ -273,8 +345,11 @@ describe('CommonModelToMetaModel', () => { expect(model).not.toBeUndefined(); expect(model instanceof ArrayModel).toEqual(true); + expect((model as ArrayModel).valueModel instanceof StringModel).toEqual( + true + ); }); - test('should convert array with additional items to array model as union type', () => { + test('should not convert array with additional items to array model as union type', () => { const spm = new CommonModel(); spm.type = 'string'; const cm = new CommonModel(); @@ -287,7 +362,7 @@ describe('CommonModelToMetaModel', () => { expect(model).not.toBeUndefined(); expect(model instanceof ArrayModel).toEqual(true); - expect((model as ArrayModel).valueModel instanceof UnionModel).toEqual( + expect((model as ArrayModel).valueModel instanceof StringModel).toEqual( true ); }); @@ -342,4 +417,50 @@ describe('CommonModelToMetaModel', () => { expect(model).not.toBeUndefined(); expect(model instanceof ObjectModel).toEqual(true); }); + + test('should handle const and enum', () => { + const cm = new CommonModel(); + cm.$id = 'test'; + cm.type = 'string'; + cm.enum = ['testConst']; + cm.const = 'testConst'; + + const model = convertToMetaModel(cm); + + expect(model).not.toBeUndefined(); + expect(model instanceof EnumModel).toEqual(true); + expect((model as EnumModel).values).toEqual([ + { + key: cm.const, + value: cm.const + } + ]); + expect(model.options.const?.originalInput).toEqual(cm.const); + }); + + test('should handle const', () => { + const cm = new CommonModel(); + cm.$id = 'test'; + cm.const = 'testConst'; + + const model = convertToMetaModel(cm); + + expect(model).not.toBeUndefined(); + expect(model instanceof AnyModel).toEqual(true); + expect(model.options.const?.originalInput).toEqual(cm.const); + }); + + test('should handle discriminator', () => { + const cm = new CommonModel(); + cm.$id = 'test'; + cm.discriminator = 'testDiscriminator'; + + const model = convertToMetaModel(cm); + + expect(model).not.toBeUndefined(); + expect(model instanceof AnyModel).toEqual(true); + expect(model.options.discriminator?.discriminator).toEqual( + cm.discriminator + ); + }); }); diff --git a/test/helpers/ConstrainHelpers.spec.ts b/test/helpers/ConstrainHelpers.spec.ts index 28a0cd9c59..c35add83b7 100644 --- a/test/helpers/ConstrainHelpers.spec.ts +++ b/test/helpers/ConstrainHelpers.spec.ts @@ -8,7 +8,6 @@ import { ConstrainedBooleanModel, ConstrainedDictionaryModel, ConstrainedEnumModel, - ConstrainedEnumValueModel, ConstrainedFloatModel, ConstrainedIntegerModel, ConstrainedObjectModel, @@ -35,27 +34,33 @@ import { } from '../TestUtils/TestConstrainer'; describe('ConstrainHelpers', () => { - const placeHolderModel = new AnyModel('', undefined); + const placeHolderModel = new AnyModel('', undefined, {}); afterEach(() => { jest.clearAllMocks(); }); describe('constrain ObjectModel', () => { test('should constrain correctly', () => { - const testProperty = new StringModel('', undefined); - const metaModel = new ObjectModel('test', undefined, { - testProperty: new ObjectPropertyModel( - 'testProperty', - false, - testProperty - ) - }); + const testProperty = new StringModel('', undefined, {}); + const metaModel = new ObjectModel( + 'test', + undefined, + {}, + { + testProperty: new ObjectPropertyModel( + 'testProperty', + false, + testProperty + ) + } + ); const constrainedModel = constrainMetaModel( mockedTypeMapping, mockedConstraints, { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedObjectModel).toEqual(true); @@ -70,25 +75,31 @@ describe('ConstrainHelpers', () => { }); test('should have access to partOfProperty', () => { - const testProperty = new StringModel('', undefined); - const metaModel = new ObjectModel('test', undefined, { - testProperty: new ObjectPropertyModel( - 'testProperty', - false, - testProperty - ) - }); + const testProperty = new StringModel('', undefined, {}); + const metaModel = new ObjectModel( + 'test', + undefined, + {}, + { + testProperty: new ObjectPropertyModel( + 'testProperty', + false, + testProperty + ) + } + ); constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never }); - expect(mockedTypeMapping.String).toBeCalledWith( + expect(mockedTypeMapping.String).toHaveBeenCalledWith( expect.objectContaining({ partOfProperty: expect.objectContaining({}) }) ); }); test('should handle recursive models', () => { - const model = new ObjectModel('testObj', undefined, {}); + const model = new ObjectModel('testObj', undefined, {}, {}); const objectPropertyModel = new ObjectPropertyModel( 'recursiveProp', false, @@ -102,7 +113,8 @@ describe('ConstrainHelpers', () => { { metaModel: model, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedObjectModel).toEqual(true); @@ -110,15 +122,18 @@ describe('ConstrainHelpers', () => { }); describe('constrain ReferenceModel', () => { test('should constrain correctly', () => { - const stringModel = new StringModel('', undefined); - const metaModel = new ReferenceModel('', undefined, stringModel); + const stringModel = new StringModel('', undefined, { + const: { originalInput: 'testConst' } + }); + const metaModel = new ReferenceModel('', undefined, {}, stringModel); const constrainedModel = constrainMetaModel( mockedTypeMapping, mockedConstraints, { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedReferenceModel).toEqual( @@ -131,10 +146,11 @@ describe('ConstrainHelpers', () => { expect(mockedConstraints.modelName).toHaveBeenCalledTimes(2); expect(mockedTypeMapping.String).toHaveBeenCalledTimes(1); expect(mockedTypeMapping.Reference).toHaveBeenCalledTimes(1); + expect(mockedConstraints.constant).toHaveBeenCalledTimes(1); }); test('should handle recursive models', () => { - const metaModel = new ReferenceModel('', undefined, placeHolderModel); + const metaModel = new ReferenceModel('', undefined, {}, placeHolderModel); metaModel.ref = metaModel; const constrainedModel = constrainMetaModel( mockedTypeMapping, @@ -142,7 +158,8 @@ describe('ConstrainHelpers', () => { { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedReferenceModel).toEqual( @@ -152,14 +169,15 @@ describe('ConstrainHelpers', () => { }); describe('constrain AnyModel', () => { test('should constrain correctly', () => { - const metaModel = new AnyModel('', undefined); + const metaModel = new AnyModel('', undefined, {}); const constrainedModel = constrainMetaModel( mockedTypeMapping, mockedConstraints, { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedAnyModel).toEqual(true); @@ -169,14 +187,15 @@ describe('ConstrainHelpers', () => { }); describe('constrain FloatModel', () => { test('should constrain correctly', () => { - const metaModel = new FloatModel('', undefined); + const metaModel = new FloatModel('', undefined, {}); const constrainedModel = constrainMetaModel( mockedTypeMapping, mockedConstraints, { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedFloatModel).toEqual(true); @@ -186,14 +205,15 @@ describe('ConstrainHelpers', () => { }); describe('constrain IntegerModel', () => { test('should constrain correctly', () => { - const metaModel = new IntegerModel('', undefined); + const metaModel = new IntegerModel('', undefined, {}); const constrainedModel = constrainMetaModel( mockedTypeMapping, mockedConstraints, { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedIntegerModel).toEqual(true); @@ -203,31 +223,36 @@ describe('ConstrainHelpers', () => { }); describe('constrain StringModel', () => { test('should constrain correctly', () => { - const metaModel = new StringModel('', undefined); + const metaModel = new StringModel('', undefined, { + const: { originalInput: 'testConst' } + }); const constrainedModel = constrainMetaModel( mockedTypeMapping, mockedConstraints, { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedStringModel).toEqual(true); expect(mockedConstraints.modelName).toHaveBeenCalledTimes(1); expect(mockedTypeMapping.String).toHaveBeenCalledTimes(1); + expect(mockedConstraints.constant).toHaveBeenCalledTimes(1); }); }); describe('constrain BooleanModel', () => { test('should constrain correctly', () => { - const metaModel = new BooleanModel('', undefined); + const metaModel = new BooleanModel('', undefined, {}); const constrainedModel = constrainMetaModel( mockedTypeMapping, mockedConstraints, { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedBooleanModel).toEqual(true); @@ -238,8 +263,8 @@ describe('ConstrainHelpers', () => { describe('constrain TupleModel', () => { test('should constrain correctly', () => { - const stringModel = new StringModel('', undefined); - const metaModel = new TupleModel('test', undefined, [ + const stringModel = new StringModel('', undefined, {}); + const metaModel = new TupleModel('test', undefined, {}, [ new TupleValueModel(0, stringModel) ]); const constrainedModel = constrainMetaModel( @@ -248,7 +273,8 @@ describe('ConstrainHelpers', () => { { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedTupleModel).toEqual(true); @@ -261,7 +287,7 @@ describe('ConstrainHelpers', () => { expect(mockedTypeMapping.String).toHaveBeenCalledTimes(1); }); test('should handle recursive models', () => { - const metaModel = new TupleModel('test', undefined, []); + const metaModel = new TupleModel('test', undefined, {}, []); metaModel.tuple.push(new TupleValueModel(0, metaModel)); const constrainedModel = constrainMetaModel( mockedTypeMapping, @@ -269,7 +295,8 @@ describe('ConstrainHelpers', () => { { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedTupleModel).toEqual(true); @@ -277,15 +304,16 @@ describe('ConstrainHelpers', () => { }); describe('constrain ArrayModel', () => { test('should constrain correctly', () => { - const stringModel = new StringModel('', undefined); - const metaModel = new ArrayModel('test', undefined, stringModel); + const stringModel = new StringModel('', undefined, {}); + const metaModel = new ArrayModel('test', undefined, {}, stringModel); const constrainedModel = constrainMetaModel( mockedTypeMapping, mockedConstraints, { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedArrayModel).toEqual(true); @@ -298,7 +326,7 @@ describe('ConstrainHelpers', () => { expect(mockedTypeMapping.String).toHaveBeenCalledTimes(1); }); test('should handle recursive models', () => { - const metaModel = new ArrayModel('test', undefined, placeHolderModel); + const metaModel = new ArrayModel('test', undefined, {}, placeHolderModel); metaModel.valueModel = metaModel; const constrainedModel = constrainMetaModel( mockedTypeMapping, @@ -306,7 +334,8 @@ describe('ConstrainHelpers', () => { { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedArrayModel).toEqual(true); @@ -314,15 +343,16 @@ describe('ConstrainHelpers', () => { }); describe('constrain UnionModel', () => { test('should constrain correctly', () => { - const stringModel = new StringModel('', undefined); - const metaModel = new UnionModel('test', undefined, [stringModel]); + const stringModel = new StringModel('', undefined, {}); + const metaModel = new UnionModel('test2', undefined, {}, [stringModel]); const constrainedModel = constrainMetaModel( mockedTypeMapping, mockedConstraints, { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedUnionModel).toEqual(true); @@ -335,7 +365,7 @@ describe('ConstrainHelpers', () => { expect(mockedTypeMapping.String).toHaveBeenCalledTimes(1); }); test('should handle recursive models', () => { - const metaModel = new UnionModel('test', undefined, []); + const metaModel = new UnionModel('test2', undefined, {}, []); metaModel.union.push(metaModel); const constrainedModel = constrainMetaModel( mockedTypeMapping, @@ -343,24 +373,63 @@ describe('ConstrainHelpers', () => { { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never + } + ); + expect(constrainedModel instanceof ConstrainedUnionModel).toEqual(true); + }); + test('should handle discriminator', () => { + const objectModel = new ObjectModel( + '', + undefined, + {}, + { + testDiscriminator: new ObjectPropertyModel( + 'testDiscriminator', + true, + new StringModel('', undefined, {}) + ) + } + ); + const refModel = new ReferenceModel('', undefined, {}, objectModel); + const metaModel = new UnionModel( + '', + undefined, + { discriminator: { discriminator: 'testDiscriminator' } }, + [refModel] + ); + const constrainedModel = constrainMetaModel( + mockedTypeMapping, + mockedConstraints, + { + metaModel, + options: {}, + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedUnionModel).toEqual(true); + expect(constrainedModel.options.discriminator?.type).toEqual('test'); }); }); describe('constrain EnumModel', () => { test('should constrain correctly', () => { - const metaModel = new EnumModel('test', undefined, [ - new EnumValueModel('test', 123) - ]); + const metaModelValue = new EnumValueModel('test', 123); + const metaModel = new EnumModel( + 'test', + undefined, + { const: { originalInput: 123 } }, + [metaModelValue] + ); const constrainedModel = constrainMetaModel( mockedTypeMapping, mockedConstraints, { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedEnumModel).toEqual(true); @@ -369,15 +438,17 @@ describe('ConstrainHelpers', () => { expect(mockedTypeMapping.Enum).toHaveBeenCalledTimes(1); expect(enumModel.values[0].key).toEqual('test'); expect(enumModel.values[0].value).toEqual(123); + expect(enumModel.options.const?.originalInput).toEqual(123); }); }); describe('constrain DictionaryModel', () => { test('should constrain correctly', () => { - const stringModel = new StringModel('', undefined); - const stringModel2 = new StringModel('', undefined); + const stringModel = new StringModel('', undefined, {}); + const stringModel2 = new StringModel('', undefined, {}); const metaModel = new DictionaryModel( 'test', undefined, + {}, stringModel, stringModel2 ); @@ -387,7 +458,8 @@ describe('ConstrainHelpers', () => { { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedDictionaryModel).toEqual( @@ -409,6 +481,7 @@ describe('ConstrainHelpers', () => { const metaModel = new DictionaryModel( 'test', undefined, + {}, placeHolderModel, placeHolderModel ); @@ -420,7 +493,8 @@ describe('ConstrainHelpers', () => { { metaModel, options: {}, - constrainedName: '' + constrainedName: '', + dependencyManager: undefined as never } ); expect(constrainedModel instanceof ConstrainedDictionaryModel).toEqual( diff --git a/test/helpers/Constraints.spec.ts b/test/helpers/Constraints.spec.ts index 4477a2bd11..af14a9f25d 100644 --- a/test/helpers/Constraints.spec.ts +++ b/test/helpers/Constraints.spec.ts @@ -45,16 +45,22 @@ describe('Constraints', () => { const constrainedModel = new ConstrainedObjectModel( '', undefined, + {}, '', {} ); - const metaModel = new ObjectModel('', undefined, { - Test: new ObjectPropertyModel( - 'Test', - false, - new AnyModel('', undefined) - ) - }); + const metaModel = new ObjectModel( + '', + undefined, + {}, + { + Test: new ObjectPropertyModel( + 'Test', + false, + new AnyModel('', undefined, {}) + ) + } + ); const renderedValue = NO_DUPLICATE_PROPERTIES( constrainedModel, metaModel, @@ -67,21 +73,27 @@ describe('Constraints', () => { const constrainedModel = new ConstrainedObjectModel( '', undefined, + {}, '', {} ); - const metaModel = new ObjectModel('', undefined, { - test: new ObjectPropertyModel( - 'test', - false, - new AnyModel('', undefined) - ), - Test: new ObjectPropertyModel( - 'Test', - false, - new AnyModel('', undefined) - ) - }); + const metaModel = new ObjectModel( + '', + undefined, + {}, + { + test: new ObjectPropertyModel( + 'test', + false, + new AnyModel('', undefined, {}) + ), + Test: new ObjectPropertyModel( + 'Test', + false, + new AnyModel('', undefined, {}) + ) + } + ); const renderedValue = NO_DUPLICATE_PROPERTIES( constrainedModel, metaModel, @@ -94,21 +106,27 @@ describe('Constraints', () => { const constrainedModel = new ConstrainedObjectModel( '', undefined, + {}, '', {} ); - const metaModel = new ObjectModel('', undefined, { - test: new ObjectPropertyModel( - 'test', - false, - new AnyModel('', undefined) - ), - Test: new ObjectPropertyModel( - 'Test', - false, - new AnyModel('', undefined) - ) - }); + const metaModel = new ObjectModel( + '', + undefined, + {}, + { + test: new ObjectPropertyModel( + 'test', + false, + new AnyModel('', undefined, {}) + ), + Test: new ObjectPropertyModel( + 'Test', + false, + new AnyModel('', undefined, {}) + ) + } + ); const renderedValue = NO_DUPLICATE_PROPERTIES( constrainedModel, metaModel, @@ -118,37 +136,48 @@ describe('Constraints', () => { expect(renderedValue).toEqual('Test'); }); test('should be able to handle multiple reserved properties', () => { - const constrainedModel = new ConstrainedObjectModel('', undefined, '', { - Test: new ConstrainedObjectPropertyModel( - 'Test', - 'Test', - false, - new ConstrainedAnyModel('', undefined, '') - ), - ReservedTest: new ConstrainedObjectPropertyModel( - 'ReservedTest', - 'ReservedTest', - false, - new ConstrainedAnyModel('', undefined, '') - ) - }); - const metaModel = new ObjectModel('', undefined, { - test: new ObjectPropertyModel( - 'test', - false, - new AnyModel('', undefined) - ), - Test: new ObjectPropertyModel( - 'Test', - false, - new AnyModel('', undefined) - ), - ReservedTest: new ObjectPropertyModel( - 'ReservedTest', - false, - new AnyModel('', undefined) - ) - }); + const constrainedModel = new ConstrainedObjectModel( + '', + undefined, + {}, + '', + { + Test: new ConstrainedObjectPropertyModel( + 'Test', + 'Test', + false, + new ConstrainedAnyModel('', undefined, {}, '') + ), + ReservedTest: new ConstrainedObjectPropertyModel( + 'ReservedTest', + 'ReservedTest', + false, + new ConstrainedAnyModel('', undefined, {}, '') + ) + } + ); + const metaModel = new ObjectModel( + '', + undefined, + {}, + { + test: new ObjectPropertyModel( + 'test', + false, + new AnyModel('', undefined, {}) + ), + Test: new ObjectPropertyModel( + 'Test', + false, + new AnyModel('', undefined, {}) + ), + ReservedTest: new ObjectPropertyModel( + 'ReservedTest', + false, + new AnyModel('', undefined, {}) + ) + } + ); const renderedValue = NO_DUPLICATE_PROPERTIES( constrainedModel, metaModel, @@ -160,9 +189,15 @@ describe('Constraints', () => { }); describe('NO_DUPLICATE_ENUM_KEYS', () => { test('should not do anything with no duplicate enum keys', () => { - const constrainedModel = new ConstrainedEnumModel('', undefined, '', []); - const metaModel = new EnumModel('', undefined, [ - new EnumValueModel('test', new AnyModel('', undefined)) + const constrainedModel = new ConstrainedEnumModel( + '', + undefined, + {}, + '', + [] + ); + const metaModel = new EnumModel('', undefined, {}, [ + new EnumValueModel('test', new AnyModel('', undefined, {})) ]); const renderedValue = NO_DUPLICATE_ENUM_KEYS( constrainedModel, @@ -173,10 +208,16 @@ describe('Constraints', () => { expect(renderedValue).toEqual('test'); }); test('should not use formatted enum key which another raw enum key is', () => { - const constrainedModel = new ConstrainedEnumModel('', undefined, '', []); - const metaModel = new EnumModel('', undefined, [ - new EnumValueModel('test', new AnyModel('', undefined)), - new EnumValueModel('Test', new AnyModel('', undefined)) + const constrainedModel = new ConstrainedEnumModel( + '', + undefined, + {}, + '', + [] + ); + const metaModel = new EnumModel('', undefined, {}, [ + new EnumValueModel('test', new AnyModel('', undefined, {})), + new EnumValueModel('Test', new AnyModel('', undefined, {})) ]); const renderedValue = NO_DUPLICATE_ENUM_KEYS( constrainedModel, @@ -187,10 +228,16 @@ describe('Constraints', () => { expect(renderedValue).toEqual('reserved_test'); }); test('should should keep the raw enum key if no clash', () => { - const constrainedModel = new ConstrainedEnumModel('', undefined, '', []); - const metaModel = new EnumModel('', undefined, [ - new EnumValueModel('test', new AnyModel('', undefined)), - new EnumValueModel('Test', new AnyModel('', undefined)) + const constrainedModel = new ConstrainedEnumModel( + '', + undefined, + {}, + '', + [] + ); + const metaModel = new EnumModel('', undefined, {}, [ + new EnumValueModel('test', new AnyModel('', undefined, {})), + new EnumValueModel('Test', new AnyModel('', undefined, {})) ]); const renderedValue = NO_DUPLICATE_ENUM_KEYS( constrainedModel, @@ -201,17 +248,22 @@ describe('Constraints', () => { expect(renderedValue).toEqual('Test'); }); test('should be able to handle multiple reserved enum keys', () => { - const constrainedModel = new ConstrainedEnumModel('', undefined, '', [ - new ConstrainedEnumValueModel('Test', new AnyModel('', undefined)), + const constrainedModel = new ConstrainedEnumModel('', undefined, {}, '', [ + new ConstrainedEnumValueModel( + 'Test', + new AnyModel('', undefined, {}), + 'Test' + ), new ConstrainedEnumValueModel( 'ReservedTest', - new AnyModel('', undefined) + new AnyModel('', undefined, {}), + 'ReservedTest' ) ]); - const metaModel = new EnumModel('', undefined, [ - new EnumValueModel('test', new AnyModel('', undefined)), - new EnumValueModel('Test', new AnyModel('', undefined)), - new EnumValueModel('ReservedTest', new AnyModel('', undefined)) + const metaModel = new EnumModel('', undefined, {}, [ + new EnumValueModel('test', new AnyModel('', undefined, {})), + new EnumValueModel('Test', new AnyModel('', undefined, {})), + new EnumValueModel('ReservedTest', new AnyModel('', undefined, {})) ]); const renderedValue = NO_DUPLICATE_ENUM_KEYS( constrainedModel, diff --git a/test/helpers/DependencyHelpers.spec.ts b/test/helpers/DependencyHelpers.spec.ts index 0d4d154a9f..68d7ff49a3 100644 --- a/test/helpers/DependencyHelpers.spec.ts +++ b/test/helpers/DependencyHelpers.spec.ts @@ -26,16 +26,17 @@ describe('DependencyHelper', () => { }); describe('makeUnique', () => { test('should remove duplicate regular instances', () => { - const stringModel = new ConstrainedStringModel('', undefined, ''); + const stringModel = new ConstrainedStringModel('', undefined, {}, ''); const nonUniqueArray = [stringModel, stringModel]; const uniqueArray = makeUnique(nonUniqueArray); expect(uniqueArray).toHaveLength(1); }); test('should remove duplicate reference instances', () => { - const stringModel = new ConstrainedStringModel('', undefined, ''); + const stringModel = new ConstrainedStringModel('', undefined, {}, ''); const ref1 = new ConstrainedReferenceModel( '', undefined, + {}, '', stringModel ); @@ -44,16 +45,18 @@ describe('DependencyHelper', () => { expect(uniqueArray).toHaveLength(1); }); test('should remove duplicate reference instances if the same name but different instance', () => { - const stringModel = new ConstrainedStringModel('', undefined, ''); + const stringModel = new ConstrainedStringModel('', undefined, {}, ''); const ref1 = new ConstrainedReferenceModel( 'name', undefined, + {}, '', stringModel ); const ref2 = new ConstrainedReferenceModel( 'name', undefined, + {}, '', stringModel ); @@ -62,16 +65,18 @@ describe('DependencyHelper', () => { expect(uniqueArray).toHaveLength(1); }); test('should remove duplicate reference value instances', () => { - const stringModel = new ConstrainedStringModel('', undefined, ''); + const stringModel = new ConstrainedStringModel('', undefined, {}, ''); const ref1 = new ConstrainedReferenceModel( '', undefined, + {}, '', stringModel ); const ref2 = new ConstrainedReferenceModel( '', undefined, + {}, '', stringModel ); @@ -80,14 +85,15 @@ describe('DependencyHelper', () => { expect(uniqueArray).toHaveLength(1); }); test('should remove duplicate name and type models', () => { - const stringModel = new ConstrainedStringModel('', undefined, ''); + const stringModel = new ConstrainedStringModel('', undefined, {}, ''); const ref = new ConstrainedReferenceModel( 'name', undefined, + {}, 'type', stringModel ); - const any = new ConstrainedAnyModel('name', undefined, 'type'); + const any = new ConstrainedAnyModel('name', undefined, {}, 'type'); const nonUniqueArray = [ref, any]; const uniqueArray = makeUnique(nonUniqueArray); expect(uniqueArray).toHaveLength(1); diff --git a/test/helpers/Splitter.spec.ts b/test/helpers/Splitter.spec.ts index d6658a61f9..51b308e64e 100644 --- a/test/helpers/Splitter.spec.ts +++ b/test/helpers/Splitter.spec.ts @@ -10,11 +10,16 @@ describe('Splitter', () => { jest.restoreAllMocks(); }); test('should split models when asked for it', () => { - const stringModel = new StringModel('testString', undefined); + const stringModel = new StringModel('testString', undefined, {}); const propertyModel = new ObjectPropertyModel('test', false, stringModel); - const model = new ObjectModel('testObj', undefined, { - test: propertyModel - }); + const model = new ObjectModel( + 'testObj', + undefined, + {}, + { + test: propertyModel + } + ); const options: SplitOptions = { splitString: true }; @@ -24,6 +29,7 @@ describe('Splitter', () => { expectedObjectModel.properties['test'].property = new ReferenceModel( stringModel.name, stringModel.originalInput, + {}, stringModel ); @@ -33,11 +39,16 @@ describe('Splitter', () => { expect(splittedModels[1] instanceof StringModel).toEqual(true); }); test('should not split models when not asked for', () => { - const stringModel = new StringModel('testString', undefined); + const stringModel = new StringModel('testString', undefined, {}); const propertyModel = new ObjectPropertyModel('test', false, stringModel); - const model = new ObjectModel('testObj', undefined, { - test: propertyModel - }); + const model = new ObjectModel( + 'testObj', + undefined, + {}, + { + test: propertyModel + } + ); const options: SplitOptions = { splitString: false }; @@ -47,11 +58,16 @@ describe('Splitter', () => { expect(splittedModels[0]).toEqual(model); }); test('should not split models when asked for something else', () => { - const stringModel = new StringModel('testString', undefined); + const stringModel = new StringModel('testString', undefined, {}); const propertyModel = new ObjectPropertyModel('test', false, stringModel); - const model = new ObjectModel('testObj', undefined, { - test: propertyModel - }); + const model = new ObjectModel( + 'testObj', + undefined, + {}, + { + test: propertyModel + } + ); const options: SplitOptions = { splitBoolean: true }; @@ -60,26 +76,36 @@ describe('Splitter', () => { expect(splittedModels[0]).toEqual(model); }); test('should split out nested models', () => { - const nestedStringModel = new StringModel('nestedString', undefined); + const nestedStringModel = new StringModel('nestedString', undefined, {}); const nestedPropertyModel = new ObjectPropertyModel( 'nestedStringProp', false, nestedStringModel ); - const nestedObjectModel = new ObjectModel('nestedTestObj', undefined, { - test: nestedPropertyModel - }); + const nestedObjectModel = new ObjectModel( + 'nestedTestObj', + undefined, + {}, + { + test: nestedPropertyModel + } + ); const objectPropertyModel = new ObjectPropertyModel( 'stringProp', false, nestedObjectModel ); - const stringModel = new StringModel('string', undefined); + const stringModel = new StringModel('string', undefined, {}); const propertyModel = new ObjectPropertyModel('test', false, stringModel); - const model = new ObjectModel('testObj', undefined, { - test: propertyModel, - nested: objectPropertyModel - }); + const model = new ObjectModel( + 'testObj', + undefined, + {}, + { + test: propertyModel, + nested: objectPropertyModel + } + ); const options: SplitOptions = { splitString: true, splitObject: true @@ -92,25 +118,35 @@ describe('Splitter', () => { expect(splittedModels[3]).toEqual(nestedStringModel); }); test('should handle already seen models', () => { - const stringModel = new StringModel('string', undefined); + const stringModel = new StringModel('string', undefined, {}); const nestedPropertyModel = new ObjectPropertyModel( 'nestedStringProp', false, stringModel ); - const nestedObjectModel = new ObjectModel('nestedTestObj', undefined, { - test: nestedPropertyModel - }); + const nestedObjectModel = new ObjectModel( + 'nestedTestObj', + undefined, + {}, + { + test: nestedPropertyModel + } + ); const objectPropertyModel = new ObjectPropertyModel( 'stringProp', false, nestedObjectModel ); const propertyModel = new ObjectPropertyModel('test', false, stringModel); - const model = new ObjectModel('testObj', undefined, { - test: propertyModel, - nested: objectPropertyModel - }); + const model = new ObjectModel( + 'testObj', + undefined, + {}, + { + test: propertyModel, + nested: objectPropertyModel + } + ); const options: SplitOptions = { splitString: true, splitObject: true @@ -122,7 +158,7 @@ describe('Splitter', () => { expect(splittedModels[2]).toEqual(nestedObjectModel); }); test('should handle recursive models', () => { - const model = new ObjectModel('testObj', undefined, {}); + const model = new ObjectModel('testObj', undefined, {}, {}); const objectPropertyModel = new ObjectPropertyModel( 'recursiveProp', false, diff --git a/test/interpreter/unit/InterpretAllOf.spec.ts b/test/interpreter/unit/InterpretAllOf.spec.ts index 11661dabe3..5f385b2448 100644 --- a/test/interpreter/unit/InterpretAllOf.spec.ts +++ b/test/interpreter/unit/InterpretAllOf.spec.ts @@ -3,6 +3,7 @@ import { CommonModel } from '../../../src/models/CommonModel'; import { Interpreter } from '../../../src/interpreter/Interpreter'; import { isModelObject } from '../../../src/interpreter/Utils'; import interpretAllOf from '../../../src/interpreter/InterpretAllOf'; +import { AsyncapiV2Schema } from '../../../src/models'; const interpreterOptionsAllowInheritance = { allowInheritance: true }; jest.mock('../../../src/interpreter/Interpreter'); jest.mock('../../../src/models/CommonModel'); @@ -110,4 +111,30 @@ describe('Interpretation of allOf', () => { expect(isModelObject).toHaveBeenCalled(); expect(model.addExtendedModel).toHaveBeenCalledWith(interpretedModel); }); + + test('should set discriminator', () => { + const item1 = AsyncapiV2Schema.toSchema({ + type: 'object', + $id: 'test', + discriminator: 'test' + }); + const schema = AsyncapiV2Schema.toSchema({ allOf: [item1] }); + const model = new CommonModel(); + const interpreter = new Interpreter(); + (interpreter.interpret as jest.Mock).mockReturnValue(new CommonModel()); + (interpreter.discriminatorProperty as jest.Mock).mockReturnValue( + item1.discriminator + ); + + interpretAllOf(schema, model, interpreter, {}); + + expect(model.discriminator).toBe(item1.discriminator); + expect(interpreter.discriminatorProperty).toHaveBeenCalledWith(item1); + expect(interpreter.interpretAndCombineSchema).toHaveBeenCalledWith( + item1, + model, + schema, + { discriminator: item1.discriminator } + ); + }); }); diff --git a/test/interpreter/unit/InterpretConst.spec.ts b/test/interpreter/unit/InterpretConst.spec.ts index bbec94cd6b..4e65fe97f0 100644 --- a/test/interpreter/unit/InterpretConst.spec.ts +++ b/test/interpreter/unit/InterpretConst.spec.ts @@ -1,6 +1,7 @@ import { CommonModel } from '../../../src/models/CommonModel'; import interpretConst from '../../../src/interpreter/InterpretConst'; import { inferTypeFromValue } from '../../../src/interpreter/Utils'; +import { AsyncapiV2Schema } from '../../../src'; jest.mock('../../../src/interpreter/Utils'); jest.mock('../../../src/models/CommonModel'); describe('Interpretation of const', () => { @@ -19,25 +20,26 @@ describe('Interpretation of const', () => { }); test('should not infer type from const if schema have type', () => { const model = new CommonModel(); - const schema: any = { type: 'string', const: 'test' }; - interpretConst(schema, model); + const schema = AsyncapiV2Schema.toSchema({ type: 'string', const: 'test' }); + interpretConst(schema, model, { discriminator: 'test' }); expect(model.setType).not.toHaveBeenCalled(); expect(model.enum).toEqual([schema.const]); }); test('should infer type and enum', () => { (inferTypeFromValue as jest.Mock).mockReturnValue('string'); - const schema: any = { const: 'test' }; + const schema = AsyncapiV2Schema.toSchema({ const: 'test' }); const model = new CommonModel(); - interpretConst(schema, model); + interpretConst(schema, model, { discriminator: 'test' }); expect(model.enum).toEqual([schema.const]); + expect(model.const).toEqual(schema.const); expect(inferTypeFromValue).toHaveBeenNthCalledWith(1, 'test'); expect(model.setType).toHaveBeenNthCalledWith(1, 'string'); }); test('should not infer unknown type', () => { (inferTypeFromValue as jest.Mock).mockReturnValue(undefined); - const schema: any = { const: 'test' }; + const schema = AsyncapiV2Schema.toSchema({ const: 'test' }); const model = new CommonModel(); - interpretConst(schema, model); + interpretConst(schema, model, { discriminator: 'test' }); expect(model.enum).toEqual([schema.const]); expect(model.setType).not.toHaveBeenCalled(); expect(inferTypeFromValue).toHaveBeenNthCalledWith(1, 'test'); diff --git a/test/interpreter/unit/InterpretOneOf.spec.ts b/test/interpreter/unit/InterpretOneOf.spec.ts index e058abc2b5..1d185f0876 100644 --- a/test/interpreter/unit/InterpretOneOf.spec.ts +++ b/test/interpreter/unit/InterpretOneOf.spec.ts @@ -3,6 +3,7 @@ import { CommonModel } from '../../../src/models/CommonModel'; import { Interpreter } from '../../../src/interpreter/Interpreter'; import { isModelObject } from '../../../src/interpreter/Utils'; import InterpretOneOf from '../../../src/interpreter/InterpretOneOf'; +import { AsyncapiV2Schema } from '../../../src/models'; jest.mock('../../../src/interpreter/Interpreter'); jest.mock('../../../src/models/CommonModel'); jest.mock('../../../src/interpreter/Utils'); @@ -48,4 +49,50 @@ describe('Interpretation of oneOf', () => { expect(model.addItemUnion).toHaveBeenCalledTimes(2); expect(JSON.stringify(model)).toEqual(JSON.stringify(new CommonModel())); }); + describe('discriminator', () => { + test('should set discriminator when discriminator is set in schema', () => { + const item1 = AsyncapiV2Schema.toSchema({ + type: 'object', + $id: 'test' + }); + const schema = AsyncapiV2Schema.toSchema({ + discriminator: 'test', + oneOf: [item1] + }); + const model = new CommonModel(); + const interpreter = new Interpreter(); + (interpreter.discriminatorProperty as jest.Mock).mockReturnValue( + schema.discriminator + ); + + InterpretOneOf(schema, model, interpreter, {}); + + expect(model.discriminator).toBe(schema.discriminator); + expect(interpreter.discriminatorProperty).toHaveBeenCalledWith(schema); + expect(interpreter.interpret).toHaveBeenCalledWith(item1, { + discriminator: schema.discriminator + }); + }); + + test('should set discriminator when discriminator is set in one of the oneOf models', () => { + const item1 = AsyncapiV2Schema.toSchema({ + discriminator: 'test', + type: 'object', + $id: 'test' + }); + const schema = AsyncapiV2Schema.toSchema({ + oneOf: [item1] + }); + const model = new CommonModel(); + const interpreter = new Interpreter(); + const interpretedModel = new CommonModel(); + interpretedModel.discriminator = item1.discriminator; + (interpreter.interpret as jest.Mock).mockReturnValue(interpretedModel); + + InterpretOneOf(schema, model, interpreter, {}); + + expect(model.discriminator).toBe(item1.discriminator); + expect(interpreter.interpret).toHaveBeenCalledWith(item1, {}); + }); + }); }); diff --git a/test/interpreter/unit/InterpretOneOfWithAllOf.spec.ts b/test/interpreter/unit/InterpretOneOfWithAllOf.spec.ts index f660ab7239..a0d261ed19 100644 --- a/test/interpreter/unit/InterpretOneOfWithAllOf.spec.ts +++ b/test/interpreter/unit/InterpretOneOfWithAllOf.spec.ts @@ -1,6 +1,7 @@ import { CommonModel } from '../../../src/models/CommonModel'; import { Interpreter } from '../../../src/interpreter/Interpreter'; import InterpretOneOfWithAllOf from '../../../src/interpreter/InterpretOneOfWithAllOf'; +import { AsyncapiV2Schema } from '../../../src'; describe('Interpretation of oneOf with allOf', () => { beforeEach(() => { @@ -25,11 +26,12 @@ describe('Interpretation of oneOf with allOf', () => { test('should add oneOf items to CommonModel union', () => { const model = new CommonModel(); - const schema = { + const schema = AsyncapiV2Schema.toSchema({ allOf: [ { title: 'Animal', type: 'object', + discriminator: 'animalType', properties: { animalType: { title: 'Animal Type', @@ -73,7 +75,7 @@ describe('Interpretation of oneOf with allOf', () => { } } ] - }; + }); const interpreter = new Interpreter(); @@ -83,12 +85,13 @@ describe('Interpretation of oneOf with allOf', () => { expect(model.type).toBeUndefined(); expect(model.union).toHaveLength(2); + expect(model.discriminator).toBe('animalType'); const cat = model.union?.find((item) => item.$id === 'Cat'); expect(cat).not.toBeUndefined(); expect(cat?.properties?.animalType).toMatchObject({ $id: 'Animal Type', - enum: ['Cat', 'Dog'] + enum: ['Cat'] }); expect(cat?.properties).toHaveProperty('age'); expect(cat?.properties).toHaveProperty('huntingSkill'); diff --git a/test/interpreter/unit/InterpretProperties.spec.ts b/test/interpreter/unit/InterpretProperties.spec.ts index 513e1278ad..794e1aedc6 100644 --- a/test/interpreter/unit/InterpretProperties.spec.ts +++ b/test/interpreter/unit/InterpretProperties.spec.ts @@ -2,6 +2,7 @@ import { CommonModel } from '../../../src/models/CommonModel'; import { Interpreter } from '../../../src/interpreter/Interpreter'; import interpretProperties from '../../../src/interpreter/InterpretProperties'; +import { AsyncapiV2Schema } from '../../../src'; jest.mock('../../../src/interpreter/Interpreter'); jest.mock('../../../src/models/CommonModel'); CommonModel.mergeCommonModels = jest.fn(); @@ -70,4 +71,27 @@ describe('Interpretation of properties', () => { schema ); }); + + test('should set discriminator when discriminator is set in interpreterOptions', () => { + const property = AsyncapiV2Schema.toSchema({ + type: 'string' + }); + const schema = AsyncapiV2Schema.toSchema({ + type: 'object', + properties: { + discriminatorProperty: property + } + }); + const model = new CommonModel(); + const interpreter = new Interpreter(); + + interpretProperties(schema, model, interpreter, { + discriminator: 'discriminatorProperty' + }); + + expect(model.discriminator).toBe('discriminatorProperty'); + expect(interpreter.interpret).toHaveBeenCalledWith(property, { + discriminator: 'discriminatorProperty' + }); + }); }); diff --git a/test/interpreter/unit/InterpretThenElse.spec.ts b/test/interpreter/unit/InterpretThenElse.spec.ts new file mode 100644 index 0000000000..37a9a59c20 --- /dev/null +++ b/test/interpreter/unit/InterpretThenElse.spec.ts @@ -0,0 +1,110 @@ +import { CommonModel } from '../../../src/models/CommonModel'; +import { Interpreter } from '../../../src/interpreter/Interpreter'; +import InterpretThenElse from '../../../src/interpreter/InterpretThenElse'; + +describe('Interpretation of then/else', () => { + beforeEach(() => { + jest.resetAllMocks(); + }); + afterAll(() => { + jest.restoreAllMocks(); + }); + + test('should not do anything if schema does not contain then/else', () => { + const model = new CommonModel(); + model.addItemUnion = jest.fn(); + const interpreter = new Interpreter(); + interpreter.interpret = jest.fn(); + + InterpretThenElse({}, model, interpreter); + + expect(interpreter.interpret).not.toHaveBeenCalled(); + expect(model.addItemUnion).not.toHaveBeenCalled(); + expect(JSON.stringify(model)).toEqual(JSON.stringify(new CommonModel())); + }); + + test('should handle required properties', () => { + const model1 = new CommonModel(); + const model2 = new CommonModel(); + + const eventSchema = { + type: 'object', + properties: { + event_time: { + type: 'string', + format: 'date-time' + } + }, + required: ['event_time'] + }; + + InterpretThenElse( + { + then: { + ...eventSchema + } + }, + model1, + new Interpreter(), + {} + ); + + expect(model1.properties?.event_time).toBeDefined(); + expect(model1.required).toBe(undefined); + + InterpretThenElse( + { + else: { + allOf: [ + { + ...eventSchema + } + ] + } + }, + model2, + new Interpreter(), + {} + ); + + expect(model2.properties?.event_time).toBeDefined(); + expect(model2.required).toBe(undefined); + }); + + test('should handle recursive schemas', () => { + const schema = { + $schema: 'http://json-schema.org/draft-07/schema#', + properties: { + condition: { + type: 'string' + }, + test: { + properties: { + test2: { + type: 'string' + } + } + } + }, + if: { + properties: { + condition: { + const: 'something' + } + } + }, + then: { + properties: { + test: { + required: ['test2'] + } + } + } + }; + + const model = new Interpreter().interpret(schema); + + expect(model?.properties?.test).toBeDefined(); + expect(model?.properties?.test.required).toBe(undefined); + }); +}); diff --git a/test/interpreter/unit/Interpreter.spec.ts b/test/interpreter/unit/Interpreter.spec.ts index 004be6db2c..dd066f7cd4 100644 --- a/test/interpreter/unit/Interpreter.spec.ts +++ b/test/interpreter/unit/Interpreter.spec.ts @@ -13,7 +13,14 @@ import interpretAdditionalProperties from '../../../src/interpreter/InterpretAdd import interpretAdditionalItems from '../../../src/interpreter/InterpretAdditionalItems'; import interpretNot from '../../../src/interpreter/InterpretNot'; import interpretDependencies from '../../../src/interpreter/InterpretDependencies'; -import { CommonModel } from '../../../src/models'; +import InterpretThenElse from '../../../src/interpreter/InterpretThenElse'; +import { + AsyncapiV2Schema, + CommonModel, + OpenapiV3Schema, + SwaggerV2Schema, + defaultMergingOptions +} from '../../../src/models'; import { Draft7Schema } from '../../../src/models/Draft7Schema'; jest.mock('../../../src/interpreter/Utils'); @@ -26,6 +33,7 @@ jest.mock('../../../src/interpreter/InterpretAdditionalProperties'); jest.mock('../../../src/interpreter/InterpretNot'); jest.mock('../../../src/interpreter/InterpretDependencies'); jest.mock('../../../src/interpreter/InterpretAdditionalItems'); +jest.mock('../../../src/interpreter/InterpretThenElse'); CommonModel.mergeCommonModels = jest.fn(); /** * Some of these test are purely theoretical and have little if any merit @@ -55,12 +63,14 @@ describe('Interpreter', () => { }); test('should inherit type from schema', () => { const schema = { - type: 'string' + type: 'string', + format: 'date-time' }; const interpreter = new Interpreter(); const model = interpreter.interpret(schema); expect(model).not.toBeUndefined(); expect(model?.type).toEqual('string'); + expect(model?.format).toEqual('date-time'); }); test('should return model with all types if true schema', () => { const schema = true; @@ -136,7 +146,9 @@ describe('Interpreter', () => { 1, model, expectedSimplifiedModel, - schema + schema, + new Map(), + defaultMergingOptions ); }); }); @@ -160,6 +172,7 @@ describe('Interpreter', () => { expect(interpretConst).toHaveBeenNthCalledWith( 1, schema, + expect.anything(), expect.anything() ); }); @@ -229,6 +242,18 @@ describe('Interpreter', () => { Interpreter.defaultInterpreterOptions ); }); + test('should always try to interpret if/then/else', () => { + const schema = {}; + const interpreter = new Interpreter(); + interpreter.interpret(schema); + expect(InterpretThenElse).toHaveBeenNthCalledWith( + 1, + schema, + expect.anything(), + expect.anything(), + Interpreter.defaultInterpreterOptions + ); + }); test('should always try to interpret additionalItems', () => { const schema = {}; const interpreter = new Interpreter(); @@ -254,4 +279,38 @@ describe('Interpreter', () => { type: 'string' }); }); + describe('discriminatorProperty', () => { + test('should interpret AsyncapiV2Schema discriminator property', () => { + const schema = AsyncapiV2Schema.toSchema({ + discriminator: 'AsyncapiV2SchemaDiscriminatorPropertyName', + type: 'object', + $id: 'test' + }); + const interpreter = new Interpreter(); + const discriminator = interpreter.discriminatorProperty(schema); + expect(discriminator).toBe('AsyncapiV2SchemaDiscriminatorPropertyName'); + }); + test('should interpret SwaggerV2Schema discriminator property', () => { + const schema = SwaggerV2Schema.toSchema({ + discriminator: 'SwaggerV2SchemaDiscriminatorPropertyName', + type: 'object', + $id: 'test' + }); + const interpreter = new Interpreter(); + const discriminator = interpreter.discriminatorProperty(schema); + expect(discriminator).toBe('SwaggerV2SchemaDiscriminatorPropertyName'); + }); + test('should interpret OpenapiV3Schema discriminator property', () => { + const schema = OpenapiV3Schema.toSchema({ + discriminator: { + propertyName: 'OpenapiV3SchemaDiscriminatorPropertyName' + }, + type: 'object', + $id: 'test' + }); + const interpreter = new Interpreter(); + const discriminator = interpreter.discriminatorProperty(schema); + expect(discriminator).toBe('OpenapiV3SchemaDiscriminatorPropertyName'); + }); + }); }); diff --git a/test/interpreter/unit/interpretOneOfWithProperties.spec.ts b/test/interpreter/unit/interpretOneOfWithProperties.spec.ts index 1fb13f0a97..374a8874e6 100644 --- a/test/interpreter/unit/interpretOneOfWithProperties.spec.ts +++ b/test/interpreter/unit/interpretOneOfWithProperties.spec.ts @@ -1,6 +1,7 @@ import { CommonModel } from '../../../src/models/CommonModel'; import { Interpreter } from '../../../src/interpreter/Interpreter'; import interpretOneOfWithProperties from '../../../src/interpreter/InterpretOneOfWithProperties'; +import { AsyncapiV2Schema } from '../../../src'; describe('Interpretation of oneOf with properties', () => { beforeEach(() => { @@ -25,9 +26,10 @@ describe('Interpretation of oneOf with properties', () => { test('should add oneOf items to CommonModel union', () => { const model = new CommonModel(); - const schema = { + const schema = AsyncapiV2Schema.toSchema({ title: 'Animal', type: 'object', + discriminator: 'animalType', properties: { animalType: { title: 'Animal Type', @@ -69,7 +71,7 @@ describe('Interpretation of oneOf with properties', () => { } } ] - }; + }); const interpreter = new Interpreter(); @@ -79,12 +81,13 @@ describe('Interpretation of oneOf with properties', () => { expect(model.type).toBeUndefined(); expect(model.union).toHaveLength(2); + expect(model.discriminator).toBe('animalType'); const cat = model.union?.find((item) => item.$id === 'Cat'); expect(cat).not.toBeUndefined(); expect(cat?.properties?.animalType).toMatchObject({ $id: 'Animal Type', - enum: ['Cat', 'Dog'] + enum: ['Cat'] }); expect(cat?.properties).toHaveProperty('age'); expect(cat?.properties).toHaveProperty('huntingSkill'); diff --git a/test/models/CommonModel.spec.ts b/test/models/CommonModel.spec.ts index ba3a17c1b4..ce01f83445 100644 --- a/test/models/CommonModel.spec.ts +++ b/test/models/CommonModel.spec.ts @@ -123,7 +123,7 @@ describe('CommonModel', () => { }); }); describe('extend', () => { - test('should return a string ', () => { + test('should return a string', () => { const doc = { extend: 'reference' }; const d = CommonModel.toCommonModel(doc); expect(d.extend).not.toBeUndefined(); @@ -245,6 +245,33 @@ describe('CommonModel', () => { expect(doc1.required).toBeUndefined(); }); }); + describe('format', () => { + test('should be merged when only right side is defined', () => { + const doc = {}; + let doc1 = CommonModel.toCommonModel(doc); + const doc2 = CommonModel.toCommonModel(doc); + doc2.format = 'date-time'; + doc1 = CommonModel.mergeCommonModels(doc1, doc2, doc); + expect(doc1.format).toEqual(doc2.format); + }); + test('should not be merged when both sides are defined', () => { + const doc = {}; + let doc1 = CommonModel.toCommonModel(doc); + const doc2 = CommonModel.toCommonModel(doc); + doc2.format = 'date-time'; + doc1.format = 'date'; + doc1 = CommonModel.mergeCommonModels(doc1, doc2, doc); + expect(doc1.format).not.toEqual(doc2.format); + expect(doc1.format).toEqual('date'); + }); + test('should not change if nothing is defined', () => { + const doc = {}; + let doc1 = CommonModel.toCommonModel(doc); + const doc2 = CommonModel.toCommonModel(doc); + doc1 = CommonModel.mergeCommonModels(doc1, doc2, doc); + expect(doc1.format).toBeUndefined(); + }); + }); describe('extend', () => { test('should be merged when only right side is defined', () => { const doc = {}; @@ -531,6 +558,84 @@ describe('CommonModel', () => { expect(dogModel.properties).toHaveProperty('packSize'); expect(dogModel.properties).not.toHaveProperty('huntingSkill'); }); + test('should not carry over properties to other models when mergeTo property is anonymous_schema', () => { + const pet = { + title: 'Pet', + type: 'object', + properties: { + breed: { + $id: 'anonymous_schema_1', + type: 'string' + } + } + }; + const petModel = CommonModel.toCommonModel(pet); + + const cat = {}; + const catModel = CommonModel.toCommonModel(cat); + CommonModel.mergeCommonModels(catModel, petModel, cat); + CommonModel.mergeCommonModels( + catModel, + CommonModel.toCommonModel({ + title: 'Cat', + properties: { + breed: { + $id: 'CatBreed', + type: 'string' + } + } + }), + cat + ); + + const dog = {}; + const dogModel = CommonModel.toCommonModel(dog); + CommonModel.mergeCommonModels(dogModel, petModel, dog); + CommonModel.mergeCommonModels( + dogModel, + CommonModel.toCommonModel({ + title: 'Dog', + properties: { + breed: { + $id: 'DogBreed', + type: 'string' + } + } + }), + dog + ); + + expect(catModel.properties).toHaveProperty('breed'); + expect(catModel.properties?.breed.$id).toBe('CatBreed'); + + expect(dogModel.properties).toHaveProperty('breed'); + expect(dogModel.properties?.breed.$id).toBe('DogBreed'); + }); + test('should be merged when mergeTo property is anonymous_schema and mergeFrom property is not anonymous_schema', () => { + const doc = { + $id: 'CloudEvent', + type: 'object', + properties: { + type: { + $id: 'anonymous_schema_1', + type: 'string' + } + } + }; + const mergeTo = CommonModel.toCommonModel(doc); + const mergeFrom = CommonModel.toCommonModel({ + $id: 'Cat', + type: 'object', + properties: { + type: { + $id: 'CatType', + const: 'Cat' + } + } + }); + const merged = CommonModel.mergeCommonModels(mergeTo, mergeFrom, doc); + expect(merged.properties?.type.$id).toContain('CatType'); + }); }); describe('patternProperties', () => { diff --git a/test/models/ConstrainedMetaModel.spec.ts b/test/models/ConstrainedMetaModel.spec.ts index 481f7dd8e1..53e5d96729 100644 --- a/test/models/ConstrainedMetaModel.spec.ts +++ b/test/models/ConstrainedMetaModel.spec.ts @@ -7,9 +7,9 @@ import { ConstrainedBooleanModel, ConstrainedDictionaryModel, ConstrainedEnumModel, + ConstrainedMetaModel, ConstrainedObjectModel, ConstrainedObjectPropertyModel, - ConstrainedReferenceModel, ConstrainedStringModel, ConstrainedTupleModel, ConstrainedUnionModel, @@ -32,15 +32,45 @@ import { } from '../TestUtils/TestConstrainer'; describe('ConstrainedMetaModel', () => { + test('should not carry over options from metaModel to constrainedModel', () => { + const metaModel = new StringModel('', undefined, { + const: { + originalInput: 'testConst' + }, + discriminator: { + originalInput: 'testDiscriminator' + } + }); + + class ConstrainedTestModel extends ConstrainedMetaModel {} + + const constrainedTestModel = new ConstrainedTestModel( + '', + undefined, + metaModel.options, + '' + ); + + expect(constrainedTestModel.options === metaModel.options).toEqual(false); + expect( + constrainedTestModel.options.const === metaModel.options.const + ).toEqual(false); + expect( + constrainedTestModel.options.discriminator === + metaModel.options.discriminator + ).toEqual(false); + }); + describe('ReferenceModel', () => { test('should return no dependencies', () => { - const stringModel = new StringModel('', undefined); - const rawModel = new ReferenceModel('', undefined, stringModel); + const stringModel = new StringModel('', undefined, {}); + const rawModel = new ReferenceModel('', undefined, {}, stringModel); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }); const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(0); @@ -48,12 +78,13 @@ describe('ConstrainedMetaModel', () => { }); describe('StringModel', () => { test('should return no dependencies', () => { - const rawModel = new StringModel('', undefined); + const rawModel = new StringModel('', undefined, {}); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }); const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(0); @@ -61,12 +92,13 @@ describe('ConstrainedMetaModel', () => { }); describe('AnyModel', () => { test('should return no dependencies', () => { - const rawModel = new AnyModel('', undefined); + const rawModel = new AnyModel('', undefined, {}); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }); const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(0); @@ -74,12 +106,13 @@ describe('ConstrainedMetaModel', () => { }); describe('FloatModel', () => { test('should return no dependencies', () => { - const rawModel = new FloatModel('', undefined); + const rawModel = new FloatModel('', undefined, {}); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }); const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(0); @@ -87,12 +120,13 @@ describe('ConstrainedMetaModel', () => { }); describe('IntegerModel', () => { test('should return no dependencies', () => { - const rawModel = new IntegerModel('', undefined); + const rawModel = new IntegerModel('', undefined, {}); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }); const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(0); @@ -100,12 +134,13 @@ describe('ConstrainedMetaModel', () => { }); describe('BooleanModel', () => { test('should return no dependencies', () => { - const rawModel = new BooleanModel('', undefined); + const rawModel = new BooleanModel('', undefined, {}); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }); const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(0); @@ -113,11 +148,11 @@ describe('ConstrainedMetaModel', () => { }); describe('TupleModel', () => { test('should return all reference dependencies', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); const referenceTupleModel = new TupleValueModel(0, referenceModel); const stringTupleModel = new TupleValueModel(1, stringModel); - const rawModel = new TupleModel('test', undefined, [ + const rawModel = new TupleModel('test', undefined, {}, [ referenceTupleModel, stringTupleModel ]); @@ -125,29 +160,31 @@ describe('ConstrainedMetaModel', () => { const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedTupleModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); expect(dependencies[0]).toEqual(model.tuple[0].value); }); test('should return inner reference dependencies', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); - const unionModel = new UnionModel('union', undefined, [ + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); + const unionModel = new UnionModel('union', undefined, {}, [ stringModel, referenceModel ]); const unionTupleModel = new TupleValueModel(0, unionModel); const stringTupleModel = new TupleValueModel(1, stringModel); - const rawModel = new TupleModel('test', undefined, [ + const rawModel = new TupleModel('test', undefined, {}, [ unionTupleModel, stringTupleModel ]); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedTupleModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); @@ -157,11 +194,11 @@ describe('ConstrainedMetaModel', () => { }); test('should not return duplicate dependencies', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); const referenceTupleModel = new TupleValueModel(0, referenceModel); const reference2TupleModel = new TupleValueModel(1, referenceModel); - const rawModel = new TupleModel('test', undefined, [ + const rawModel = new TupleModel('test', undefined, {}, [ referenceTupleModel, reference2TupleModel ]); @@ -169,19 +206,25 @@ describe('ConstrainedMetaModel', () => { const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedTupleModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); }); test('should not return duplicate dependencies when different reference instances', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); - const referenceModel2 = new ReferenceModel('', undefined, stringModel); + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); + const referenceModel2 = new ReferenceModel( + '', + undefined, + {}, + stringModel + ); const referenceTupleModel = new TupleValueModel(0, referenceModel); const reference2TupleModel = new TupleValueModel(1, referenceModel2); - const rawModel = new TupleModel('test', undefined, [ + const rawModel = new TupleModel('test', undefined, {}, [ referenceTupleModel, reference2TupleModel ]); @@ -189,7 +232,8 @@ describe('ConstrainedMetaModel', () => { const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedTupleModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); @@ -197,9 +241,9 @@ describe('ConstrainedMetaModel', () => { }); describe('ObjectModel', () => { test('should return inner reference dependencies', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); - const unionModel = new UnionModel('union', undefined, [ + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); + const unionModel = new UnionModel('union', undefined, {}, [ stringModel, referenceModel ]); @@ -208,14 +252,20 @@ describe('ConstrainedMetaModel', () => { false, unionModel ); - const rawModel = new ObjectModel('test', undefined, { - union: unionObjectPropertyModel - }); + const rawModel = new ObjectModel( + 'test', + undefined, + {}, + { + union: unionObjectPropertyModel + } + ); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedObjectModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); @@ -224,26 +274,38 @@ describe('ConstrainedMetaModel', () => { ); }); test('should return property dependency even if the name is the same as property', () => { - const stringModel = new StringModel('arrayProp', undefined); + const stringModel = new StringModel('arrayProp', undefined, {}); const referenceModel = new ReferenceModel( 'arrayProp', undefined, + {}, stringModel ); - const arrayModel = new ArrayModel('arrayProp', undefined, referenceModel); + const arrayModel = new ArrayModel( + 'arrayProp', + undefined, + {}, + referenceModel + ); const referenceArrayPropertyModel = new ObjectPropertyModel( 'arrayProp', false, arrayModel ); - const rawModel = new ObjectModel('test', undefined, { - arrayProp: referenceArrayPropertyModel - }); + const rawModel = new ObjectModel( + 'test', + undefined, + {}, + { + arrayProp: referenceArrayPropertyModel + } + ); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedObjectModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); @@ -253,8 +315,8 @@ describe('ConstrainedMetaModel', () => { ); }); test('should return all reference dependencies', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); const referenceObjectPropertyModel = new ObjectPropertyModel( 'reference', false, @@ -265,15 +327,21 @@ describe('ConstrainedMetaModel', () => { false, stringModel ); - const rawModel = new ObjectModel('test', undefined, { - reference: referenceObjectPropertyModel, - string: stringObjectPropertyModel - }); + const rawModel = new ObjectModel( + 'test', + undefined, + {}, + { + reference: referenceObjectPropertyModel, + string: stringObjectPropertyModel + } + ); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedObjectModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); @@ -281,10 +349,11 @@ describe('ConstrainedMetaModel', () => { }); test('should not return self reference', () => { - const rawModel = new ObjectModel('ObjectTest', undefined, {}); + const rawModel = new ObjectModel('ObjectTest', undefined, {}, {}); const referenceModel = new ReferenceModel( rawModel.name, undefined, + {}, rawModel ); const referenceObjectPropertyModel = new ObjectPropertyModel( @@ -297,17 +366,19 @@ describe('ConstrainedMetaModel', () => { const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedObjectModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(0); }); test('should not return duplicate dependencies', () => { - const stringModel = new StringModel('string', undefined); + const stringModel = new StringModel('string', undefined, {}); const referenceModel = new ReferenceModel( 'reference', undefined, + {}, stringModel ); const referenceObjectPropertyModel = new ObjectPropertyModel( @@ -320,15 +391,21 @@ describe('ConstrainedMetaModel', () => { false, referenceModel ); - const rawModel = new ObjectModel('test', undefined, { - reference: referenceObjectPropertyModel, - reference2: reference2ObjectPropertyModel - }); + const rawModel = new ObjectModel( + 'test', + undefined, + {}, + { + reference: referenceObjectPropertyModel, + reference2: reference2ObjectPropertyModel + } + ); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedObjectModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); @@ -336,15 +413,17 @@ describe('ConstrainedMetaModel', () => { }); test('should not return duplicate dependencies when different reference instances', () => { - const stringModel = new StringModel('string', undefined); + const stringModel = new StringModel('string', undefined, {}); const referenceModel = new ReferenceModel( 'reference', undefined, + {}, stringModel ); const referenceModel2 = new ReferenceModel( 'reference', undefined, + {}, stringModel ); const referenceObjectPropertyModel = new ObjectPropertyModel( @@ -357,15 +436,21 @@ describe('ConstrainedMetaModel', () => { false, referenceModel2 ); - const rawModel = new ObjectModel('test', undefined, { - reference: referenceObjectPropertyModel, - reference2: reference2ObjectPropertyModel - }); + const rawModel = new ObjectModel( + 'test', + undefined, + {}, + { + reference: referenceObjectPropertyModel, + reference2: reference2ObjectPropertyModel + } + ); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedObjectModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); @@ -374,14 +459,14 @@ describe('ConstrainedMetaModel', () => { describe('containsPropertyType', () => { test('should find present property type and those who are not', () => { - const stringModel = new ConstrainedStringModel('', undefined, ''); + const stringModel = new ConstrainedStringModel('', undefined, {}, ''); const stringObjectPropertyModel = new ConstrainedObjectPropertyModel( 'string', '', false, stringModel ); - const rawModel = new ConstrainedObjectModel('test', undefined, '', { + const rawModel = new ConstrainedObjectModel('test', undefined, {}, '', { string: stringObjectPropertyModel }); expect(rawModel.containsPropertyType(ConstrainedStringModel)).toEqual( @@ -400,7 +485,7 @@ describe('ConstrainedMetaModel', () => { 'referenceModel' ); const stringEnumValueModel = new EnumValueModel('string', 'stringModel'); - const rawModel = new EnumModel('test', undefined, [ + const rawModel = new EnumModel('test', undefined, {}, [ referenceEnumValueModel, stringEnumValueModel ]); @@ -408,7 +493,8 @@ describe('ConstrainedMetaModel', () => { const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedEnumModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(0); @@ -416,11 +502,12 @@ describe('ConstrainedMetaModel', () => { }); describe('DictionaryModel', () => { test('should return all reference dependencies', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); const rawModel = new DictionaryModel( 'test', undefined, + {}, referenceModel, stringModel ); @@ -428,7 +515,8 @@ describe('ConstrainedMetaModel', () => { const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedDictionaryModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); @@ -436,15 +524,16 @@ describe('ConstrainedMetaModel', () => { }); test('should return inner reference dependencies', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); - const unionModel = new UnionModel('union', undefined, [ + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); + const unionModel = new UnionModel('union', undefined, {}, [ stringModel, referenceModel ]); const rawModel = new DictionaryModel( 'test', undefined, + {}, unionModel, stringModel ); @@ -452,7 +541,8 @@ describe('ConstrainedMetaModel', () => { const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedDictionaryModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); @@ -462,11 +552,12 @@ describe('ConstrainedMetaModel', () => { }); test('should not return duplicate dependencies', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); const rawModel = new DictionaryModel( 'test', undefined, + {}, referenceModel, referenceModel ); @@ -474,7 +565,8 @@ describe('ConstrainedMetaModel', () => { const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedDictionaryModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); @@ -482,12 +574,18 @@ describe('ConstrainedMetaModel', () => { }); test('should not return duplicate dependencies when different reference instances', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); - const referenceModel2 = new ReferenceModel('', undefined, stringModel); + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); + const referenceModel2 = new ReferenceModel( + '', + undefined, + {}, + stringModel + ); const rawModel = new DictionaryModel( 'test', undefined, + {}, referenceModel, referenceModel2 ); @@ -495,7 +593,8 @@ describe('ConstrainedMetaModel', () => { const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedDictionaryModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); @@ -504,45 +603,48 @@ describe('ConstrainedMetaModel', () => { }); describe('ArrayModel', () => { test('should return all reference dependencies', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); - const rawModel = new ArrayModel('test', undefined, referenceModel); + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); + const rawModel = new ArrayModel('test', undefined, {}, referenceModel); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedArrayModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); expect(dependencies[0]).toEqual(model.valueModel); }); test('should return nothing if no references are used', () => { - const stringModel = new StringModel('', undefined); - const rawModel = new ArrayModel('', undefined, stringModel); + const stringModel = new StringModel('', undefined, {}); + const rawModel = new ArrayModel('', undefined, {}, stringModel); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }); const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(0); }); test('should return inner reference dependencies', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); - const unionModel = new UnionModel('union', undefined, [ + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); + const unionModel = new UnionModel('union', undefined, {}, [ stringModel, referenceModel ]); - const rawModel = new ArrayModel('', undefined, unionModel); + const rawModel = new ArrayModel('', undefined, {}, unionModel); const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedArrayModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); @@ -553,9 +655,9 @@ describe('ConstrainedMetaModel', () => { }); describe('UnionModel', () => { test('should return all reference dependencies', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); - const rawModel = new UnionModel('test', undefined, [ + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); + const rawModel = new UnionModel('test', undefined, {}, [ referenceModel, stringModel ]); @@ -563,7 +665,8 @@ describe('ConstrainedMetaModel', () => { const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedUnionModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); @@ -571,9 +674,9 @@ describe('ConstrainedMetaModel', () => { }); test('should not return duplicate dependencies', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); - const rawModel = new UnionModel('test', undefined, [ + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); + const rawModel = new UnionModel('test', undefined, {}, [ referenceModel, referenceModel ]); @@ -581,7 +684,8 @@ describe('ConstrainedMetaModel', () => { const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedUnionModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); @@ -589,10 +693,15 @@ describe('ConstrainedMetaModel', () => { }); test('should not return duplicate dependencies when different reference instances', () => { - const stringModel = new StringModel('', undefined); - const referenceModel = new ReferenceModel('', undefined, stringModel); - const referenceModel2 = new ReferenceModel('', undefined, stringModel); - const rawModel = new UnionModel('test', undefined, [ + const stringModel = new StringModel('', undefined, {}); + const referenceModel = new ReferenceModel('', undefined, {}, stringModel); + const referenceModel2 = new ReferenceModel( + '', + undefined, + {}, + stringModel + ); + const rawModel = new UnionModel('test', undefined, {}, [ referenceModel, referenceModel2 ]); @@ -600,7 +709,8 @@ describe('ConstrainedMetaModel', () => { const model = constrainMetaModel(mockedTypeMapping, mockedConstraints, { metaModel: rawModel, constrainedName: '', - options: undefined + options: undefined, + dependencyManager: undefined as never }) as ConstrainedUnionModel; const dependencies = model.getNearestDependencies(); expect(dependencies).toHaveLength(1); diff --git a/test/models/Draft7Schema.spec.ts b/test/models/Draft7Schema.spec.ts index 7fa8572a52..4856616bc8 100644 --- a/test/models/Draft7Schema.spec.ts +++ b/test/models/Draft7Schema.spec.ts @@ -584,7 +584,7 @@ describe('Draft7Schema', () => { }); describe('$ref', () => { - test('should return a string ', () => { + test('should return a string', () => { const doc = { $ref: 'some/reference' }; const d = Draft7Schema.toSchema(doc) as Draft7Schema; expect(typeof d).toEqual('object'); diff --git a/test/processors/AsyncAPIInputProcessor.spec.ts b/test/processors/AsyncAPIInputProcessor.spec.ts index 9203e00713..d509c82b36 100644 --- a/test/processors/AsyncAPIInputProcessor.spec.ts +++ b/test/processors/AsyncAPIInputProcessor.spec.ts @@ -2,33 +2,21 @@ import * as fs from 'fs'; import * as path from 'path'; import { Parser } from '@asyncapi/parser'; import { AsyncAPIInputProcessor } from '../../src/processors/AsyncAPIInputProcessor'; -import { AnyModel, CommonModel } from '../../src/models'; const basicDocString = fs.readFileSync( path.resolve(__dirname, './AsyncAPIInputProcessor/basic.json'), 'utf8' ); +const operationOneOf1DocString = fs.readFileSync( + path.resolve(__dirname, './AsyncAPIInputProcessor/operation_oneof1.json'), + 'utf8' +); +const operationOneOf2DocString = fs.readFileSync( + path.resolve(__dirname, './AsyncAPIInputProcessor/operation_oneof2.json'), + 'utf8' +); jest.mock('../../src/utils/LoggingInterface'); -const mockedReturnModels = [new CommonModel()]; -const mockedMetaModel = new AnyModel('', undefined); -jest.mock('../../src/helpers/CommonModelToMetaModel', () => { - return { - convertToMetaModel: jest.fn().mockImplementation(() => { - return mockedMetaModel; - }) - }; -}); -jest.mock('../../src/interpreter/Interpreter', () => { - return { - Interpreter: jest.fn().mockImplementation(() => { - return { - interpret: jest.fn().mockImplementation(() => { - return mockedReturnModels[0]; - }) - }; - }) - }; -}); + describe('AsyncAPIInputProcessor', () => { const parser = new Parser(); @@ -134,6 +122,20 @@ describe('AsyncAPIInputProcessor', () => { const commonInputModel = await processor.process(document); expect(commonInputModel).toMatchSnapshot(); }); + + test('should be able to process operation with oneOf #1', async () => { + const { document } = await parser.parse(operationOneOf1DocString); + const processor = new AsyncAPIInputProcessor(); + const commonInputModel = await processor.process(document); + expect(commonInputModel).toMatchSnapshot(); + }); + + test('should be able to process operation with oneOf #2', async () => { + const { document } = await parser.parse(operationOneOf2DocString); + const processor = new AsyncAPIInputProcessor(); + const commonInputModel = await processor.process(document); + expect(commonInputModel).toMatchSnapshot(); + }); }); describe('convertToInternalSchema()', () => { diff --git a/test/processors/AsyncAPIInputProcessor/operation_oneof1.json b/test/processors/AsyncAPIInputProcessor/operation_oneof1.json new file mode 100644 index 0000000000..c5f821720d --- /dev/null +++ b/test/processors/AsyncAPIInputProcessor/operation_oneof1.json @@ -0,0 +1,99 @@ +{ + "asyncapi": "2.5.0", + "defaultContentType": "application/json", + "info": { + "title": "CloudEvent example", + "version": "1.0.0" + }, + "channels": { + "pet": { + "publish": { + "message": { + "oneOf": [ + { + "$ref": "#/components/messages/Dog" + }, + { + "$ref": "#/components/messages/Cat" + } + ] + } + } + } + }, + "components": { + "messages": { + "Dog": { + "payload": { + "title": "Dog", + "allOf": [ + { + "$ref": "#/components/schemas/CloudEvent" + }, + { + "type": "object", + "properties": { + "type": { + "title": "DogType", + "const": "Dog" + } + } + } + ] + } + }, + "Cat": { + "payload": { + "title": "Cat", + "allOf": [ + { + "$ref": "#/components/schemas/CloudEvent" + }, + { + "type": "object", + "properties": { + "type": { + "title": "CatType", + "const": "Cat" + } + } + } + ] + } + } + }, + "schemas": { + "CloudEvent": { + "title": "CloudEvent", + "type": "object", + "discriminator": "type", + "properties": { + "id": { + "type": "string" + }, + "source": { + "type": "string", + "format": "uri-reference" + }, + "specversion": { + "type": "string", + "default": "1.0", + "examples": ["1.0"] + }, + "type": { + "type": "string" + }, + "dataschema": { + "type": "string", + "format": "uri" + }, + "time": { + "type": "string", + "format": "date-time" + } + }, + "required": ["id", "source", "specversion", "type"] + } + } + } +} diff --git a/test/processors/AsyncAPIInputProcessor/operation_oneof2.json b/test/processors/AsyncAPIInputProcessor/operation_oneof2.json new file mode 100644 index 0000000000..72481377d1 --- /dev/null +++ b/test/processors/AsyncAPIInputProcessor/operation_oneof2.json @@ -0,0 +1,98 @@ +{ + "asyncapi": "2.5.0", + "defaultContentType": "application/json", + "info": { + "title": "CloudEvent example", + "version": "1.0.0" + }, + "channels": { + "pet": { + "publish": { + "message": { + "oneOf": [ + { + "$ref": "#/components/messages/Dog" + }, + { + "$ref": "#/components/messages/Cat" + } + ] + } + } + } + }, + "components": { + "messages": { + "Dog": { + "payload": { + "title": "Dog", + "allOf": [ + { + "$ref": "#/components/schemas/CloudEvent" + }, + { + "type": "object", + "properties": { + "type": { + "const": "Dog" + } + } + } + ] + } + }, + "Cat": { + "payload": { + "title": "Cat", + "allOf": [ + { + "$ref": "#/components/schemas/CloudEvent" + }, + { + "type": "object", + "properties": { + "type": { + "const": "Cat" + } + } + } + ] + } + } + }, + "schemas": { + "CloudEvent": { + "title": "CloudEvent", + "type": "object", + "discriminator": "type", + "properties": { + "id": { + "type": "string" + }, + "source": { + "type": "string", + "format": "uri-reference" + }, + "specversion": { + "type": "string", + "default": "1.0", + "examples": ["1.0"] + }, + "type": { + "title": "CloudEventType", + "type": "string" + }, + "dataschema": { + "type": "string", + "format": "uri" + }, + "time": { + "type": "string", + "format": "date-time" + } + }, + "required": ["id", "source", "specversion", "type"] + } + } + } +} diff --git a/test/processors/JsonSchemaInputProcessor.spec.ts b/test/processors/JsonSchemaInputProcessor.spec.ts index 601c3ee7bd..769ad658f6 100644 --- a/test/processors/JsonSchemaInputProcessor.spec.ts +++ b/test/processors/JsonSchemaInputProcessor.spec.ts @@ -57,9 +57,8 @@ describe('JsonSchemaInputProcessor', () => { }); test('should process draft 7 schemas', async () => { const inputSchemaPath = './JsonSchemaInputProcessor/draft-7.json'; - const { inputMetaModel, inputSchema } = await getCommonInput( - inputSchemaPath - ); + const { inputMetaModel, inputSchema } = + await getCommonInput(inputSchemaPath); expect(inputMetaModel).toMatchObject({ models: { test: mockedMetaModel }, originalInput: inputSchema @@ -75,9 +74,8 @@ describe('JsonSchemaInputProcessor', () => { test('should process draft 6 schemas', async () => { const inputSchemaPath = './JsonSchemaInputProcessor/draft-6.json'; - const { inputMetaModel, inputSchema } = await getCommonInput( - inputSchemaPath - ); + const { inputMetaModel, inputSchema } = + await getCommonInput(inputSchemaPath); expect(inputMetaModel).toMatchObject({ models: { test: mockedMetaModel }, originalInput: inputSchema @@ -93,9 +91,8 @@ describe('JsonSchemaInputProcessor', () => { test('should process draft 4 schemas', async () => { const inputSchemaPath = './JsonSchemaInputProcessor/draft-4.json'; - const { inputMetaModel, inputSchema } = await getCommonInput( - inputSchemaPath - ); + const { inputMetaModel, inputSchema } = + await getCommonInput(inputSchemaPath); expect(inputMetaModel).toMatchObject({ models: { test: mockedMetaModel }, originalInput: inputSchema @@ -111,9 +108,8 @@ describe('JsonSchemaInputProcessor', () => { test('should be able to use $ref', async () => { const inputSchemaPath = './JsonSchemaInputProcessor/references.json'; - const { inputMetaModel, inputSchema } = await getCommonInput( - inputSchemaPath - ); + const { inputMetaModel, inputSchema } = + await getCommonInput(inputSchemaPath); const expectedResolvedInput = { ...inputSchema, properties: { street_address: { type: 'string' } } @@ -136,9 +132,8 @@ describe('JsonSchemaInputProcessor', () => { test('should be able to use $ref when circular', async () => { const inputSchemaPath = './JsonSchemaInputProcessor/references_circular.json'; - const { inputMetaModel, inputSchema } = await getCommonInput( - inputSchemaPath - ); + const { inputMetaModel, inputSchema } = + await getCommonInput(inputSchemaPath); const expectedResolvedInput = { ...inputSchema, definitions: {}, @@ -262,7 +257,7 @@ describe('JsonSchemaInputProcessor', () => { }, $ref: '#/definitions/root/definitions/innerRoot' }; - expect(() => processor.handleRootReference(schema)).toThrowError( + expect(() => processor.handleRootReference(schema)).toThrow( 'Cannot handle input, because it has a root `$ref`, please manually resolve the first reference.' ); }); diff --git a/test/processors/OpenAPIInputProcessor.spec.ts b/test/processors/OpenAPIInputProcessor.spec.ts index 3b1cf5afdb..8a31d7f3f5 100644 --- a/test/processors/OpenAPIInputProcessor.spec.ts +++ b/test/processors/OpenAPIInputProcessor.spec.ts @@ -9,7 +9,10 @@ const basicDoc = JSON.parse( ) ); jest.mock('../../src/utils/LoggingInterface'); -jest.spyOn(OpenAPIInputProcessor, 'convertToInternalSchema'); +const processorSpy = jest.spyOn( + OpenAPIInputProcessor, + 'convertToInternalSchema' +); const mockedReturnModels = [new CommonModel()]; const mockedMetaModel = new AnyModel('', undefined); jest.mock('../../src/helpers/CommonModelToMetaModel', () => { @@ -34,6 +37,9 @@ describe('OpenAPIInputProcessor', () => { afterAll(() => { jest.restoreAllMocks(); }); + afterEach(() => { + jest.clearAllMocks(); + }); describe('shouldProcess()', () => { const processor = new OpenAPIInputProcessor(); test('should be able to process OpenAPI 3.0.0 documents', () => { @@ -82,11 +88,47 @@ describe('OpenAPIInputProcessor', () => { const processor = new OpenAPIInputProcessor(); const commonInputModel = await processor.process(basicDoc); expect(commonInputModel).toMatchSnapshot(); - expect( - ( - OpenAPIInputProcessor.convertToInternalSchema as any as jest.SpyInstance - ).mock.calls - ).toMatchSnapshot(); + expect(processorSpy.mock.calls).toMatchSnapshot(); + }); + test('should include schema for parameters', async () => { + const doc = { + openapi: '3.0.3', + info: {}, + paths: { + '/test': { + parameters: [ + { + name: 'path_parameter', + in: 'header', + schema: { type: 'string' } + } + ], + get: { + parameters: [ + { + name: 'operation_parameter', + in: 'query', + schema: { type: 'string' } + } + ], + responses: { + 204: {} + } + } + } + } + }; + + const processor = new OpenAPIInputProcessor(); + await processor.process(doc); + expect(processorSpy.mock.calls).toContainEqual([ + { type: 'string' }, + 'test_get_parameters_query_operation_parameter' + ]); + expect(processorSpy.mock.calls).toContainEqual([ + { type: 'string' }, + 'test_parameters_header_path_parameter' + ]); }); }); }); diff --git a/test/processors/OpenAPIInputProcessor/basic.json b/test/processors/OpenAPIInputProcessor/basic.json index fb02cec8df..597df89552 100644 --- a/test/processors/OpenAPIInputProcessor/basic.json +++ b/test/processors/OpenAPIInputProcessor/basic.json @@ -5,6 +5,17 @@ }, "paths": { "/test": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "description": "credentials that authenticate a user agent with a server", + "schema": { + "type": "string" + } + } + ], "post": { "parameters": [ { diff --git a/test/processors/TypeScriptInputProcessor.spec.ts b/test/processors/TypeScriptInputProcessor.spec.ts index 0b26f97a42..66d62497a0 100644 --- a/test/processors/TypeScriptInputProcessor.spec.ts +++ b/test/processors/TypeScriptInputProcessor.spec.ts @@ -38,7 +38,7 @@ describe('TypeScriptInputProcessor', () => { describe('process()', () => { test('should throw error when trying to process wrong input format', async () => { const processor = new TypeScriptInputProcessor(); - await expect(processor.process({})).rejects.toThrowError( + await expect(processor.process({})).rejects.toThrow( 'Input is not of the valid file format' ); }); diff --git a/test/processors/__snapshots__/AsyncAPIInputProcessor.spec.ts.snap b/test/processors/__snapshots__/AsyncAPIInputProcessor.spec.ts.snap index 2daf4cfa4a..4f35c47b35 100644 --- a/test/processors/__snapshots__/AsyncAPIInputProcessor.spec.ts.snap +++ b/test/processors/__snapshots__/AsyncAPIInputProcessor.spec.ts.snap @@ -1,8 +1,4004 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`AsyncAPIInputProcessor process() should be able to process operation with oneOf #1 1`] = ` +InputMetaModel { + "models": Object { + "pet": UnionModel { + "name": "pet", + "options": Object { + "discriminator": Object { + "discriminator": "type", + }, + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "$id": "pet", + "oneOf": Array [ + AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Dog", + "title": "DogType", + "x-modelgen-inferred-name": "anonymous_schema_9", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_8", + "x-parser-schema-id": "", + }, + ], + "title": "Dog", + "x-modelgen-inferred-name": "anonymous_schema_1", + "x-parser-schema-id": "", + }, + AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "title": "CatType", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + ], + "x-modelgen-inferred-name": "pet", + }, + "union": Array [ + ObjectModel { + "name": "Dog", + "options": Object { + "discriminator": Object { + "discriminator": "type", + }, + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Dog", + "title": "DogType", + "x-modelgen-inferred-name": "anonymous_schema_9", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_8", + "x-parser-schema-id": "", + }, + ], + "title": "Dog", + "x-modelgen-inferred-name": "anonymous_schema_1", + "x-parser-schema-id": "", + }, + "properties": Object { + "additionalProperties": ObjectPropertyModel { + "property": DictionaryModel { + "key": StringModel { + "name": "additionalProperties", + "options": Object { + "discriminator": Object { + "discriminator": "type", + }, + "isNullable": false, + }, + "originalInput": Array [ + AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "title": "CatType", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + ], + }, + "name": "additionalProperties", + "options": Object { + "discriminator": Object { + "discriminator": "type", + }, + "isNullable": false, + }, + "originalInput": Array [ + AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "title": "CatType", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + ], + "serializationType": "unwrap", + "value": AnyModel { + "name": "undefined", + "options": Object { + "isNullable": true, + }, + "originalInput": AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "title": "CatType", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + }, + }, + "propertyName": "additionalProperties", + "required": false, + }, + "dataschema": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_6", + "options": Object { + "format": "uri", + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + }, + "propertyName": "dataschema", + "required": false, + }, + "id": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_2", + "options": Object { + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + }, + "propertyName": "id", + "required": true, + }, + "source": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_3", + "options": Object { + "format": "uri-reference", + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + }, + "propertyName": "source", + "required": true, + }, + "specversion": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_4", + "options": Object { + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + }, + "propertyName": "specversion", + "required": true, + }, + "time": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_7", + "options": Object { + "format": "date-time", + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + }, + "propertyName": "time", + "required": false, + }, + "type": ObjectPropertyModel { + "property": EnumModel { + "name": "DogType", + "options": Object { + "const": Object { + "originalInput": "Dog", + }, + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Dog", + "title": "DogType", + "x-modelgen-inferred-name": "anonymous_schema_9", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_8", + "x-parser-schema-id": "", + }, + ], + "title": "Dog", + "x-modelgen-inferred-name": "anonymous_schema_1", + "x-parser-schema-id": "", + }, + "values": Array [ + EnumValueModel { + "key": "Dog", + "value": "Dog", + }, + ], + }, + "propertyName": "type", + "required": true, + }, + }, + }, + ObjectModel { + "name": "Cat", + "options": Object { + "discriminator": Object { + "discriminator": "type", + }, + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "title": "CatType", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + "properties": Object { + "additionalProperties": ObjectPropertyModel { + "property": DictionaryModel { + "key": StringModel { + "name": "additionalProperties", + "options": Object { + "discriminator": Object { + "discriminator": "type", + }, + "isNullable": false, + }, + "originalInput": Array [ + AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "title": "CatType", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + ], + }, + "name": "additionalProperties", + "options": Object { + "discriminator": Object { + "discriminator": "type", + }, + "isNullable": false, + }, + "originalInput": Array [ + AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "title": "CatType", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + ], + "serializationType": "unwrap", + "value": AnyModel { + "name": "undefined", + "options": Object { + "isNullable": true, + }, + "originalInput": AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "title": "CatType", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + }, + }, + "propertyName": "additionalProperties", + "required": false, + }, + "dataschema": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_6", + "options": Object { + "format": "uri", + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + }, + "propertyName": "dataschema", + "required": false, + }, + "id": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_2", + "options": Object { + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + }, + "propertyName": "id", + "required": true, + }, + "source": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_3", + "options": Object { + "format": "uri-reference", + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + }, + "propertyName": "source", + "required": true, + }, + "specversion": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_4", + "options": Object { + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + }, + "propertyName": "specversion", + "required": true, + }, + "time": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_7", + "options": Object { + "format": "date-time", + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + }, + "propertyName": "time", + "required": false, + }, + "type": ObjectPropertyModel { + "property": EnumModel { + "name": "CatType", + "options": Object { + "const": Object { + "originalInput": "Cat", + }, + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "title": "CatType", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + "values": Array [ + EnumValueModel { + "key": "Cat", + "value": "Cat", + }, + ], + }, + "propertyName": "type", + "required": true, + }, + }, + }, + ], + }, + }, + "originalInput": AsyncAPIDocument { + "_json": Object { + "asyncapi": "2.5.0", + "channels": Object { + "pet": Object { + "publish": Object { + "message": Object { + "oneOf": Array [ + Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Dog", + "title": "DogType", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Dog", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Dog", + }, + Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Cat", + "title": "CatType", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Cat", + }, + ], + }, + }, + }, + }, + "components": Object { + "messages": Object { + "Cat": Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Cat", + "title": "CatType", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Cat", + }, + "Dog": Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Dog", + "title": "DogType", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Dog", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Dog", + }, + }, + "schemas": Object { + "CloudEvent": Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + }, + }, + "defaultContentType": "application/json", + "info": Object { + "title": "CloudEvent example", + "version": "1.0.0", + }, + "x-parser-api-version": 1, + "x-parser-spec-parsed": true, + }, + "_meta": Object { + "asyncapi": Object { + "input": "{ + \\"asyncapi\\": \\"2.5.0\\", + \\"defaultContentType\\": \\"application/json\\", + \\"info\\": { + \\"title\\": \\"CloudEvent example\\", + \\"version\\": \\"1.0.0\\" + }, + \\"channels\\": { + \\"pet\\": { + \\"publish\\": { + \\"message\\": { + \\"oneOf\\": [ + { + \\"$ref\\": \\"#/components/messages/Dog\\" + }, + { + \\"$ref\\": \\"#/components/messages/Cat\\" + } + ] + } + } + } + }, + \\"components\\": { + \\"messages\\": { + \\"Dog\\": { + \\"payload\\": { + \\"title\\": \\"Dog\\", + \\"allOf\\": [ + { + \\"$ref\\": \\"#/components/schemas/CloudEvent\\" + }, + { + \\"type\\": \\"object\\", + \\"properties\\": { + \\"type\\": { + \\"title\\": \\"DogType\\", + \\"const\\": \\"Dog\\" + } + } + } + ] + } + }, + \\"Cat\\": { + \\"payload\\": { + \\"title\\": \\"Cat\\", + \\"allOf\\": [ + { + \\"$ref\\": \\"#/components/schemas/CloudEvent\\" + }, + { + \\"type\\": \\"object\\", + \\"properties\\": { + \\"type\\": { + \\"title\\": \\"CatType\\", + \\"const\\": \\"Cat\\" + } + } + } + ] + } + } + }, + \\"schemas\\": { + \\"CloudEvent\\": { + \\"title\\": \\"CloudEvent\\", + \\"type\\": \\"object\\", + \\"discriminator\\": \\"type\\", + \\"properties\\": { + \\"id\\": { + \\"type\\": \\"string\\" + }, + \\"source\\": { + \\"type\\": \\"string\\", + \\"format\\": \\"uri-reference\\" + }, + \\"specversion\\": { + \\"type\\": \\"string\\", + \\"default\\": \\"1.0\\", + \\"examples\\": [\\"1.0\\"] + }, + \\"type\\": { + \\"type\\": \\"string\\" + }, + \\"dataschema\\": { + \\"type\\": \\"string\\", + \\"format\\": \\"uri\\" + }, + \\"time\\": { + \\"type\\": \\"string\\", + \\"format\\": \\"date-time\\" + } + }, + \\"required\\": [\\"id\\", \\"source\\", \\"specversion\\", \\"type\\"] + } + } + } +} +", + "parsed": Object { + "asyncapi": "2.5.0", + "channels": Object { + "pet": Object { + "publish": Object { + "message": Object { + "oneOf": Array [ + Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Dog", + "title": "DogType", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Dog", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Dog", + }, + Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Cat", + "title": "CatType", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Cat", + }, + ], + }, + }, + }, + }, + "components": Object { + "messages": Object { + "Cat": Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Cat", + "title": "CatType", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Cat", + }, + "Dog": Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Dog", + "title": "DogType", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Dog", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Dog", + }, + }, + "schemas": Object { + "CloudEvent": Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + }, + }, + "defaultContentType": "application/json", + "info": Object { + "title": "CloudEvent example", + "version": "1.0.0", + }, + "x-parser-api-version": 1, + "x-parser-spec-parsed": true, + }, + "semver": Object { + "major": 2, + "minor": 5, + "patch": 0, + "rc": undefined, + "version": "2.5.0", + }, + "source": undefined, + }, + "pointer": "/", + }, + }, +} +`; + +exports[`AsyncAPIInputProcessor process() should be able to process operation with oneOf #2 1`] = ` +InputMetaModel { + "models": Object { + "pet": UnionModel { + "name": "pet", + "options": Object { + "discriminator": Object { + "discriminator": "type", + }, + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "$id": "pet", + "oneOf": Array [ + AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "title": "CloudEventType", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Dog", + "x-modelgen-inferred-name": "anonymous_schema_9", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_8", + "x-parser-schema-id": "", + }, + ], + "title": "Dog", + "x-modelgen-inferred-name": "anonymous_schema_1", + "x-parser-schema-id": "", + }, + AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "title": "CloudEventType", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + ], + "x-modelgen-inferred-name": "pet", + }, + "union": Array [ + ObjectModel { + "name": "Dog", + "options": Object { + "discriminator": Object { + "discriminator": "type", + }, + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "title": "CloudEventType", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Dog", + "x-modelgen-inferred-name": "anonymous_schema_9", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_8", + "x-parser-schema-id": "", + }, + ], + "title": "Dog", + "x-modelgen-inferred-name": "anonymous_schema_1", + "x-parser-schema-id": "", + }, + "properties": Object { + "additionalProperties": ObjectPropertyModel { + "property": DictionaryModel { + "key": StringModel { + "name": "additionalProperties", + "options": Object { + "discriminator": Object { + "discriminator": "type", + }, + "isNullable": false, + }, + "originalInput": Array [ + AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "title": "CloudEventType", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + ], + }, + "name": "additionalProperties", + "options": Object { + "discriminator": Object { + "discriminator": "type", + }, + "isNullable": false, + }, + "originalInput": Array [ + AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "title": "CloudEventType", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + ], + "serializationType": "unwrap", + "value": AnyModel { + "name": "undefined", + "options": Object { + "isNullable": true, + }, + "originalInput": AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "title": "CloudEventType", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + }, + }, + "propertyName": "additionalProperties", + "required": false, + }, + "dataschema": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_6", + "options": Object { + "format": "uri", + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + }, + "propertyName": "dataschema", + "required": false, + }, + "id": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_2", + "options": Object { + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + }, + "propertyName": "id", + "required": true, + }, + "source": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_3", + "options": Object { + "format": "uri-reference", + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + }, + "propertyName": "source", + "required": true, + }, + "specversion": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_4", + "options": Object { + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + }, + "propertyName": "specversion", + "required": true, + }, + "time": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_7", + "options": Object { + "format": "date-time", + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + }, + "propertyName": "time", + "required": false, + }, + "type": ObjectPropertyModel { + "property": EnumModel { + "name": "CloudEventType", + "options": Object { + "const": Object { + "originalInput": "Dog", + }, + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "title": "CloudEventType", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Dog", + "x-modelgen-inferred-name": "anonymous_schema_9", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_8", + "x-parser-schema-id": "", + }, + ], + "title": "Dog", + "x-modelgen-inferred-name": "anonymous_schema_1", + "x-parser-schema-id": "", + }, + "values": Array [ + EnumValueModel { + "key": "Dog", + "value": "Dog", + }, + ], + }, + "propertyName": "type", + "required": true, + }, + }, + }, + ObjectModel { + "name": "Cat", + "options": Object { + "discriminator": Object { + "discriminator": "type", + }, + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "title": "CloudEventType", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + "properties": Object { + "additionalProperties": ObjectPropertyModel { + "property": DictionaryModel { + "key": StringModel { + "name": "additionalProperties", + "options": Object { + "discriminator": Object { + "discriminator": "type", + }, + "isNullable": false, + }, + "originalInput": Array [ + AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "title": "CloudEventType", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + ], + }, + "name": "additionalProperties", + "options": Object { + "discriminator": Object { + "discriminator": "type", + }, + "isNullable": false, + }, + "originalInput": Array [ + AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "title": "CloudEventType", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + ], + "serializationType": "unwrap", + "value": AnyModel { + "name": "undefined", + "options": Object { + "isNullable": true, + }, + "originalInput": AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "title": "CloudEventType", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + }, + }, + "propertyName": "additionalProperties", + "required": false, + }, + "dataschema": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_6", + "options": Object { + "format": "uri", + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + }, + "propertyName": "dataschema", + "required": false, + }, + "id": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_2", + "options": Object { + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + }, + "propertyName": "id", + "required": true, + }, + "source": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_3", + "options": Object { + "format": "uri-reference", + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + }, + "propertyName": "source", + "required": true, + }, + "specversion": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_4", + "options": Object { + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + }, + "propertyName": "specversion", + "required": true, + }, + "time": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_7", + "options": Object { + "format": "date-time", + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + }, + "propertyName": "time", + "required": false, + }, + "type": ObjectPropertyModel { + "property": EnumModel { + "name": "CloudEventType", + "options": Object { + "const": Object { + "originalInput": "Cat", + }, + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "allOf": Array [ + AsyncapiV2Schema { + "discriminator": "type", + "properties": Object { + "dataschema": AsyncapiV2Schema { + "format": "uri", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_6", + "x-parser-schema-id": "", + }, + "id": AsyncapiV2Schema { + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + "source": AsyncapiV2Schema { + "format": "uri-reference", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_3", + "x-parser-schema-id": "", + }, + "specversion": AsyncapiV2Schema { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_4", + "x-parser-schema-id": "", + }, + "time": AsyncapiV2Schema { + "format": "date-time", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_7", + "x-parser-schema-id": "", + }, + "type": AsyncapiV2Schema { + "title": "CloudEventType", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_5", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-modelgen-inferred-name": "CloudEvent", + "x-parser-schema-id": "CloudEvent", + }, + AsyncapiV2Schema { + "properties": Object { + "type": AsyncapiV2Schema { + "const": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_12", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_11", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-modelgen-inferred-name": "anonymous_schema_10", + "x-parser-schema-id": "", + }, + "values": Array [ + EnumValueModel { + "key": "Dog", + "value": "Dog", + }, + EnumValueModel { + "key": "Cat", + "value": "Cat", + }, + ], + }, + "propertyName": "type", + "required": true, + }, + }, + }, + ], + }, + }, + "originalInput": AsyncAPIDocument { + "_json": Object { + "asyncapi": "2.5.0", + "channels": Object { + "pet": Object { + "publish": Object { + "message": Object { + "oneOf": Array [ + Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "title": "CloudEventType", + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Dog", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Dog", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Dog", + }, + Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "title": "CloudEventType", + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Cat", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Cat", + }, + ], + }, + }, + }, + }, + "components": Object { + "messages": Object { + "Cat": Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "title": "CloudEventType", + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Cat", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Cat", + }, + "Dog": Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "title": "CloudEventType", + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Dog", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Dog", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Dog", + }, + }, + "schemas": Object { + "CloudEvent": Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "title": "CloudEventType", + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + }, + }, + "defaultContentType": "application/json", + "info": Object { + "title": "CloudEvent example", + "version": "1.0.0", + }, + "x-parser-api-version": 1, + "x-parser-spec-parsed": true, + }, + "_meta": Object { + "asyncapi": Object { + "input": "{ + \\"asyncapi\\": \\"2.5.0\\", + \\"defaultContentType\\": \\"application/json\\", + \\"info\\": { + \\"title\\": \\"CloudEvent example\\", + \\"version\\": \\"1.0.0\\" + }, + \\"channels\\": { + \\"pet\\": { + \\"publish\\": { + \\"message\\": { + \\"oneOf\\": [ + { + \\"$ref\\": \\"#/components/messages/Dog\\" + }, + { + \\"$ref\\": \\"#/components/messages/Cat\\" + } + ] + } + } + } + }, + \\"components\\": { + \\"messages\\": { + \\"Dog\\": { + \\"payload\\": { + \\"title\\": \\"Dog\\", + \\"allOf\\": [ + { + \\"$ref\\": \\"#/components/schemas/CloudEvent\\" + }, + { + \\"type\\": \\"object\\", + \\"properties\\": { + \\"type\\": { + \\"const\\": \\"Dog\\" + } + } + } + ] + } + }, + \\"Cat\\": { + \\"payload\\": { + \\"title\\": \\"Cat\\", + \\"allOf\\": [ + { + \\"$ref\\": \\"#/components/schemas/CloudEvent\\" + }, + { + \\"type\\": \\"object\\", + \\"properties\\": { + \\"type\\": { + \\"const\\": \\"Cat\\" + } + } + } + ] + } + } + }, + \\"schemas\\": { + \\"CloudEvent\\": { + \\"title\\": \\"CloudEvent\\", + \\"type\\": \\"object\\", + \\"discriminator\\": \\"type\\", + \\"properties\\": { + \\"id\\": { + \\"type\\": \\"string\\" + }, + \\"source\\": { + \\"type\\": \\"string\\", + \\"format\\": \\"uri-reference\\" + }, + \\"specversion\\": { + \\"type\\": \\"string\\", + \\"default\\": \\"1.0\\", + \\"examples\\": [\\"1.0\\"] + }, + \\"type\\": { + \\"title\\": \\"CloudEventType\\", + \\"type\\": \\"string\\" + }, + \\"dataschema\\": { + \\"type\\": \\"string\\", + \\"format\\": \\"uri\\" + }, + \\"time\\": { + \\"type\\": \\"string\\", + \\"format\\": \\"date-time\\" + } + }, + \\"required\\": [\\"id\\", \\"source\\", \\"specversion\\", \\"type\\"] + } + } + } +} +", + "parsed": Object { + "asyncapi": "2.5.0", + "channels": Object { + "pet": Object { + "publish": Object { + "message": Object { + "oneOf": Array [ + Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "title": "CloudEventType", + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Dog", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Dog", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Dog", + }, + Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "title": "CloudEventType", + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Cat", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Cat", + }, + ], + }, + }, + }, + }, + "components": Object { + "messages": Object { + "Cat": Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "title": "CloudEventType", + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Cat", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Cat", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Cat", + }, + "Dog": Object { + "payload": Object { + "allOf": Array [ + Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "title": "CloudEventType", + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + Object { + "properties": Object { + "type": Object { + "const": "Dog", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-parser-schema-id": "", + }, + ], + "title": "Dog", + "x-parser-schema-id": "", + }, + "x-parser-message-name": "Dog", + }, + }, + "schemas": Object { + "CloudEvent": Object { + "discriminator": "type", + "properties": Object { + "dataschema": Object { + "format": "uri", + "type": "string", + "x-parser-schema-id": "", + }, + "id": Object { + "type": "string", + "x-parser-schema-id": "", + }, + "source": Object { + "format": "uri-reference", + "type": "string", + "x-parser-schema-id": "", + }, + "specversion": Object { + "default": "1.0", + "examples": Array [ + "1.0", + ], + "type": "string", + "x-parser-schema-id": "", + }, + "time": Object { + "format": "date-time", + "type": "string", + "x-parser-schema-id": "", + }, + "type": Object { + "title": "CloudEventType", + "type": "string", + "x-parser-schema-id": "", + }, + }, + "required": Array [ + "id", + "source", + "specversion", + "type", + ], + "title": "CloudEvent", + "type": "object", + "x-parser-schema-id": "CloudEvent", + }, + }, + }, + "defaultContentType": "application/json", + "info": Object { + "title": "CloudEvent example", + "version": "1.0.0", + }, + "x-parser-api-version": 1, + "x-parser-spec-parsed": true, + }, + "semver": Object { + "major": 2, + "minor": 5, + "patch": 0, + "rc": undefined, + "version": "2.5.0", + }, + "source": undefined, + }, + "pointer": "/", + }, + }, +} +`; + exports[`AsyncAPIInputProcessor process() should be able to process parsed objects 1`] = ` InputMetaModel { - "models": Object {}, + "models": Object { + "anonymous_schema_1": ObjectModel { + "name": "anonymous_schema_1", + "options": Object { + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "properties": Object { + "email": AsyncapiV2Schema { + "format": "email", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_1", + "x-parser-schema-id": "", + }, + "properties": Object { + "additionalProperties": ObjectPropertyModel { + "property": DictionaryModel { + "key": StringModel { + "name": "additionalProperties", + "options": Object { + "isNullable": false, + }, + "originalInput": Array [ + true, + ], + }, + "name": "additionalProperties", + "options": Object { + "isNullable": false, + }, + "originalInput": Array [ + true, + ], + "serializationType": "unwrap", + "value": AnyModel { + "name": "undefined", + "options": Object { + "isNullable": true, + }, + "originalInput": true, + }, + }, + "propertyName": "additionalProperties", + "required": false, + }, + "email": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_2", + "options": Object { + "format": "email", + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "format": "email", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + }, + "propertyName": "email", + "required": false, + }, + }, + }, + }, "originalInput": AsyncAPIDocument { "_json": Object { "asyncapi": "2.0.0", @@ -108,7 +4104,76 @@ InputMetaModel { exports[`AsyncAPIInputProcessor process() should be able to process pure object 1`] = ` InputMetaModel { - "models": Object {}, + "models": Object { + "anonymous_schema_1": ObjectModel { + "name": "anonymous_schema_1", + "options": Object { + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "properties": Object { + "email": AsyncapiV2Schema { + "format": "email", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + }, + "type": "object", + "x-modelgen-inferred-name": "anonymous_schema_1", + "x-parser-schema-id": "", + }, + "properties": Object { + "additionalProperties": ObjectPropertyModel { + "property": DictionaryModel { + "key": StringModel { + "name": "additionalProperties", + "options": Object { + "isNullable": false, + }, + "originalInput": Array [ + true, + ], + }, + "name": "additionalProperties", + "options": Object { + "isNullable": false, + }, + "originalInput": Array [ + true, + ], + "serializationType": "unwrap", + "value": AnyModel { + "name": "undefined", + "options": Object { + "isNullable": true, + }, + "originalInput": true, + }, + }, + "propertyName": "additionalProperties", + "required": false, + }, + "email": ObjectPropertyModel { + "property": StringModel { + "name": "anonymous_schema_2", + "options": Object { + "format": "email", + "isNullable": false, + }, + "originalInput": AsyncapiV2Schema { + "format": "email", + "type": "string", + "x-modelgen-inferred-name": "anonymous_schema_2", + "x-parser-schema-id": "", + }, + }, + "propertyName": "email", + "required": false, + }, + }, + }, + }, "originalInput": AsyncAPIDocument { "_json": Object { "asyncapi": "2.0.0", diff --git a/test/processors/__snapshots__/OpenAPIInputProcessor.spec.ts.snap b/test/processors/__snapshots__/OpenAPIInputProcessor.spec.ts.snap index fc09e3799b..8891c89b8c 100644 --- a/test/processors/__snapshots__/OpenAPIInputProcessor.spec.ts.snap +++ b/test/processors/__snapshots__/OpenAPIInputProcessor.spec.ts.snap @@ -197,6 +197,17 @@ InputMetaModel { }, }, }, + "parameters": Array [ + Object { + "description": "credentials that authenticate a user agent with a server", + "in": "header", + "name": "Authorization", + "required": true, + "schema": Object { + "type": "string", + }, + }, + ], "patch": Object { "requestBody": Object { "content": Object { @@ -552,6 +563,13 @@ Array [ }, "test_post_200_application_json", ], + Array [ + Object { + "format": "uri", + "type": "string", + }, + "test_post_parameters_query_callbackUrl", + ], Array [ Object { "properties": Object { @@ -768,5 +786,11 @@ Array [ }, "test_trace_application_json", ], + Array [ + Object { + "type": "string", + }, + "test_parameters_header_Authorization", + ], ] `; diff --git a/test/runtime/runtime-java.spec.ts b/test/runtime/runtime-java.spec.ts index 4f5855ca5b..d814fbd892 100644 --- a/test/runtime/runtime-java.spec.ts +++ b/test/runtime/runtime-java.spec.ts @@ -2,7 +2,7 @@ import { execCommand } from '../blackbox/utils/Utils'; import path from 'path'; jest.setTimeout(50000); - +// eslint-disable-next-line jest/expect-expect test('Java runtime testing', async () => { const compileCommand = `cd ${path.resolve( __dirname, diff --git a/test/runtime/runtime-kotlin/bin/test/com/mycompany/app/generic/AddressTest.kt b/test/runtime/runtime-kotlin/bin/test/com/mycompany/app/generic/AddressTest.kt new file mode 100644 index 0000000000..64096933c5 --- /dev/null +++ b/test/runtime/runtime-kotlin/bin/test/com/mycompany/app/generic/AddressTest.kt @@ -0,0 +1,45 @@ +package com.mycompany.app.generic + +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import org.hamcrest.CoreMatchers.containsString +import org.hamcrest.CoreMatchers.not +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.TestInstance + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class AddressTest { + private lateinit var address: Address + + @BeforeAll + fun setup() { + address = Address( + streetName = "Test address 2", + houseNumber = 2, + marriage = true, + members = 2, + arrayType = listOf(2, "test"), + nestedObject = Address.NestedObject(test = "test") + ) + } + + @Test + fun shouldBeAbleToSerializeModel() { + val objectMapper: ObjectMapper = jacksonObjectMapper() + val json = objectMapper.writeValueAsString(address) + assertTrue(json.isNotEmpty()) + } + + @Test + fun shouldNotContainAdditionalPropertiesWhenSerialized() { + /** + * additionalProperties should be unwrapped when serialized + */ + val objectMapper: ObjectMapper = jacksonObjectMapper() + val json = objectMapper.writeValueAsString(address) + assertThat(json, not(containsString("additionalProperties"))) + } +} \ No newline at end of file diff --git a/test/utils/LoggingInterface.spec.ts b/test/utils/LoggingInterface.spec.ts index bc4e730b7b..6dde131e1b 100644 --- a/test/utils/LoggingInterface.spec.ts +++ b/test/utils/LoggingInterface.spec.ts @@ -1,6 +1,7 @@ import { ModelLoggingInterface, Logger } from '../../src'; describe('LoggingInterface', () => { + // eslint-disable-next-line jest/expect-expect test('should work when no logging interface have been defined', () => { Logger.setLogger(undefined); Logger.debug('test', {}, 'test2'); diff --git a/test/utils/Partials.spec.ts b/test/utils/Partials.spec.ts index 8bdcee258e..19e4889557 100644 --- a/test/utils/Partials.spec.ts +++ b/test/utils/Partials.spec.ts @@ -46,7 +46,7 @@ describe('mergePartialAndDefault', () => { ) as TestType; expect(realizedOptions.nestedObject.nested).toEqual('test2'); }); - test('should not overwrite old realized options ', () => { + test('should not overwrite old realized options', () => { interface TestType { nestedObject: { nested: string;