From ccef67ab1e97418c61e35638db5bd29b78e19bcf Mon Sep 17 00:00:00 2001 From: Benjamin Hutchins Date: Thu, 29 Aug 2024 01:37:41 -0400 Subject: [PATCH] feat: add support for importing as esm Breaking Change: this changes the import paths for Dyngoose Fixes #710 --- .eslintrc.js | 206 - .github/workflows/main.yml | 4 +- .vscode/launch.json | 23 - .vscode/settings.json | 4 + docker-compose.yml | 2 - eslint.config.cjs | 56 + package-lock.json | 5568 ++++++++++------- package.json | 86 +- spec/.mocharc.cjs | 11 + {src => spec}/batch-get.spec.ts | 56 +- {src => spec}/batch-write.spec.ts | 41 +- .../decorator/attribute-types/any.spec.ts | 1 + .../decorator/attribute-types/date.spec.ts | 9 +- .../decorator/attribute-types/dynamic.spec.ts | 1 + .../decorator/attribute-types/list.spec.ts | 6 +- .../decorator/attribute-types/map.spec.ts | 34 +- .../attribute-types/number-set.spec.ts | 3 +- .../decorator/attribute-types/number.spec.ts | 1 + .../attribute-types/string-set.spec.ts | 7 +- .../decorator/attribute-types/string.spec.ts | 1 + .../decorator/attribute-types/utils.spec.ts | 2 +- {src => spec}/decorator/table.spec.ts | 10 +- {src => spec}/errors.spec.ts | 8 +- spec/module-test-spec.mjs | 11 + {src => spec}/query/expression.spec.ts | 22 +- .../query/global-secondary-index.spec.ts | 42 +- .../query/local-secondary-index.spec.ts | 33 +- {src => spec}/query/output.spec.ts | 5 +- {src => spec}/query/primary-key.spec.ts | 49 +- .../query/projection-expression.spec.ts | 3 +- {src => spec}/query/search.spec.ts | 3 +- {src => spec}/setup-tests.spec.ts | 46 +- {src => spec}/table.spec.ts | 11 +- {src => spec}/transaction.spec.ts | 38 +- spec/tsconfig.json | 12 + {src => spec}/utils/cdk.spec.ts | 3 +- {src => spec}/utils/truly-empty.spec.ts | 2 +- src/attribute.ts | 9 +- src/batch-get.ts | 20 +- src/batch-write.ts | 13 +- src/config.ts | 3 +- src/connections/connection.ts | 2 +- src/connections/dynamodb-connection.spec.ts | 1 + src/connections/dynamodb-connection.ts | 3 +- src/decorator/attribute-types/any.ts | 9 +- src/decorator/attribute-types/binary-set.ts | 7 +- src/decorator/attribute-types/binary.ts | 4 +- src/decorator/attribute-types/boolean.ts | 4 +- src/decorator/attribute-types/date.ts | 11 +- src/decorator/attribute-types/dynamic.ts | 11 +- src/decorator/attribute-types/index.ts | 4 +- src/decorator/attribute-types/list.ts | 5 +- src/decorator/attribute-types/map.ts | 15 +- src/decorator/attribute-types/number-set.ts | 11 +- src/decorator/attribute-types/number.ts | 9 +- src/decorator/attribute-types/string-set.ts | 7 +- src/decorator/attribute-types/string.ts | 7 +- src/decorator/attribute-types/utils.ts | 16 - src/decorator/document-client.ts | 2 +- src/decorator/global-secondary-index.ts | 7 +- src/decorator/index.ts | 14 +- src/decorator/local-secondary-index.ts | 4 +- src/decorator/primary-key.ts | 2 +- src/decorator/table.ts | 4 +- src/document-client.ts | 31 +- src/dyngoose.ts | 57 - src/errors.ts | 35 - src/errors/batch-error.ts | 10 + src/errors/dyngoose-error.ts | 8 + src/errors/helpful-error.ts | 18 + src/errors/index.ts | 6 + src/errors/query-error.ts | 3 + src/errors/schema-error.ts | 3 + src/errors/validator-error.ts | 3 + src/events.ts | 9 +- src/index.ts | 26 +- src/interfaces/attribute-map.interface.ts | 2 +- src/interfaces/attribute-type.interface.ts | 7 +- src/interfaces/key.interface.ts | 2 +- src/interfaces/set-property-parameters.ts | 2 +- src/metadata/attribute-types/any.metadata.ts | 2 +- .../attribute-types/binary-set.metadata.ts | 2 +- .../attribute-types/binary.metadata.ts | 2 +- .../attribute-types/boolean.metadata.ts | 2 +- src/metadata/attribute-types/date.metadata.ts | 2 +- .../attribute-types/dynamic.metadata.ts | 5 +- src/metadata/attribute-types/list.metadata.ts | 4 +- src/metadata/attribute-types/map.metadata.ts | 7 +- .../attribute-types/number-set.metadata.ts | 4 +- .../attribute-types/number.metadata.ts | 2 +- .../attribute-types/string-set.metadata.ts | 2 +- .../attribute-types/string.metadata.ts | 2 +- src/metadata/attribute.ts | 5 +- src/metadata/index.ts | 6 +- src/metadata/indexes.ts | 4 +- src/metadata/table.ts | 5 +- src/multi-document-operation.ts | 35 + src/query/batch-write.ts | 2 +- src/query/condition.ts | 11 +- src/query/expression.ts | 16 +- src/query/filters.ts | 4 +- src/query/global-secondary-index.ts | 26 +- src/query/index.ts | 15 +- src/query/local-secondary-index.ts | 15 +- src/query/output.ts | 21 +- src/query/primary-key.ts | 39 +- src/query/projection-expression.ts | 3 +- src/query/search.ts | 29 +- src/query/transact-write.ts | 2 +- src/query/update-item-input.ts | 9 +- src/table.ts | 37 +- src/tables/attribute-type.ts | 17 +- src/tables/create-table-input.ts | 44 +- src/tables/create-table.ts | 5 +- src/tables/delete-table.ts | 5 +- src/tables/describe-table.ts | 9 +- src/tables/migrate-table.ts | 7 +- src/tables/operations.ts | 10 + src/tables/properties.ts | 6 +- src/tables/schema.ts | 23 +- src/transaction.ts | 11 +- src/tsconfig.base.json | 13 + src/tsconfig.cjs.json | 8 + src/tsconfig.cjs.spec.json | 10 + src/tsconfig.esm.json | 8 + src/tsconfig.types.json | 13 + src/tsconfig.types.spec.json | 7 + src/utils/cdk.ts | 23 +- src/utils/cloudformation.ts | 9 +- src/utils/index.ts | 10 + src/utils/is-number.ts | 5 + src/utils/migrate.ts | 9 +- src/utils/number-to-string.ts | 3 + src/utils/require-hash-key-equals-operator.ts | 15 + src/utils/seed.ts | 9 +- src/utils/string-to-number.ts | 7 + tools/create-esm-package.js | 15 + tsconfig.json | 33 +- tsconfig.mocha.json | 11 + 139 files changed, 4343 insertions(+), 3168 deletions(-) delete mode 100644 .eslintrc.js delete mode 100644 .vscode/launch.json create mode 100644 eslint.config.cjs create mode 100644 spec/.mocharc.cjs rename {src => spec}/batch-get.spec.ts (77%) rename {src => spec}/batch-write.spec.ts (66%) rename {src => spec}/decorator/attribute-types/any.spec.ts (99%) rename {src => spec}/decorator/attribute-types/date.spec.ts (93%) rename {src => spec}/decorator/attribute-types/dynamic.spec.ts (99%) rename {src => spec}/decorator/attribute-types/list.spec.ts (92%) rename {src => spec}/decorator/attribute-types/map.spec.ts (90%) rename {src => spec}/decorator/attribute-types/number-set.spec.ts (94%) rename {src => spec}/decorator/attribute-types/number.spec.ts (99%) rename {src => spec}/decorator/attribute-types/string-set.spec.ts (93%) rename {src => spec}/decorator/attribute-types/string.spec.ts (99%) rename {src => spec}/decorator/attribute-types/utils.spec.ts (90%) rename {src => spec}/decorator/table.spec.ts (89%) rename {src => spec}/errors.spec.ts (89%) create mode 100644 spec/module-test-spec.mjs rename {src => spec}/query/expression.spec.ts (97%) rename {src => spec}/query/global-secondary-index.spec.ts (88%) rename {src => spec}/query/local-secondary-index.spec.ts (68%) rename {src => spec}/query/output.spec.ts (96%) rename {src => spec}/query/primary-key.spec.ts (85%) rename {src => spec}/query/projection-expression.spec.ts (87%) rename {src => spec}/query/search.spec.ts (99%) rename {src => spec}/setup-tests.spec.ts (72%) rename {src => spec}/table.spec.ts (97%) rename {src => spec}/transaction.spec.ts (71%) create mode 100644 spec/tsconfig.json rename {src => spec}/utils/cdk.spec.ts (89%) rename {src => spec}/utils/truly-empty.spec.ts (97%) delete mode 100644 src/decorator/attribute-types/utils.ts delete mode 100644 src/dyngoose.ts delete mode 100644 src/errors.ts create mode 100644 src/errors/batch-error.ts create mode 100644 src/errors/dyngoose-error.ts create mode 100644 src/errors/helpful-error.ts create mode 100644 src/errors/index.ts create mode 100644 src/errors/query-error.ts create mode 100644 src/errors/schema-error.ts create mode 100644 src/errors/validator-error.ts create mode 100644 src/multi-document-operation.ts create mode 100644 src/tables/operations.ts create mode 100644 src/tsconfig.base.json create mode 100644 src/tsconfig.cjs.json create mode 100644 src/tsconfig.cjs.spec.json create mode 100644 src/tsconfig.esm.json create mode 100644 src/tsconfig.types.json create mode 100644 src/tsconfig.types.spec.json create mode 100644 src/utils/index.ts create mode 100644 src/utils/is-number.ts create mode 100644 src/utils/number-to-string.ts create mode 100644 src/utils/require-hash-key-equals-operator.ts create mode 100644 src/utils/string-to-number.ts create mode 100644 tools/create-esm-package.js create mode 100644 tsconfig.mocha.json diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 8211910d..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,206 +0,0 @@ -module.exports = { - extends: 'standard-with-typescript', - parserOptions: { - project: './tsconfig.json', - }, - rules: { - // disable the eslint rule as it can report incorrectly - 'space-before-function-paren': 'off', - '@typescript-eslint/space-before-function-paren': [ - 'error', - { - anonymous: 'always', - named: 'never', - asyncArrow: 'always', - }, - ], - '@typescript-eslint/comma-dangle': [ - 'error', - 'always-multiline', - ], - 'no-labels': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - }, - // "env": { - // "browser": true, - // "es6": true, - // "node": true - // }, - // "parser": "@typescript-eslint/parser", - // "parserOptions": { - // "project": "tsconfig.json", - // "sourceType": "module" - // }, - // "plugins": [ - // "eslint-plugin-import", - // "@typescript-eslint" - // ], - // "rules": { - // "@typescript-eslint/consistent-type-definitions": "error", - // "@typescript-eslint/dot-notation": "off", - // "@typescript-eslint/explicit-member-accessibility": [ - // "off", - // { - // "accessibility": "explicit" - // } - // ], - // "@typescript-eslint/indent": [ - // "error", - // 2 - // ], - // "@typescript-eslint/member-delimiter-style": [ - // "error", - // { - // "multiline": { - // "delimiter": "none", - // "requireLast": true - // }, - // "singleline": { - // "delimiter": "semi", - // "requireLast": false - // } - // } - // ], - // "@typescript-eslint/member-ordering": "error", - // "@typescript-eslint/naming-convention": "error", - // "@typescript-eslint/no-empty-function": "off", - // "@typescript-eslint/no-empty-interface": "error", - // "@typescript-eslint/no-inferrable-types": [ - // "error", - // { - // "ignoreParameters": true - // } - // ], - // "@typescript-eslint/no-misused-new": "error", - // "@typescript-eslint/no-unused-expressions": "error", - // "@typescript-eslint/prefer-function-type": "error", - // "@typescript-eslint/quotes": [ - // "error", - // "single", - // { - // "avoidEscape": true - // } - // ], - // "@typescript-eslint/semi": [ - // "error", - // "never" - // ], - // "@typescript-eslint/type-annotation-spacing": "error", - // "@typescript-eslint/unified-signatures": "error", - // "arrow-body-style": "error", - // "brace-style": [ - // "error", - // "1tbs" - // ], - // "comma-dangle": [ - // "error", - // "always-multiline" - // ], - // "constructor-super": "error", - // "curly": "error", - // "eol-last": "error", - // "eqeqeq": [ - // "error", - // "smart" - // ], - // "guard-for-in": "error", - // "id-blacklist": "off", - // "id-match": "off", - // "import/order": "error", - // "max-len": [ - // "error", - // { - // "code": 140 - // } - // ], - // "no-bitwise": "error", - // "no-caller": "error", - // "no-console": [ - // "error", - // { - // "allow": [ - // "warn", - // "dir", - // "timeLog", - // "assert", - // "clear", - // "count", - // "countReset", - // "group", - // "groupEnd", - // "table", - // "dirxml", - // "error", - // "groupCollapsed", - // "Console", - // "profile", - // "profileEnd", - // "timeStamp", - // "context" - // ] - // } - // ], - // "no-debugger": "error", - // "no-empty": "off", - // "no-eval": "error", - // "no-fallthrough": "error", - // "no-new-wrappers": "error", - // "no-restricted-imports": "off", - // "no-shadow": [ - // "error", - // { - // "hoist": "all" - // } - // ], - // "no-throw-literal": "error", - // "no-trailing-spaces": "error", - // "no-undef-init": "error", - // "no-underscore-dangle": "off", - // "no-unused-labels": "error", - // "no-var": "error", - // "prefer-const": "error", - // "radix": "error", - // "space-before-function-paren": [ - // "error", - // { - // "anonymous": "always", - // "named": "never", - // "asyncArrow": "always" - // } - // ], - // "space-in-parens": [ - // "error", - // "always" - // ], - // "spaced-comment": [ - // "error", - // "always", - // { - // "markers": [ - // "/" - // ] - // } - // ], - // // "@typescript-eslint/tslint/config": [ - // // "error", - // // { - // // "rules": { - // // "import-spacing": true, - // // "whitespace": [ - // // true, - // // "check-branch", - // // "check-decl", - // // "check-operator", - // // "check-module", - // // "check-rest-spread", - // // "check-separator", - // // "check-type", - // // "check-typecast", - // // "check-type-operator", - // // "check-preblock" - // // ] - // // } - // // } - // // ] - // } -} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 78feac3e..18622f87 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -25,9 +25,11 @@ jobs: - name: Lint run: npm run lint - name: Test - run: npm test + run: npm run test:ci env: DYNAMO_ENDPOINT: http://localhost:8000 + - name: Test ESM + run: npm run test:esm - name: Publish if: github.event_name == 'push' && github.ref == 'refs/heads/master' # npm will not execute `prepublisnOnly` lifecycle hook if user is root. diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 1f78b074..00000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Local Mocha Tests", - "console": "integratedTerminal", - "type": "node", - "request": "launch", - "program": "${workspaceRoot}/node_modules/.bin/mocha", - "stopOnEntry": false, - "args": ["--no-timeouts", "--colors", "--recursive", "lib"], - "cwd": "${workspaceRoot}", - "runtimeExecutable": null, - "env": { - "NODE_ENV": "testing", - "DYNAMO_ENDPOINT": "http://127.0.0.1:8000", - "AWS_REGION": "us-east-1", - "AWS_ACCESS_KEY_ID": "abcde", - "AWS_SECRET_ACCESS_KEY": "abcde" - } - } - ] -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index b1dfd2c2..9833c5a2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,8 @@ { + "editor.codeActionsOnSave": { + "source.organizeImports": "never", + "source.fixAll.eslint": "explicit" + }, "cSpell.words": [ "dyngoose" ] diff --git a/docker-compose.yml b/docker-compose.yml index 25d41d6b..f17ba7a6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3" - services: dynamodb: image: amazon/dynamodb-local diff --git a/eslint.config.cjs b/eslint.config.cjs new file mode 100644 index 00000000..1f225f2c --- /dev/null +++ b/eslint.config.cjs @@ -0,0 +1,56 @@ +const love = require('eslint-config-love') +const simpleImportSort = require('eslint-plugin-simple-import-sort') +const importPlugin = require('eslint-plugin-import') + +module.exports = [ + { + ...love, + files: ['**/*.js', '**/*.ts'], + plugins: { + ...love.plugins ?? {}, + 'simple-import-sort': simpleImportSort, + 'import': importPlugin, + }, + rules: { + ...love.rules, + // disable the eslint rule as it can report incorrectly + // 'space-before-function-paren': 'off', + + // sort imports! + 'simple-import-sort/imports': 'error', + 'simple-import-sort/exports': 'error', + "import/first": "error", + "import/newline-after-import": "error", + "import/no-duplicates": "error", + + // we use a few labeled for loops + 'no-labels': 'off', + + '@typescript-eslint/no-non-null-assertion': 'off', + + // we want to use strict === false to avoid truthy logic + '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'off', + + // uninitialized variables are assumed as undefined + '@typescript-eslint/init-declarations': 'off', + + // we use any + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + + // we use delete + '@typescript-eslint/no-dynamic-delete': 'off', + + // attribute classes do not all use this in toDynamo, fromDynamo, toJSON, etc + '@typescript-eslint/class-methods-use-this': 'off', + + // allow throwing of caught errors (unknowns) + '@typescript-eslint/only-throw-error': ['error', { + allowThrowingUnknown: true, + }], + + // we need to rely on require at times + '@typescript-eslint/no-require-imports': 'off', + } + } +] \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8e485d88..59ad76c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,38 +9,42 @@ "version": "4.11.2", "license": "ISC", "dependencies": { - "@aws-sdk/util-dynamodb": "^3.309.0", + "@aws-sdk/util-dynamodb": "^3.637.0", "async-sema": "^3.1.1", "lodash": "^4.17.21" }, "devDependencies": { - "@aws-sdk/client-dynamodb": "^3.309.0", - "@commitlint/cli": "^17.5.1", - "@commitlint/config-conventional": "^17.4.4", + "@aws-sdk/client-dynamodb": "^3.637.0", + "@commitlint/cli": "^19.4.1", + "@commitlint/config-conventional": "^19.4.1", "@semantic-release/changelog": "^6.0.3", "@semantic-release/git": "^10.0.1", "@types/chai": "4.3.4", - "@types/lodash": "^4.14.192", - "@types/mocha": "9.0.0", - "@types/node": "^18.15.11", + "@types/lodash": "^4.14.202", + "@types/mocha": "10.0.7", + "@types/node": "^20.16.2", + "@typescript-eslint/utils": "^8.3.0", "aws-cdk-lib": "^2.73.0", "chai": "4.3.7", - "check-engine": "1.10.1", - "eslint": "^8.38.0", - "eslint-config-standard-with-typescript": "^34.0.1", + "check-engine": "1.12.0", + "eslint": "^8.56.0", + "eslint-config-love": "^63.0.0", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-simple-import-sort": "^12.1.1", "husky": "^8.0.3", - "mocha": "9.1.2", + "mocha": "10.7.3", "semantic-release": "^21.0.1", - "typescript": "^5.0.4" + "ts-node": "^10.9.2", + "typescript": "^5.5.4" }, "engines": { - "node": ">=12.4.0" + "node": ">=18.0.0" }, "optionalDependencies": { - "aws-xray-sdk-core": "^3.5.1" + "aws-xray-sdk-core": "^3.9.0" }, "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.279.0" + "@aws-sdk/client-dynamodb": "^3.637.0" } }, "node_modules/@aws-cdk/asset-awscli-v1": { @@ -61,1508 +65,1739 @@ "integrity": "sha512-RR9M5LveGoOTqkzqhNTNe5Zb9XEIdyhOHS033V/rellvBRtnAcdwj4OxOVbLfojzwFeFjKwa1DA2+6r8zJroUg==", "dev": true }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "dev": true, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "dependencies": { - "tslib": "^1.11.1" + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/ie11-detection/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/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", - "dev": true, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@aws-crypto/sha256-browser/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/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", - "dev": true, + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/sha256-js/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/@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", - "dev": true, + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "dependencies": { - "tslib": "^1.11.1" + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/supports-web-crypto/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/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", - "dev": true, + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "dependencies": { "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/util/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/@aws-sdk/abort-controller": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.306.0.tgz", - "integrity": "sha512-ewCvdUrMJMlnkNaqXdG7L2H6O7CDI036y6lkTU8gQqa2lCzZvqBkzz6R5NbWqb8TJPi69Z7lXEITgk2b0+pl6w==", - "dev": true, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dependencies": { - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.309.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.309.0.tgz", - "integrity": "sha512-g/ZfunW1ELcmL7F6VgLdhbvZc6e9wksrpdqf74qSHVr7YlyoWacvQOjS+YYwkjC1tfoocTrAl0D+EJZShDgBmw==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.309.0", - "@aws-sdk/config-resolver": "3.306.0", - "@aws-sdk/credential-provider-node": "3.309.0", - "@aws-sdk/fetch-http-handler": "3.306.0", - "@aws-sdk/hash-node": "3.306.0", - "@aws-sdk/invalid-dependency": "3.306.0", - "@aws-sdk/middleware-content-length": "3.306.0", - "@aws-sdk/middleware-endpoint": "3.306.0", - "@aws-sdk/middleware-endpoint-discovery": "3.306.0", - "@aws-sdk/middleware-host-header": "3.306.0", - "@aws-sdk/middleware-logger": "3.306.0", - "@aws-sdk/middleware-recursion-detection": "3.306.0", - "@aws-sdk/middleware-retry": "3.306.0", - "@aws-sdk/middleware-serde": "3.306.0", - "@aws-sdk/middleware-signing": "3.306.0", - "@aws-sdk/middleware-stack": "3.306.0", - "@aws-sdk/middleware-user-agent": "3.306.0", - "@aws-sdk/node-config-provider": "3.306.0", - "@aws-sdk/node-http-handler": "3.306.0", - "@aws-sdk/protocol-http": "3.306.0", - "@aws-sdk/smithy-client": "3.309.0", - "@aws-sdk/types": "3.306.0", - "@aws-sdk/url-parser": "3.306.0", - "@aws-sdk/util-base64": "3.303.0", - "@aws-sdk/util-body-length-browser": "3.303.0", - "@aws-sdk/util-body-length-node": "3.303.0", - "@aws-sdk/util-defaults-mode-browser": "3.309.0", - "@aws-sdk/util-defaults-mode-node": "3.309.0", - "@aws-sdk/util-endpoints": "3.306.0", - "@aws-sdk/util-retry": "3.306.0", - "@aws-sdk/util-user-agent-browser": "3.306.0", - "@aws-sdk/util-user-agent-node": "3.306.0", - "@aws-sdk/util-utf8": "3.303.0", - "@aws-sdk/util-waiter": "3.306.0", - "tslib": "^2.5.0", - "uuid": "^8.3.2" + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.309.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.309.0.tgz", - "integrity": "sha512-2Tr3AROBzZOy+BuANlmDrwgyX+Q2kb6SIlANg6b9mrIzlflC48hRH0ngEe4C5RT6RruKIP+6R0al6vAq8lCk6A==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.306.0", - "@aws-sdk/fetch-http-handler": "3.306.0", - "@aws-sdk/hash-node": "3.306.0", - "@aws-sdk/invalid-dependency": "3.306.0", - "@aws-sdk/middleware-content-length": "3.306.0", - "@aws-sdk/middleware-endpoint": "3.306.0", - "@aws-sdk/middleware-host-header": "3.306.0", - "@aws-sdk/middleware-logger": "3.306.0", - "@aws-sdk/middleware-recursion-detection": "3.306.0", - "@aws-sdk/middleware-retry": "3.306.0", - "@aws-sdk/middleware-serde": "3.306.0", - "@aws-sdk/middleware-stack": "3.306.0", - "@aws-sdk/middleware-user-agent": "3.306.0", - "@aws-sdk/node-config-provider": "3.306.0", - "@aws-sdk/node-http-handler": "3.306.0", - "@aws-sdk/protocol-http": "3.306.0", - "@aws-sdk/smithy-client": "3.309.0", - "@aws-sdk/types": "3.306.0", - "@aws-sdk/url-parser": "3.306.0", - "@aws-sdk/util-base64": "3.303.0", - "@aws-sdk/util-body-length-browser": "3.303.0", - "@aws-sdk/util-body-length-node": "3.303.0", - "@aws-sdk/util-defaults-mode-browser": "3.309.0", - "@aws-sdk/util-defaults-mode-node": "3.309.0", - "@aws-sdk/util-endpoints": "3.306.0", - "@aws-sdk/util-retry": "3.306.0", - "@aws-sdk/util-user-agent-browser": "3.306.0", - "@aws-sdk/util-user-agent-node": "3.306.0", - "@aws-sdk/util-utf8": "3.303.0", - "tslib": "^2.5.0" + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.309.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.309.0.tgz", - "integrity": "sha512-5hQMibuKWxDJo6IN+4ah0gskjJa16R41PqkeAOwExthTTyNzgoVyP9wyhnETyntYlHIBrHEmHTwdG06YiAxm4A==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.306.0", - "@aws-sdk/fetch-http-handler": "3.306.0", - "@aws-sdk/hash-node": "3.306.0", - "@aws-sdk/invalid-dependency": "3.306.0", - "@aws-sdk/middleware-content-length": "3.306.0", - "@aws-sdk/middleware-endpoint": "3.306.0", - "@aws-sdk/middleware-host-header": "3.306.0", - "@aws-sdk/middleware-logger": "3.306.0", - "@aws-sdk/middleware-recursion-detection": "3.306.0", - "@aws-sdk/middleware-retry": "3.306.0", - "@aws-sdk/middleware-serde": "3.306.0", - "@aws-sdk/middleware-stack": "3.306.0", - "@aws-sdk/middleware-user-agent": "3.306.0", - "@aws-sdk/node-config-provider": "3.306.0", - "@aws-sdk/node-http-handler": "3.306.0", - "@aws-sdk/protocol-http": "3.306.0", - "@aws-sdk/smithy-client": "3.309.0", - "@aws-sdk/types": "3.306.0", - "@aws-sdk/url-parser": "3.306.0", - "@aws-sdk/util-base64": "3.303.0", - "@aws-sdk/util-body-length-browser": "3.303.0", - "@aws-sdk/util-body-length-node": "3.303.0", - "@aws-sdk/util-defaults-mode-browser": "3.309.0", - "@aws-sdk/util-defaults-mode-node": "3.309.0", - "@aws-sdk/util-endpoints": "3.306.0", - "@aws-sdk/util-retry": "3.306.0", - "@aws-sdk/util-user-agent-browser": "3.306.0", - "@aws-sdk/util-user-agent-node": "3.306.0", - "@aws-sdk/util-utf8": "3.303.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" + "node_modules/@aws-sdk/client-dynamodb": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.637.0.tgz", + "integrity": "sha512-zUneT0yLgJjC69yry2fgYVWkv68OeV3amWaDXHirA8yJgygyc7tBLo+sQmtHczmKt8dBD9bU3OWpbAbtpF9Esw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/client-sts": "3.637.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-endpoint-discovery": "3.620.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.2", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.309.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.309.0.tgz", - "integrity": "sha512-rBVm50ft5o1FLaCNjSFY4c/lI7qPG5MMhOr4sdvEUaU1Mkniyd6M+3Pch9S3a5NtF0Kfzw9dWQpjAL+nqJaITQ==", - "dev": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.306.0", - "@aws-sdk/credential-provider-node": "3.309.0", - "@aws-sdk/fetch-http-handler": "3.306.0", - "@aws-sdk/hash-node": "3.306.0", - "@aws-sdk/invalid-dependency": "3.306.0", - "@aws-sdk/middleware-content-length": "3.306.0", - "@aws-sdk/middleware-endpoint": "3.306.0", - "@aws-sdk/middleware-host-header": "3.306.0", - "@aws-sdk/middleware-logger": "3.306.0", - "@aws-sdk/middleware-recursion-detection": "3.306.0", - "@aws-sdk/middleware-retry": "3.306.0", - "@aws-sdk/middleware-sdk-sts": "3.306.0", - "@aws-sdk/middleware-serde": "3.306.0", - "@aws-sdk/middleware-signing": "3.306.0", - "@aws-sdk/middleware-stack": "3.306.0", - "@aws-sdk/middleware-user-agent": "3.306.0", - "@aws-sdk/node-config-provider": "3.306.0", - "@aws-sdk/node-http-handler": "3.306.0", - "@aws-sdk/protocol-http": "3.306.0", - "@aws-sdk/smithy-client": "3.309.0", - "@aws-sdk/types": "3.306.0", - "@aws-sdk/url-parser": "3.306.0", - "@aws-sdk/util-base64": "3.303.0", - "@aws-sdk/util-body-length-browser": "3.303.0", - "@aws-sdk/util-body-length-node": "3.303.0", - "@aws-sdk/util-defaults-mode-browser": "3.309.0", - "@aws-sdk/util-defaults-mode-node": "3.309.0", - "@aws-sdk/util-endpoints": "3.306.0", - "@aws-sdk/util-retry": "3.306.0", - "@aws-sdk/util-user-agent-browser": "3.306.0", - "@aws-sdk/util-user-agent-node": "3.306.0", - "@aws-sdk/util-utf8": "3.303.0", - "fast-xml-parser": "4.1.2", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" + "node_modules/@aws-sdk/client-sso": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz", + "integrity": "sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/config-resolver": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.306.0.tgz", - "integrity": "sha512-kpqHu6LvNMYxullm+tLCsY6KQ2mZUxZTdyWJKTYLZCTxj4HcGJxf4Jxj9dwFAZVl/clcVPGWcHJaQJjyjwzBzw==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.306.0", - "@aws-sdk/util-config-provider": "3.295.0", - "@aws-sdk/util-middleware": "3.306.0", - "tslib": "^2.5.0" + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.637.0.tgz", + "integrity": "sha512-27bHALN6Qb6m6KZmPvRieJ/QRlj1lyac/GT2Rn5kJpre8Mpp+yxrtvp3h9PjNBty4lCeFEENfY4dGNSozBuBcw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" }, - "engines": { - "node": ">=14.0.0" + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.637.0.tgz", + "integrity": "sha512-xUi7x4qDubtA8QREtlblPuAcn91GS/09YVEY/RwU7xCY0aqGuFwgszAANlha4OUIqva8oVj2WO4gJuG+iaSnhw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", + "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", + "dependencies": { + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.306.0.tgz", - "integrity": "sha512-DTH+aMvMu+LAoWW+yfPkWzFXt/CPNFQ7+/4xiMnc7FWf+tjt+HZIrPECAV2rBVppNCkh7PC+xDSN61PFvBYOsw==", - "dev": true, + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", + "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", "dependencies": { - "@aws-sdk/property-provider": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-imds": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.306.0.tgz", - "integrity": "sha512-WdrNhq2MwvjZk2I8Of+bZ/qWHG2hREQpwlBiG3tMeEkuywx7M1x3Rt0eHgiR1sTcm05kxNn0rB4OeWOeek37cA==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz", + "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==", "dependencies": { - "@aws-sdk/node-config-provider": "3.306.0", - "@aws-sdk/property-provider": "3.306.0", - "@aws-sdk/types": "3.306.0", - "@aws-sdk/url-parser": "3.306.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.309.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.309.0.tgz", - "integrity": "sha512-7xAqfbuvEdQdz2YcS5OPWH6uv09pMEW6lvmEwM8tf3gn/c3mxFm0/geFeO3+hnkIjByPM02PW7qQJXmPu1l7AA==", - "dev": true, + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz", + "integrity": "sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw==", "dependencies": { - "@aws-sdk/credential-provider-env": "3.306.0", - "@aws-sdk/credential-provider-imds": "3.306.0", - "@aws-sdk/credential-provider-process": "3.306.0", - "@aws-sdk/credential-provider-sso": "3.309.0", - "@aws-sdk/credential-provider-web-identity": "3.306.0", - "@aws-sdk/property-provider": "3.306.0", - "@aws-sdk/shared-ini-file-loader": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.309.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.309.0.tgz", - "integrity": "sha512-rgf53RH9mcATr+5rRGGqRmoOEceX+XSbQvGM1QRHxROJJiYsZWdBQu9w+UuKcQF03qLMfi4G+6iNHect5TVs2Q==", - "dev": true, + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz", + "integrity": "sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA==", "dependencies": { - "@aws-sdk/credential-provider-env": "3.306.0", - "@aws-sdk/credential-provider-imds": "3.306.0", - "@aws-sdk/credential-provider-ini": "3.309.0", - "@aws-sdk/credential-provider-process": "3.306.0", - "@aws-sdk/credential-provider-sso": "3.309.0", - "@aws-sdk/credential-provider-web-identity": "3.306.0", - "@aws-sdk/property-provider": "3.306.0", - "@aws-sdk/shared-ini-file-loader": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.637.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.306.0.tgz", - "integrity": "sha512-2RezGskHqJeHtGbK7CqhGNAoqXgQJb7FfPFqwUQ9oVDZS8f145jVwajjHcc7Qn3IwGoqylMF3uXIljUv89uDzA==", - "dev": true, + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", + "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", "dependencies": { - "@aws-sdk/property-provider": "3.306.0", - "@aws-sdk/shared-ini-file-loader": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.309.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.309.0.tgz", - "integrity": "sha512-uMphs47O2S9NK7I5CsDttp88X7b/JktGOrW8RTLRw1QURQ8v0uP+MLHFogRtWi4E7+zo86Equ0njlpYlFvrpSA==", - "dev": true, + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz", + "integrity": "sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA==", "dependencies": { - "@aws-sdk/client-sso": "3.309.0", - "@aws-sdk/property-provider": "3.306.0", - "@aws-sdk/shared-ini-file-loader": "3.306.0", - "@aws-sdk/token-providers": "3.309.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@aws-sdk/client-sso": "3.637.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.306.0.tgz", - "integrity": "sha512-MOQGQaOtdo4zLQZ1bRjD2n1PUzfNty+sKe+1wlm5bIqTN93UX3S8f0QznucZr7uJxI4Z14ZLwuYeAUV4Tgchlw==", - "dev": true, + "version": "3.621.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", + "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", "dependencies": { - "@aws-sdk/property-provider": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.621.0" } }, "node_modules/@aws-sdk/endpoint-cache": { - "version": "3.303.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.303.0.tgz", - "integrity": "sha512-Ybh3AciI0PiMmlQgMNBmJXo4dnik9/OMihHUSWlZtLNA0480ZIwMbpUgs2O4SX2S2+a+ZqgyF/o1nFodaWl6ZA==", - "dev": true, + "version": "3.572.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.572.0.tgz", + "integrity": "sha512-CzuRWMj/xtN9p9eP915nlPmlyniTzke732Ow/M60++gGgB3W+RtZyFftw3TEx+NzNhd1tH54dEcGiWdiNaBz3Q==", "dependencies": { "mnemonist": "0.38.3", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/fetch-http-handler": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.306.0.tgz", - "integrity": "sha512-T8OODOnPpDqkXS+XSMIkd6hf90h833JLN93wq3ibbyD/WvGveufFFHsbsNyccE9+CSv/BjEuN5QbHqTKTp3BlA==", - "dev": true, - "dependencies": { - "@aws-sdk/protocol-http": "3.306.0", - "@aws-sdk/querystring-builder": "3.306.0", - "@aws-sdk/types": "3.306.0", - "@aws-sdk/util-base64": "3.303.0", - "tslib": "^2.5.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/hash-node": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.306.0.tgz", - "integrity": "sha512-EcSLd6gKoDEEBPZqEv+Ky9gIyefwyyrAJGILGKoYBmcOIY7Y0xKId0hxCa9/1xvWTaVC1u+rA06DGgksZOa78w==", - "dev": true, + "node_modules/@aws-sdk/middleware-endpoint-discovery": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.620.0.tgz", + "integrity": "sha512-T6kuydHBF4BPP5CVH53Fze7c2b9rqxWP88XrGtmNMXXdY4sXur1v/itGdS2l3gqRjxKo0LsmjmuQm9zL4vGneQ==", "dependencies": { - "@aws-sdk/types": "3.306.0", - "@aws-sdk/util-buffer-from": "3.303.0", - "@aws-sdk/util-utf8": "3.303.0", - "tslib": "^2.5.0" + "@aws-sdk/endpoint-cache": "3.572.0", + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/invalid-dependency": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.306.0.tgz", - "integrity": "sha512-9Mkcr+qG7QR4R5bJcA8bBNd8E2x6WaZStsQ3QeFbdQr3V3Tunvra/KlCFsEL55GgU8BZt5isOaHqq7uxs5ILtQ==", - "dev": true, - "dependencies": { - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/is-array-buffer": { - "version": "3.303.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.303.0.tgz", - "integrity": "sha512-IitBTr+pou7v5BrYLFH/SbIf3g1LIgMhcI3bDXBq2FjzmDftj4bW8BOmg05b9YKf2TrrggvJ4yk/jH+yYFXoJQ==", - "dev": true, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", + "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", "dependencies": { - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-content-length": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.306.0.tgz", - "integrity": "sha512-JbONf2Ms+/DVRcpFNsKGdOQU94Js56KV+AhlPJmCwLxfyWvQjTt0KxFC1Dd+cjeNEXUduvBarrehgsqFlWnoHQ==", - "dev": true, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", + "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", "dependencies": { - "@aws-sdk/protocol-http": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-endpoint": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.306.0.tgz", - "integrity": "sha512-i3QRiwgkcsuVN55O7l8I/QGwCypGRZXdYkPjU56LI2w2oiZ82f/nVMNXVc+ZFm2YH7WbCE+5jguw2J7HXdOlyQ==", - "dev": true, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", + "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", "dependencies": { - "@aws-sdk/middleware-serde": "3.306.0", - "@aws-sdk/types": "3.306.0", - "@aws-sdk/url-parser": "3.306.0", - "@aws-sdk/util-middleware": "3.306.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-endpoint-discovery": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.306.0.tgz", - "integrity": "sha512-lIZQ/aTiVx5AwlZJLmwoNP/fxBpSSjDPg/AQZDtr869/u0D5BUn60OZYhDuoSSFousoAG06ac8/3NUAHWYdLQQ==", - "dev": true, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz", + "integrity": "sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug==", "dependencies": { - "@aws-sdk/endpoint-cache": "3.303.0", - "@aws-sdk/protocol-http": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.306.0.tgz", - "integrity": "sha512-mHDHK9E+c7HwMlrCJ+VFSB6tkq8oJVkYEHCvPkdrnzN/g9P/d/UhPIeGapZXMbAIZEaLpEGqs536mYzeRKZG8A==", - "dev": true, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", + "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", "dependencies": { - "@aws-sdk/protocol-http": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.306.0.tgz", - "integrity": "sha512-1FRHp/QB0Lb+CgP+c9CYW6BZh+q+5pnuOKo/Rd6hjYiM+kT1G/cWdXnMJQBR4rbTCTixbqCnObNJ1EyP/ofQhQ==", - "dev": true, + "node_modules/@aws-sdk/token-providers": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", + "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", "dependencies": { - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.614.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.306.0.tgz", - "integrity": "sha512-Hpj42ZLmwCy/CtVxi57NTeOEPoUJlivF3VIgowZ9JhaF61cakVKyrJ+f3jwXciDUtuYrdKm5Wf6prW6apWo0YA==", - "dev": true, + "node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", "dependencies": { - "@aws-sdk/protocol-http": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-retry": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.306.0.tgz", - "integrity": "sha512-eMyfr/aeurXXDz4x+WVrvLI8fVDP6klJOjziBEWZ/MUNP/hTFhkiQsMVbvT6O4Pspp7+FgCSdcUPG6Os2gK+CQ==", - "dev": true, + "node_modules/@aws-sdk/util-dynamodb": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.637.0.tgz", + "integrity": "sha512-C2q8HcGRiahtf46Mhaqydh1gofeksj7m74PJXHYKW+pKBMLPlpou1+w2o5QSpVEp0dSBtKw30eRVQzxhqg/ACA==", "dependencies": { - "@aws-sdk/protocol-http": "3.306.0", - "@aws-sdk/service-error-classification": "3.306.0", - "@aws-sdk/types": "3.306.0", - "@aws-sdk/util-middleware": "3.306.0", - "@aws-sdk/util-retry": "3.306.0", - "tslib": "^2.5.0", - "uuid": "^8.3.2" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-dynamodb": "^3.637.0" } }, - "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.306.0.tgz", - "integrity": "sha512-2rSAR3nc5faYuEnh1KxQMCMCkEkJyaDfA3zwWLqZ+/TBCH0PlPkBv+Z9yXmteEki0vI5Hr+e+atTutJZoyG13g==", - "dev": true, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz", + "integrity": "sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw==", "dependencies": { - "@aws-sdk/middleware-signing": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-serde": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.306.0.tgz", - "integrity": "sha512-M3gyPLPduZXMvdgt4XEpVO+3t0ZVPdgeQQwG6JnXv0dgyUizshYs4lrVOAb1KwF6StsmkrAgSN+I273elLiKjA==", - "dev": true, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", "dependencies": { - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.306.0.tgz", - "integrity": "sha512-JhpSriN4xa4a/p5gAPL0OWFKJF4eWYU3K+LLlXBNGMbxg/qNL4skgT4dMFe3ii9EW8kI+r6tpvSgC+lP7/Tyng==", - "dev": true, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", + "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", "dependencies": { - "@aws-sdk/property-provider": "3.306.0", - "@aws-sdk/protocol-http": "3.306.0", - "@aws-sdk/signature-v4": "3.306.0", - "@aws-sdk/types": "3.306.0", - "@aws-sdk/util-middleware": "3.306.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/middleware-stack": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.306.0.tgz", - "integrity": "sha512-G//a6MVSxyFVpOMZ+dzT3+w7XblOd2tRJ5g+/okjn3pNBLbo5o9Hu33K/bz0SQjT/m5mU2F9m0wcdCPYbRPysg==", - "dev": true, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", + "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", "dependencies": { - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.306.0.tgz", - "integrity": "sha512-tP6I+Lbs68muPfdMA6Rfc+8fYo49nEn9A3RMiOU2COClWsmiZatpbK9UYlqIOxeGB/s2jI7hXmQq6tT2LStLSg==", + "node_modules/@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, "dependencies": { - "@aws-sdk/protocol-http": "3.306.0", - "@aws-sdk/types": "3.306.0", - "@aws-sdk/util-endpoints": "3.306.0", - "tslib": "^2.5.0" + "@babel/highlight": "^7.18.6" }, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/node-config-provider": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.306.0.tgz", - "integrity": "sha512-+m+ALxNx5E1zLPPijO1pAbT5tnofLzZFWlnSYBEiOIwzaRU44rLYDqAhgXJkMMbOECkffDrv6ym0oWJIwJI+DA==", + "node_modules/@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, - "dependencies": { - "@aws-sdk/property-provider": "3.306.0", - "@aws-sdk/shared-ini-file-loader": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" - }, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/node-http-handler": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.306.0.tgz", - "integrity": "sha512-qvNSIVdGf0pnWEXsAulIqXk7LML25Zc1yxbujxoAj8oX5y+mDhzQdHKrMgc0FuI4RKoEd9px4DYoUbmTWrrxwA==", + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, "dependencies": { - "@aws-sdk/abort-controller": "3.306.0", - "@aws-sdk/protocol-http": "3.306.0", - "@aws-sdk/querystring-builder": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/property-provider": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.306.0.tgz", - "integrity": "sha512-37PnbjpANjHys0Y+DVmKUz1JbSGZ/mAndZeplTUsFDUtbNwJRw/fDyWUvGC82JWB4gNSP5muWscFvetZnK2l8A==", + "node_modules/@babel/highlight/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": { - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/protocol-http": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.306.0.tgz", - "integrity": "sha512-6Z8bqB8Ydz/qG7+lJzjwsjIca2w2zp4nZ2HjxMoUm0NBbVXGDx7H9qy9eOUqEiCbdXbsfK2BmVQreLhFLt056Q==", + "node_modules/@babel/highlight/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": { - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/querystring-builder": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.306.0.tgz", - "integrity": "sha512-kvz6fLwE4KojTxbphuo9JPwKKuhau2mmSurnqhtf77t9+0cOh2uzyYhIUtOFewpLj+qGoh4b2EODlJqczc7IKg==", + "node_modules/@babel/highlight/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, "dependencies": { - "@aws-sdk/types": "3.306.0", - "@aws-sdk/util-uri-escape": "3.303.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" + "color-name": "1.1.3" } }, - "node_modules/@aws-sdk/querystring-parser": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.306.0.tgz", - "integrity": "sha512-YjOdLcyS/8sNkFPgnxyUx+cM/P2XFGCA2WjQ0e9AXX8xFFkmnY6U5w2EknQ5zyvKy+R/KAV0KAMJBUB+ofjg0A==", + "node_modules/@babel/highlight/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==", + "dev": true + }, + "node_modules/@babel/highlight/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==", "dev": true, - "dependencies": { - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" - }, "engines": { - "node": ">=14.0.0" + "node": ">=0.8.0" } }, - "node_modules/@aws-sdk/service-error-classification": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.306.0.tgz", - "integrity": "sha512-lmXIVHWU5J60GmmTgyj79kupWYg5ntyNrUPt1P9FYTsXz+tdk4YYH7/2IxZ1XjBr4jEsN56gfSI0cfT07ztQJA==", - "devOptional": true, + "node_modules/@babel/highlight/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==", + "dev": true, "engines": { - "node": ">=14.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/shared-ini-file-loader": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.306.0.tgz", - "integrity": "sha512-mDmBRN+Y0+EBD5megId97UIJGV/rmRsAds22qy0mmVdD3X7qlxn974btXVgfZyda6qw/pX6hgi8X99Qj6Wjb0w==", + "node_modules/@babel/highlight/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": { - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/signature-v4": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.306.0.tgz", - "integrity": "sha512-yoQTo6wLirKHg34Zhm8tKmfEaK8fOn+psVdMtRs2vGq3uzKLb+YW5zywnujoVwBvygQTWxiDMwRxDduWAisccA==", + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, - "dependencies": { - "@aws-sdk/is-array-buffer": "3.303.0", - "@aws-sdk/types": "3.306.0", - "@aws-sdk/util-hex-encoding": "3.295.0", - "@aws-sdk/util-middleware": "3.306.0", - "@aws-sdk/util-uri-escape": "3.303.0", - "@aws-sdk/util-utf8": "3.303.0", - "tslib": "^2.5.0" - }, + "optional": true, "engines": { - "node": ">=14.0.0" + "node": ">=0.1.90" } }, - "node_modules/@aws-sdk/smithy-client": { - "version": "3.309.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.309.0.tgz", - "integrity": "sha512-2+LJD8/J9yoYmfjLZuMTI/IF8qFMMclWdDJaalj4Rzzd7qBWDS3Q23UxpZi9VR155nqpgr/R+TFZMgze1EhRHg==", + "node_modules/@commitlint/cli": { + "version": "19.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.4.1.tgz", + "integrity": "sha512-EerFVII3ZcnhXsDT9VePyIdCJoh3jEzygN1L37MjQXgPfGS6fJTWL/KHClVMod1d8w94lFC3l4Vh/y5ysVAz2A==", "dev": true, "dependencies": { - "@aws-sdk/middleware-stack": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@commitlint/format": "^19.3.0", + "@commitlint/lint": "^19.4.1", + "@commitlint/load": "^19.4.0", + "@commitlint/read": "^19.4.0", + "@commitlint/types": "^19.0.3", + "execa": "^8.0.1", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" }, "engines": { - "node": ">=14.0.0" + "node": ">=v18" } }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.309.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.309.0.tgz", - "integrity": "sha512-rB79nQArhVT3l8UglZyinZVm13hFRF4xqzrmSLNknxdlMLamrON/94H7S6lFLywdTags2SUdAxQ/LlStlFf78A==", + "node_modules/@commitlint/cli/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "dependencies": { - "@aws-sdk/client-sso-oidc": "3.309.0", - "@aws-sdk/property-provider": "3.306.0", - "@aws-sdk/shared-ini-file-loader": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@aws-sdk/types": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.306.0.tgz", - "integrity": "sha512-RnyknWWpQcRmNH7AsNr89sdhOoltCU/4YEwBMw34Eh+/36l7HfA5PdEKbsOkO7MO4+2g5qmmm/AHcnHRvymApg==", - "devOptional": true, - "dependencies": { - "tslib": "^2.5.0" - }, + "node_modules/@commitlint/cli/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, "engines": { - "node": ">=14.0.0" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@aws-sdk/url-parser": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.306.0.tgz", - "integrity": "sha512-mhyOjtycZgxKYo2CoDhDQONuRd5TLfEwmyGWVgFrfubF0LejQ3rkBRLC5zT9TBZ8RJHNlqU2oGdsZCy3JV6Rlw==", + "node_modules/@commitlint/cli/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "dependencies": { - "@aws-sdk/querystring-parser": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "engines": { + "node": ">=16.17.0" } }, - "node_modules/@aws-sdk/util-base64": { - "version": "3.303.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.303.0.tgz", - "integrity": "sha512-oj+p/GHHPcZEKjiiOHU/CyNQeh8i+8dfMMzU+VGdoK5jHaVG8h2b+V7GPf7I4wDkG2ySCK5b5Jw5NUHwdTJ13Q==", + "node_modules/@commitlint/cli/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": { - "@aws-sdk/util-buffer-from": "3.303.0", - "tslib": "^2.5.0" - }, "engines": { - "node": ">=14.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@aws-sdk/util-body-length-browser": { - "version": "3.303.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.303.0.tgz", - "integrity": "sha512-T643m0pKzgjAvPFy4W8zL+aszG3T22U8hb6stlMvT0z++Smv8QfIvkIkXjWyH2KlOt5GKliHwdOv8SAi0FSMJQ==", + "node_modules/@commitlint/cli/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, - "dependencies": { - "tslib": "^2.5.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@aws-sdk/util-body-length-node": { - "version": "3.303.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.303.0.tgz", - "integrity": "sha512-/hS8z6e18Le60hJr2TUIFoUjUiAsnQsuDn6DxX74GXhMOHeSwZDJ9jHF39quYkNMmAE37GrVH4MI9vE0pN27qw==", + "node_modules/@commitlint/cli/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { - "tslib": "^2.5.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=14.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@aws-sdk/util-buffer-from": { - "version": "3.303.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.303.0.tgz", - "integrity": "sha512-hUU+NW+SW6RNojtAKnnmz+tDShVKlEx2YsS4a5fSfrKRUes+zWz10cxVX0RQfysd3R6tdSHhbjsSj8eCIybheg==", + "node_modules/@commitlint/cli/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": { - "@aws-sdk/is-array-buffer": "3.303.0", - "tslib": "^2.5.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@aws-sdk/util-config-provider": { - "version": "3.295.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.295.0.tgz", - "integrity": "sha512-/5Dl1aV2yI8YQjqwmg4RTnl/E9NmNsx7HIwBZt+dTcOrM0LMUwczQBFFcLyqCj/qv5y+VsvLoAAA/OiBT7hb3w==", + "node_modules/@commitlint/cli/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": { - "tslib": "^2.5.0" - }, "engines": { - "node": ">=14.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@aws-sdk/util-defaults-mode-browser": { - "version": "3.309.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.309.0.tgz", - "integrity": "sha512-KTmoR24PhUCT9A8/f5rb7MQvzXqGJY7/VnYxNaQ6AzJZfZ3y3UYfvuJR9LRjWn+zQDy1lnTyjSh5eokf2VBOoQ==", + "node_modules/@commitlint/cli/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "dependencies": { - "@aws-sdk/property-provider": "3.306.0", - "@aws-sdk/types": "3.306.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" + "engines": { + "node": ">=14" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@commitlint/cli/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, "engines": { - "node": ">= 10.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@aws-sdk/util-defaults-mode-node": { - "version": "3.309.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.309.0.tgz", - "integrity": "sha512-3YIEWY6O5kyW6dbV+1jWdlsqjEN76sxY62841v5A9Vr/MGLowhm6YYW8MYWPye9RABl9osTs0NCeL2p6Re+IPw==", + "node_modules/@commitlint/config-conventional": { + "version": "19.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.4.1.tgz", + "integrity": "sha512-D5S5T7ilI5roybWGc8X35OBlRXLAwuTseH1ro0XgqkOWrhZU8yOwBOslrNmSDlTXhXLq8cnfhQyC42qaUCzlXA==", "dev": true, "dependencies": { - "@aws-sdk/config-resolver": "3.306.0", - "@aws-sdk/credential-provider-imds": "3.306.0", - "@aws-sdk/node-config-provider": "3.306.0", - "@aws-sdk/property-provider": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@commitlint/types": "^19.0.3", + "conventional-changelog-conventionalcommits": "^7.0.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=v18" } }, - "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.309.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.309.0.tgz", - "integrity": "sha512-kKk4d2DQy2Cp0SHwhRcBLJSH0b8+hk1WngZfrB/7bkF7OEUxJXWcYQ2XFhj8HaW69mkmr0NavRwIpiHpzqQU8g==", + "node_modules/@commitlint/config-validator": { + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.0.3.tgz", + "integrity": "sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==", + "dev": true, "dependencies": { - "tslib": "^2.5.0" + "@commitlint/types": "^19.0.3", + "ajv": "^8.11.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=v18" } }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.306.0.tgz", - "integrity": "sha512-aPTqU4VGhec8LDhKZrfA3/sBHTYRa0favKEo8aEa/vIZJTNBAFlUhvr5z7peAr8gBOtZZcElzX8PiK3jjn3ILw==", + "node_modules/@commitlint/config-validator/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "dependencies": { - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, - "engines": { - "node": ">=14.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@aws-sdk/util-hex-encoding": { - "version": "3.295.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.295.0.tgz", - "integrity": "sha512-XJcoVo41kHzhe28PBm/rqt5mdCp8R6abwiW9ug1dA6FOoPUO8kBUxDv6xaOmA2hfRvd2ocFfBXaUCBqUowkGcQ==", + "node_modules/@commitlint/config-validator/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==", + "dev": true + }, + "node_modules/@commitlint/ensure": { + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.0.3.tgz", + "integrity": "sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==", "dev": true, "dependencies": { - "tslib": "^2.5.0" + "@commitlint/types": "^19.0.3", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=v18" } }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.295.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.295.0.tgz", - "integrity": "sha512-d/s+zhUx5Kh4l/ecMP/TBjzp1GR/g89Q4nWH6+wH5WgdHsK+LG+vmsk6mVNuP/8wsCofYG4NBqp5Ulbztbm9QA==", + "node_modules/@commitlint/execute-rule": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.0.0.tgz", + "integrity": "sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==", "dev": true, - "dependencies": { - "tslib": "^2.5.0" - }, "engines": { - "node": ">=14.0.0" + "node": ">=v18" } }, - "node_modules/@aws-sdk/util-middleware": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.306.0.tgz", - "integrity": "sha512-14CSm1mTrfSNBGbkZu8vSjXYg7DUMfZc74IinOajcFtTswa/6SyiyhU9DK0a837qqwxSfFGpnE2thVeJIF/7FA==", + "node_modules/@commitlint/format": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.3.0.tgz", + "integrity": "sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==", "dev": true, "dependencies": { - "tslib": "^2.5.0" + "@commitlint/types": "^19.0.3", + "chalk": "^5.3.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=v18" + } + }, + "node_modules/@commitlint/format/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@aws-sdk/util-retry": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.306.0.tgz", - "integrity": "sha512-zcgTEIehQAIAm4vBNWfXZpDNbIrDM095vZmpbozQwK/pfDqMGvq7j3r9atKuEGTtoomoGoYwj3x/KEhO6JXJLg==", + "node_modules/@commitlint/is-ignored": { + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.2.2.tgz", + "integrity": "sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==", "dev": true, "dependencies": { - "@aws-sdk/service-error-classification": "3.306.0", - "tslib": "^2.5.0" + "@commitlint/types": "^19.0.3", + "semver": "^7.6.0" }, "engines": { - "node": ">= 14.0.0" + "node": ">=v18" } }, - "node_modules/@aws-sdk/util-uri-escape": { - "version": "3.303.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.303.0.tgz", - "integrity": "sha512-N3ULNuHCL3QzAlCTY+XRRkRQTYCTU8RRuzFCJX0pDpz9t2K+tLT7DbxqupWGNFGl5Xlulf1Is14J3BP/Dx91rA==", + "node_modules/@commitlint/lint": { + "version": "19.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.4.1.tgz", + "integrity": "sha512-Ws4YVAZ0jACTv6VThumITC1I5AG0UyXMGua3qcf55JmXIXm/ejfaVKykrqx7RyZOACKVAs8uDRIsEsi87JZ3+Q==", "dev": true, "dependencies": { - "tslib": "^2.5.0" + "@commitlint/is-ignored": "^19.2.2", + "@commitlint/parse": "^19.0.3", + "@commitlint/rules": "^19.4.1", + "@commitlint/types": "^19.0.3" }, "engines": { - "node": ">=14.0.0" + "node": ">=v18" } }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.306.0.tgz", - "integrity": "sha512-uZAtpvCasUdWRlB/nEjN0gf6G7810hT50VyWjpd6mQW78myV8M5fu/R03UFAZ+D8fhqqIdzR/IXDY1QUGp8bCA==", + "node_modules/@commitlint/load": { + "version": "19.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.4.0.tgz", + "integrity": "sha512-I4lCWaEZYQJ1y+Y+gdvbGAx9pYPavqZAZ3/7/8BpWh+QjscAn8AjsUpLV2PycBsEx7gupq5gM4BViV9xwTIJuw==", + "dev": true, + "dependencies": { + "@commitlint/config-validator": "^19.0.3", + "@commitlint/execute-rule": "^19.0.0", + "@commitlint/resolve-extends": "^19.1.0", + "@commitlint/types": "^19.0.3", + "chalk": "^5.3.0", + "cosmiconfig": "^9.0.0", + "cosmiconfig-typescript-loader": "^5.0.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "dependencies": { - "@aws-sdk/types": "3.306.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.306.0.tgz", - "integrity": "sha512-zLp9wIx7FZ0qFLimYW3lJ1uJM5gqxmmcQjNimUaUq/4a1caDkaiF/QeyyMFva+wIjyHRv22P5abUBjIEZrs5WA==", + "node_modules/@commitlint/load/node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "dependencies": { - "@aws-sdk/node-config-provider": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" }, "peerDependencies": { - "aws-crt": ">=1.0.0" + "typescript": ">=4.9.5" }, "peerDependenciesMeta": { - "aws-crt": { + "typescript": { "optional": true } } }, - "node_modules/@aws-sdk/util-utf8": { - "version": "3.303.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.303.0.tgz", - "integrity": "sha512-tZXVuMOIONPOuOGBs/XRdzxv6jUvTM620dRFFIHZwlGiW8bo0x0LlonrzDAJZA4e9ZwmxJIj8Ji13WVRBGvZWg==", + "node_modules/@commitlint/load/node_modules/cosmiconfig-typescript-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz", + "integrity": "sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==", "dev": true, "dependencies": { - "@aws-sdk/util-buffer-from": "3.303.0", - "tslib": "^2.5.0" + "jiti": "^1.19.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=v16" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=8.2", + "typescript": ">=4" } }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "node_modules/@commitlint/message": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.0.0.tgz", + "integrity": "sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==", "dev": true, - "dependencies": { - "tslib": "^2.3.1" + "engines": { + "node": ">=v18" } }, - "node_modules/@aws-sdk/util-waiter": { - "version": "3.306.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.306.0.tgz", - "integrity": "sha512-/cCmEaxGJOVKHuuzm4zM3aY2Un7pJGyewcd9WWvLjZIoF9jCCqyjmsxM+OXdCjs7NOdo41cValYhILYI+nD8Tg==", + "node_modules/@commitlint/parse": { + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.0.3.tgz", + "integrity": "sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==", "dev": true, "dependencies": { - "@aws-sdk/abort-controller": "3.306.0", - "@aws-sdk/types": "3.306.0", - "tslib": "^2.5.0" + "@commitlint/types": "^19.0.3", + "conventional-changelog-angular": "^7.0.0", + "conventional-commits-parser": "^5.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=v18" } }, - "node_modules/@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==", + "node_modules/@commitlint/parse/node_modules/conventional-changelog-angular": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "compare-func": "^2.0.0" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@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, - "engines": { - "node": ">=6.9.0" + "node": ">=16" } }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "node_modules/@commitlint/parse/node_modules/conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "is-text-path": "^2.0.0", + "JSONStream": "^1.3.5", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.mjs" }, "engines": { - "node": ">=6.9.0" + "node": ">=16" } }, - "node_modules/@babel/highlight/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/@commitlint/parse/node_modules/is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "text-extensions": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/@babel/highlight/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/@commitlint/parse/node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/highlight/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/@commitlint/parse/node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "engines": { + "node": ">= 10.x" } }, - "node_modules/@babel/highlight/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==", - "dev": true - }, - "node_modules/@babel/highlight/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==", + "node_modules/@commitlint/parse/node_modules/text-extensions": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", + "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/highlight/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==", + "node_modules/@commitlint/read": { + "version": "19.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.4.0.tgz", + "integrity": "sha512-r95jLOEZzKDakXtnQub+zR3xjdnrl2XzerPwm7ch1/cc5JGq04tyaNpa6ty0CRCWdVrk4CZHhqHozb8yZwy2+g==", "dev": true, + "dependencies": { + "@commitlint/top-level": "^19.0.0", + "@commitlint/types": "^19.0.3", + "execa": "^8.0.1", + "git-raw-commits": "^4.0.0", + "minimist": "^1.2.8" + }, "engines": { - "node": ">=4" + "node": ">=v18" } }, - "node_modules/@babel/highlight/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==", + "node_modules/@commitlint/read/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "node_modules/@commitlint/read/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "optional": true, "engines": { - "node": ">=0.1.90" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/cli": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.5.1.tgz", - "integrity": "sha512-pRRgGSzdHQHehxZbGA3qF6wVPyl+EEQgTe/t321rtMLFbuJ7nRj2waS17s/v5oEbyZtiY5S8PGB6XtEIm0I+Sg==", + "node_modules/@commitlint/read/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "dependencies": { - "@commitlint/format": "^17.4.4", - "@commitlint/lint": "^17.4.4", - "@commitlint/load": "^17.5.0", - "@commitlint/read": "^17.5.1", - "@commitlint/types": "^17.4.4", - "execa": "^5.0.0", - "lodash.isfunction": "^3.0.9", - "resolve-from": "5.0.0", - "resolve-global": "1.0.0", - "yargs": "^17.0.0" - }, - "bin": { - "commitlint": "cli.js" - }, "engines": { - "node": ">=v14" + "node": ">=16.17.0" } }, - "node_modules/@commitlint/config-conventional": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.4.4.tgz", - "integrity": "sha512-u6ztvxqzi6NuhrcEDR7a+z0yrh11elY66nRrQIpqsqW6sZmpxYkDLtpRH8jRML+mmxYQ8s4qqF06Q/IQx5aJeQ==", + "node_modules/@commitlint/read/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": { - "conventional-changelog-conventionalcommits": "^5.0.0" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/read/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": ">=v14" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/config-validator": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz", - "integrity": "sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==", + "node_modules/@commitlint/read/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { - "@commitlint/types": "^17.4.4", - "ajv": "^8.11.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=v14" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/config-validator/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/@commitlint/read/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": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/config-validator/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==", - "dev": true - }, - "node_modules/@commitlint/ensure": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.4.4.tgz", - "integrity": "sha512-AHsFCNh8hbhJiuZ2qHv/m59W/GRE9UeOXbkOqxYMNNg9pJ7qELnFcwj5oYpa6vzTSHtPGKf3C2yUFNy1GGHq6g==", + "node_modules/@commitlint/read/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": { - "@commitlint/types": "^17.4.4", - "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1", - "lodash.snakecase": "^4.1.1", - "lodash.startcase": "^4.4.0", - "lodash.upperfirst": "^4.3.1" + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/read/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { - "node": ">=v14" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@commitlint/execute-rule": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz", - "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==", + "node_modules/@commitlint/read/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, "engines": { - "node": ">=v14" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/format": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz", - "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==", + "node_modules/@commitlint/resolve-extends": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.1.0.tgz", + "integrity": "sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==", "dev": true, "dependencies": { - "@commitlint/types": "^17.4.4", - "chalk": "^4.1.0" + "@commitlint/config-validator": "^19.0.3", + "@commitlint/types": "^19.0.3", + "global-directory": "^4.0.1", + "import-meta-resolve": "^4.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=v14" + "node": ">=v18" } }, - "node_modules/@commitlint/is-ignored": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.4.4.tgz", - "integrity": "sha512-Y3eo1SFJ2JQDik4rWkBC4tlRIxlXEFrRWxcyrzb1PUT2k3kZ/XGNuCDfk/u0bU2/yS0tOA/mTjFsV+C4qyACHw==", + "node_modules/@commitlint/rules": { + "version": "19.4.1", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.4.1.tgz", + "integrity": "sha512-AgctfzAONoVxmxOXRyxXIq7xEPrd7lK/60h2egp9bgGUMZK9v0+YqLOA+TH+KqCa63ZoCr8owP2YxoSSu7IgnQ==", "dev": true, "dependencies": { - "@commitlint/types": "^17.4.4", - "semver": "7.3.8" + "@commitlint/ensure": "^19.0.3", + "@commitlint/message": "^19.0.0", + "@commitlint/to-lines": "^19.0.0", + "@commitlint/types": "^19.0.3", + "execa": "^8.0.1" }, "engines": { - "node": ">=v14" + "node": ">=v18" } }, - "node_modules/@commitlint/lint": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.4.4.tgz", - "integrity": "sha512-qgkCRRFjyhbMDWsti/5jRYVJkgYZj4r+ZmweZObnbYqPUl5UKLWMf9a/ZZisOI4JfiPmRktYRZ2JmqlSvg+ccw==", + "node_modules/@commitlint/rules/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^17.4.4", - "@commitlint/parse": "^17.4.4", - "@commitlint/rules": "^17.4.4", - "@commitlint/types": "^17.4.4" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=v14" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@commitlint/load": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz", - "integrity": "sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==", + "node_modules/@commitlint/rules/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "dependencies": { - "@commitlint/config-validator": "^17.4.4", - "@commitlint/execute-rule": "^17.4.0", - "@commitlint/resolve-extends": "^17.4.4", - "@commitlint/types": "^17.4.4", - "@types/node": "*", - "chalk": "^4.1.0", - "cosmiconfig": "^8.0.0", - "cosmiconfig-typescript-loader": "^4.0.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0", - "resolve-from": "^5.0.0", - "ts-node": "^10.8.1", - "typescript": "^4.6.4 || ^5.0.0" - }, "engines": { - "node": ">=v14" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/message": { - "version": "17.4.2", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz", - "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==", + "node_modules/@commitlint/rules/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, "engines": { - "node": ">=v14" + "node": ">=16.17.0" } }, - "node_modules/@commitlint/parse": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.4.4.tgz", - "integrity": "sha512-EKzz4f49d3/OU0Fplog7nwz/lAfXMaDxtriidyGF9PtR+SRbgv4FhsfF310tKxs6EPj8Y+aWWuX3beN5s+yqGg==", + "node_modules/@commitlint/rules/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": { - "@commitlint/types": "^17.4.4", - "conventional-changelog-angular": "^5.0.11", - "conventional-commits-parser": "^3.2.2" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/rules/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": ">=v14" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/read": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz", - "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==", + "node_modules/@commitlint/rules/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { - "@commitlint/top-level": "^17.4.0", - "@commitlint/types": "^17.4.4", - "fs-extra": "^11.0.0", - "git-raw-commits": "^2.0.11", - "minimist": "^1.2.6" + "path-key": "^4.0.0" }, "engines": { - "node": ">=v14" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/resolve-extends": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz", - "integrity": "sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==", + "node_modules/@commitlint/rules/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": { - "@commitlint/config-validator": "^17.4.4", - "@commitlint/types": "^17.4.4", - "import-fresh": "^3.0.0", - "lodash.mergewith": "^4.6.2", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=v14" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/rules": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.4.4.tgz", - "integrity": "sha512-0tgvXnHi/mVcyR8Y8mjTFZIa/FEQXA4uEutXS/imH2v1UNkYDSEMsK/68wiXRpfW1euSgEdwRkvE1z23+yhNrQ==", + "node_modules/@commitlint/rules/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": { - "@commitlint/ensure": "^17.4.4", - "@commitlint/message": "^17.4.2", - "@commitlint/to-lines": "^17.4.0", - "@commitlint/types": "^17.4.4", - "execa": "^5.0.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/rules/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@commitlint/rules/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, "engines": { - "node": ">=v14" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@commitlint/to-lines": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz", - "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.0.0.tgz", + "integrity": "sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==", "dev": true, "engines": { - "node": ">=v14" + "node": ">=v18" } }, "node_modules/@commitlint/top-level": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz", - "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.0.0.tgz", + "integrity": "sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==", "dev": true, "dependencies": { - "find-up": "^5.0.0" + "find-up": "^7.0.0" }, "engines": { - "node": ">=v14" + "node": ">=v18" } }, - "node_modules/@commitlint/types": { - "version": "17.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz", - "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==", + "node_modules/@commitlint/top-level/node_modules/find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", "dev": true, "dependencies": { - "chalk": "^4.1.0" + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=v14" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@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==", + "node_modules/@commitlint/top-level/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "p-locate": "^6.0.0" }, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/@commitlint/top-level/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "yocto-queue": "^1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", - "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", + "node_modules/@commitlint/top-level/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@commitlint/top-level/node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/types": { + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.0.3.tgz", + "integrity": "sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==", + "dev": true, + "dependencies": { + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/types/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "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.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", - "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.1", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -1578,22 +1813,23 @@ } }, "node_modules/@eslint/js": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz", - "integrity": "sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -1614,31 +1850,35 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "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==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true }, "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==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "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==", - "dev": true + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -2105,197 +2345,724 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/is-stream": { + "node_modules/@semantic-release/npm/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, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@semantic-release/npm/node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@semantic-release/npm/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/@semantic-release/npm/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" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@semantic-release/npm/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": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/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": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/parse-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", + "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/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, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/read-pkg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", + "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^5.0.0", + "parse-json": "^7.0.0", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/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, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/type-fest": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.8.0.tgz", + "integrity": "sha512-FVNSzGQz9Th+/9R6Lvv7WIAkstylfHN2/JYxkyhhmKFYh9At2DST8t6L6Lref9eYO8PXFTfG9Sg1Agg0K3vq3Q==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/release-notes-generator": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz", + "integrity": "sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w==", + "dev": true, + "dependencies": { + "conventional-changelog-angular": "^5.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.2.3", + "debug": "^4.0.0", + "get-stream": "^6.0.0", + "import-from": "^4.0.0", + "into-stream": "^6.0.0", + "lodash": "^4.17.4", + "read-pkg-up": "^7.0.0" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0-beta.1" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", + "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.0.tgz", + "integrity": "sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w==", + "dependencies": { + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz", + "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "dependencies": { + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-node": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", + "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", + "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz", + "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==", + "dependencies": { + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "dependencies": { + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.15.tgz", + "integrity": "sha512-iTMedvNt1ApdvkaoE8aSDuwaoc+BhvHqttbA/FO4Ty+y/S5hW6Ci/CTScG7vam4RYJWZxdTElc3MEfHRVH6cgQ==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/service-error-classification": "^3.0.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "dependencies": { + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "dependencies": { + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", + "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", + "dependencies": { + "@smithy/types": "^3.3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz", + "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", + "dependencies": { + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "dependencies": { + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-base64": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/json-parse-even-better-errors": { + "node_modules/@smithy/util-body-length-browser": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "dependencies": { + "tslib": "^2.6.2" } }, - "node_modules/@semantic-release/npm/node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "dev": true, + "node_modules/@smithy/util-body-length-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=16.0.0" } }, - "node_modules/@semantic-release/npm/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, + "node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=12" + "node": ">=16.0.0" } }, - "node_modules/@semantic-release/npm/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" + "node_modules/@smithy/util-config-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "dependencies": { + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.15.tgz", + "integrity": "sha512-FZ4Psa3vjp8kOXcd3HJOiDPBCWtiilLl57r0cnNtq/Ga9RSDrM5ERL6xt+tO43+2af6Pn5Yp92x2n5vPuduNfg==", "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "@smithy/property-provider": "^3.1.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@semantic-release/npm/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, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.15.tgz", + "integrity": "sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A==", "dependencies": { - "path-key": "^4.0.0" + "@smithy/config-resolver": "^3.0.5", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10.0.0" } }, - "node_modules/@semantic-release/npm/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, + "node_modules/@smithy/util-endpoints": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", + "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", "dependencies": { - "mimic-fn": "^4.0.0" + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/parse-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", - "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", - "dev": true, + "node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dependencies": { - "@babel/code-frame": "^7.21.4", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^3.0.0", - "lines-and-columns": "^2.0.3", - "type-fest": "^3.8.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16.0.0" } }, - "node_modules/@semantic-release/npm/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, - "engines": { - "node": ">=12" + "node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/read-pkg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", - "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", - "dev": true, + "node_modules/@smithy/util-retry": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", + "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^5.0.0", - "parse-json": "^7.0.0", - "type-fest": "^3.8.0" + "@smithy/service-error-classification": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16" + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "dependencies": { + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/strip-final-newline": { + "node_modules/@smithy/util-uri-escape": { "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, - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "dependencies": { + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@semantic-release/npm/node_modules/type-fest": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.8.0.tgz", - "integrity": "sha512-FVNSzGQz9Th+/9R6Lvv7WIAkstylfHN2/JYxkyhhmKFYh9At2DST8t6L6Lref9eYO8PXFTfG9Sg1Agg0K3vq3Q==", - "dev": true, - "engines": { - "node": ">=14.16" + "node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@semantic-release/release-notes-generator": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz", - "integrity": "sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w==", - "dev": true, + "node_modules/@smithy/util-waiter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz", + "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==", "dependencies": { - "conventional-changelog-angular": "^5.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.2.3", - "debug": "^4.0.0", - "get-stream": "^6.0.0", - "import-from": "^4.0.0", - "into-stream": "^6.0.0", - "lodash": "^4.17.4", - "read-pkg-up": "^7.0.0" + "@smithy/abort-controller": "^3.1.1", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0-beta.1" + "node": ">=16.0.0" } }, "node_modules/@tootallnate/once": { @@ -2308,28 +3075,32 @@ } }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/chai": { "version": "4.3.4", @@ -2346,24 +3117,25 @@ "@types/node": "*" } }, - "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/conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==", "dev": true, - "peer": true + "dependencies": { + "@types/node": "*" + } }, "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, - "peer": true + "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.192", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.192.tgz", - "integrity": "sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A==", + "version": "4.17.7", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz", + "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==", "dev": true }, "node_modules/@types/minimist": { @@ -2373,16 +3145,20 @@ "dev": true }, "node_modules/@types/mocha": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", - "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz", + "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==", "dev": true }, "node_modules/@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "devOptional": true + "version": "20.16.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.2.tgz", + "integrity": "sha512-91s/n4qUPV/wg8eE9KHYW1kouTfDk2FPGjXbBMfRWP/2vg1rCXNQL1OCabwGs0XSdukuK+MwCDXE30QpSeMUhQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -2396,214 +3172,137 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, - "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true, - "peer": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.57.1.tgz", - "integrity": "sha512-1MeobQkQ9tztuleT3v72XmY0XuKXVXusAhryoLuU5YZ+mXoYKZP9SQ7Flulh1NX4DTjpGTc2b/eMu4u7M7dhnQ==", - "dev": true, - "peer": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.57.1", - "@typescript-eslint/type-utils": "5.57.1", - "@typescript-eslint/utils": "5.57.1", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.57.1.tgz", - "integrity": "sha512-hlA0BLeVSA/wBPKdPGxoVr9Pp6GutGoY380FEhbVi0Ph4WNe8kLvqIRx76RSQt1lynZKfrXKs0/XeEk4zZycuA==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.3.0.tgz", + "integrity": "sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.57.1", - "@typescript-eslint/types": "5.57.1", - "@typescript-eslint/typescript-estree": "5.57.1", - "debug": "^4.3.4" + "@typescript-eslint/types": "8.3.0", + "@typescript-eslint/visitor-keys": "8.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz", - "integrity": "sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw==", + "node_modules/@typescript-eslint/types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.3.0.tgz", + "integrity": "sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.57.1", - "@typescript-eslint/visitor-keys": "5.57.1" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.57.1.tgz", - "integrity": "sha512-/RIPQyx60Pt6ga86hKXesXkJ2WOS4UemFrmmq/7eOyiYjYv/MUSHPlkhU6k9T9W1ytnTJueqASW+wOmW4KrViw==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.3.0.tgz", + "integrity": "sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA==", "dev": true, - "peer": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.57.1", - "@typescript-eslint/utils": "5.57.1", + "@typescript-eslint/types": "8.3.0", + "@typescript-eslint/visitor-keys": "8.3.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "*" - }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, - "node_modules/@typescript-eslint/types": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.57.1.tgz", - "integrity": "sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA==", + "node_modules/@typescript-eslint/typescript-estree/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, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz", - "integrity": "sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.57.1", - "@typescript-eslint/visitor-keys": "5.57.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@typescript-eslint/utils": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.57.1.tgz", - "integrity": "sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.3.0.tgz", + "integrity": "sha512-F77WwqxIi/qGkIGOGXNBLV7nykwfjLsdauRB/DOFPdv6LTF3BHHkBpq81/b5iMPSF055oO2BiivDJV4ChvNtXA==", "dev": true, - "peer": 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.57.1", - "@typescript-eslint/types": "5.57.1", - "@typescript-eslint/typescript-estree": "5.57.1", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.3.0", + "@typescript-eslint/types": "8.3.0", + "@typescript-eslint/typescript-estree": "8.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz", - "integrity": "sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz", + "integrity": "sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.57.1", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "8.3.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -2622,10 +3321,14 @@ } }, "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==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } @@ -2671,6 +3374,15 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-escapes": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", @@ -2745,7 +3457,8 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", @@ -2769,14 +3482,16 @@ } }, "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==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2789,16 +3504,16 @@ "dev": true }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -2817,16 +3532,35 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "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, - "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -2837,15 +3571,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "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, - "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -2855,6 +3588,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -2897,11 +3652,13 @@ "optional": true }, "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==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, - "peer": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -3295,13 +4052,13 @@ } }, "node_modules/aws-xray-sdk-core": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/aws-xray-sdk-core/-/aws-xray-sdk-core-3.5.1.tgz", - "integrity": "sha512-Q3S+K/UkDw/M9NnRZbyXNXsjB3amsv+6XhPdomtfzAdyNkf6q+GOQVuWpaLGHunBz91VzpGBzP9Qg0/elm6Cwg==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/aws-xray-sdk-core/-/aws-xray-sdk-core-3.9.0.tgz", + "integrity": "sha512-YKzOVse7m6PCO/Uf3y3zhkWqPo5uUIU1Iin/hvL+Lpr2gFxCbNR88pkARAW2LyjvkwlcwLvx7TEoNV3SJYa4yg==", "optional": true, "dependencies": { - "@aws-sdk/service-error-classification": "^3.4.1", "@aws-sdk/types": "^3.4.1", + "@smithy/service-error-classification": "^2.0.4", "@types/cls-hooked": "^4.3.3", "atomic-batcher": "^1.0.2", "cls-hooked": "^4.2.2", @@ -3311,19 +4068,28 @@ "node": ">= 14.x" } }, - "node_modules/aws-xray-sdk-core/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==", + "node_modules/aws-xray-sdk-core/node_modules/@smithy/service-error-classification": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", + "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", "optional": true, "dependencies": { - "lru-cache": "^6.0.0" + "@smithy/types": "^2.12.0" }, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/aws-xray-sdk-core/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" + "node": ">=14.0.0" } }, "node_modules/balanced-match": { @@ -3339,12 +4105,15 @@ "dev": true }, "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==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bluebird": { @@ -3362,8 +4131,7 @@ "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "dev": true + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -3393,25 +4161,20 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "peer": true, - "dependencies": { - "semver": "^7.0.0" - } - }, "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==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, - "peer": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3500,17 +4263,17 @@ } }, "node_modules/check-engine": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/check-engine/-/check-engine-1.10.1.tgz", - "integrity": "sha512-KqZ6sV7onqcc81qoK+NsCNjNfik1rRHzmxYJ+tDdCc+6nbpaj0X8SKSzb8lYIcQ+ire5ypMr4YP832/7RH843Q==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/check-engine/-/check-engine-1.12.0.tgz", + "integrity": "sha512-gqP6sPtehQinhuV0WStdYt+Y5SDrGvJokLLH+KghpdpbXGYoXJxjcQ2RnLkroRBo7cOTSDMCwXgr+z7b8p4Uaw==", "dev": true, "dependencies": { "bluebird": "3.7.2", "colors": "1.4.0", - "command-line-usage": "6.1.0", - "jsonfile": "6.0.1", - "semver": "7.3.2", - "yargs": "16.1.0" + "command-line-usage": "6.1.3", + "jsonfile": "6.1.0", + "semver": "7.5.4", + "yargs": "17.7.1" }, "bin": { "check-engine": "bin/check-engine.js" @@ -3519,22 +4282,14 @@ "node": ">=10" } }, - "node_modules/check-engine/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==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, "node_modules/check-engine/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "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, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" }, @@ -3542,24 +4297,6 @@ "node": ">=10" } }, - "node_modules/check-engine/node_modules/yargs": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.0.tgz", - "integrity": "sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g==", - "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.2", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -3570,9 +4307,9 @@ } }, "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "dependencies": { "anymatch": "~3.1.2", @@ -3586,6 +4323,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -3679,14 +4419,14 @@ } }, "node_modules/command-line-usage": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.0.tgz", - "integrity": "sha512-Ew1clU4pkUeo6AFVDFxCbnN7GIZfXl48HIOQeFQnkO3oOqvpI7wdqtLRwv9iOCZ/7A+z4csVZeiDdEcj8g6Wiw==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", "dev": true, "dependencies": { - "array-back": "^4.0.0", + "array-back": "^4.0.2", "chalk": "^2.4.2", - "table-layout": "^1.0.0", + "table-layout": "^1.0.2", "typical": "^5.2.0" }, "engines": { @@ -3814,17 +4554,15 @@ } }, "node_modules/conventional-changelog-conventionalcommits": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz", - "integrity": "sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", "dev": true, "dependencies": { - "compare-func": "^2.0.0", - "lodash": "^4.17.15", - "q": "^1.5.1" + "compare-func": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=16" } }, "node_modules/conventional-changelog-writer": { @@ -3916,27 +4654,12 @@ "url": "https://github.com/sponsors/d-fischer" } }, - "node_modules/cosmiconfig-typescript-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz", - "integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==", - "dev": true, - "engines": { - "node": ">=12", - "npm": ">=6" - }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=7", - "ts-node": ">=10", - "typescript": ">=3" - } - }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.3", @@ -3980,12 +4703,66 @@ } }, "node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/dateformat": { @@ -3998,9 +4775,9 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -4075,13 +4852,30 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "peer": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -4099,9 +4893,9 @@ "dev": true }, "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, "engines": { "node": ">=0.3.1" @@ -4120,15 +4914,15 @@ } }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/dot-prop": { @@ -4167,6 +4961,19 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/env-ci": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.0.0.tgz", @@ -4290,6 +5097,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -4300,77 +5116,119 @@ } }, "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", - "dev": true, - "peer": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, "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==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, - "peer": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "peer": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { @@ -4378,7 +5236,6 @@ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "peer": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -4413,27 +5270,28 @@ } }, "node_modules/eslint": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz", - "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "8.38.0", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.4.0", - "espree": "^9.5.1", + "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", @@ -4441,22 +5299,19 @@ "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -4469,60 +5324,129 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-config-standard": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", - "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", + "node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "dev": true, + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-config-love": { + "version": "63.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-love/-/eslint-config-love-63.0.0.tgz", + "integrity": "sha512-OQ/D/cPsqlzD0FnrORB8E4hCMvbKtTruia08fjhyeIjUrkNxyZdNtad5lxhZry8OM43VXRuESSCeUYTOkbBRgA==", "dev": true, "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "url": "https://github.com/sponsors/mightyiam" }, - { - "type": "consulting", - "url": "https://feross.org/support" - } + "https://wise.com/pay/me/shaharo" ], + "dependencies": { + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^17.0.0", + "eslint-plugin-promise": "^7.0.0", + "typescript-eslint": "^8.0.0" + }, "peerDependencies": { "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0", - "eslint-plugin-promise": "^6.0.0" + "typescript": "*" + } + }, + "node_modules/eslint-config-love/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/eslint-config-standard-with-typescript": { - "version": "34.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-34.0.1.tgz", - "integrity": "sha512-J7WvZeLtd0Vr9F+v4dZbqJCLD16cbIy4U+alJMq4MiXdpipdBM3U5NkXaGUjePc4sb1ZE01U9g6VuTBpHHz1fg==", + "node_modules/eslint-config-love/node_modules/eslint-plugin-n": { + "version": "17.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.2.tgz", + "integrity": "sha512-e+s4eAf5NtJaxPhTNu3qMO0Iz40WANS93w9LQgYcvuljgvDmWi/a3rh+OrNyMHeng6aOWGJO0rCg5lH4zi8yTw==", "dev": true, "dependencies": { - "@typescript-eslint/parser": "^5.43.0", - "eslint-config-standard": "17.0.0" + "@eslint-community/eslint-utils": "^4.4.0", + "enhanced-resolve": "^5.17.0", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "globals": "^15.8.0", + "ignore": "^5.2.4", + "minimatch": "^9.0.5", + "semver": "^7.5.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.43.0", - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0", - "eslint-plugin-promise": "^6.0.0", - "typescript": "*" + "eslint": ">=8.23.0" + } + }, + "node_modules/eslint-config-love/node_modules/eslint-plugin-promise": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-7.1.0.tgz", + "integrity": "sha512-8trNmPxdAy3W620WKDpaS65NlM5yAumod6XeC4LOb+jxlkG4IVcp68c6dXY2ev+uT4U1PtG57YDV6EGAXN0GbQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-config-love/node_modules/globals": { + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-config-love/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "peer": true, "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -4530,17 +5454,15 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "peer": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.2.tgz", + "integrity": "sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==", "dev": true, - "peer": true, "dependencies": { "debug": "^3.2.7" }, @@ -4558,79 +5480,54 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "peer": true, "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "node_modules/eslint-plugin-es-x": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", "dev": true, - "peer": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" }, "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-es/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==", - "dev": true, - "peer": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-plugin-es/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==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" + "eslint": ">=8" } }, "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, - "peer": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -4644,120 +5541,48 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "peer": true, "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "peer": true, "bin": { "semver": "bin/semver.js" } }, - "node_modules/eslint-plugin-n": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", - "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", - "dev": true, - "peer": true, - "dependencies": { - "builtins": "^5.0.1", - "eslint-plugin-es": "^4.1.0", - "eslint-utils": "^3.0.0", - "ignore": "^5.1.1", - "is-core-module": "^2.11.0", - "minimatch": "^3.1.2", - "resolve": "^1.22.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "node_modules/eslint-plugin-simple-import-sort": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz", + "integrity": "sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==", "dev": true, - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": ">=5.0.0" } }, "node_modules/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==", + "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, - "peer": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "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==", - "dev": true, - "peer": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "estraverse": "^5.2.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-utils/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, - "peer": true, - "engines": { - "node": ">=10" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", + "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, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4766,26 +5591,16 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "node_modules/eslint/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": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "esutils": "^2.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "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.0" + "node": ">=6.0.0" } }, "node_modules/eslint/node_modules/glob-parent": { @@ -4801,14 +5616,14 @@ } }, "node_modules/espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", + "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": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4842,15 +5657,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/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.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -4863,7 +5669,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -4872,16 +5678,6 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -4921,9 +5717,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -4948,20 +5744,31 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true + }, "node_modules/fast-xml-parser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", - "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", - "dev": true, + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], "dependencies": { "strnum": "^1.0.5" }, "bin": { "fxparser": "src/cli/cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" } }, "node_modules/fastq": { @@ -5078,12 +5885,13 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { @@ -5091,9 +5899,9 @@ } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/for-each": { @@ -5101,7 +5909,6 @@ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "peer": true, "dependencies": { "is-callable": "^1.1.3" } @@ -5137,9 +5944,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -5151,22 +5958,24 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "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==", "dev": true, - "peer": true, "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" @@ -5180,7 +5989,6 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5204,15 +6012,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, - "peer": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5231,14 +6043,14 @@ } }, "node_modules/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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -5247,6 +6059,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz", + "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/git-log-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", @@ -5281,34 +6105,54 @@ } }, "node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", "dev": true, "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" }, "bin": { - "git-raw-commits": "cli.js" + "git-raw-commits": "cli.mjs" }, "engines": { - "node": ">=10" + "node": ">=16" + } + }, + "node_modules/git-raw-commits/node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/git-raw-commits/node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "engines": { + "node": ">= 10.x" } }, "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -5331,22 +6175,34 @@ "node": ">= 6" } }, - "node_modules/global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dev": true, "dependencies": { - "ini": "^1.3.4" + "ini": "4.1.1" }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-directory/node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -5359,13 +6215,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, - "peer": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -5399,7 +6255,6 @@ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "peer": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -5413,21 +6268,12 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/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==", + "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/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -5458,24 +6304,11 @@ "node": ">=6" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "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==", "dev": true, - "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5490,24 +6323,22 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "peer": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, - "peer": true, "engines": { "node": ">= 0.4" }, @@ -5520,7 +6351,6 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "peer": true, "engines": { "node": ">= 0.4" }, @@ -5529,13 +6359,12 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "peer": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -5544,6 +6373,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -5629,9 +6470,9 @@ } }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "engines": { "node": ">= 4" @@ -5674,6 +6515,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -5715,14 +6566,13 @@ "dev": true }, "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==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, - "peer": true, "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -5746,15 +6596,16 @@ } }, "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==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, - "peer": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5771,7 +6622,6 @@ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "peer": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -5796,7 +6646,6 @@ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "peer": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -5813,7 +6662,6 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "peer": true, "engines": { "node": ">= 0.4" }, @@ -5822,12 +6670,30 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5838,7 +6704,6 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -5880,11 +6745,10 @@ } }, "node_modules/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==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "peer": true, "engines": { "node": ">= 0.4" }, @@ -5906,7 +6770,6 @@ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -5958,7 +6821,6 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "peer": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -5971,13 +6833,15 @@ } }, "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6000,7 +6864,6 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6016,7 +6879,6 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "peer": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -6040,17 +6902,12 @@ } }, "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.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, - "peer": true, "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.14" }, "engines": { "node": ">= 0.4" @@ -6076,7 +6933,6 @@ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "peer": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -6121,14 +6977,13 @@ "node": ">= 0.6.0" } }, - "node_modules/js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" + "bin": { + "jiti": "bin/jiti.js" } }, "node_modules/js-tokens": { @@ -6149,6 +7004,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -6184,7 +7045,6 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "peer": true, "dependencies": { "minimist": "^1.2.0" }, @@ -6193,26 +7053,17 @@ } }, "node_modules/jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { - "universalify": "^1.0.0" + "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, - "node_modules/jsonfile/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -6238,6 +7089,15 @@ "node": "*" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -6338,12 +7198,6 @@ "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", "dev": true }, - "node_modules/lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "dev": true - }, "node_modules/lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", @@ -6439,7 +7293,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "devOptional": true, + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -6451,7 +7305,8 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/map-obj": { "version": "4.3.0", @@ -6643,61 +7498,52 @@ "version": "0.38.3", "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz", "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==", - "dev": true, "dependencies": { "obliterator": "^1.6.1" } }, "node_modules/mocha": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.2.tgz", - "integrity": "sha512-ta3LtJ+63RIBP03VBjMGtSqbe6cWXRejF9SyM9Zyli1CKZJZ+vfCTj3oW24V7wAphMJdpOFLoMI3hjJ1LWbs0w==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.2", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.7", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.25", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.1.5", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", + "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" }, "bin": { "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" + "node": ">= 14.0.0" } }, - "node_modules/mocha/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/mocha/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, - "engines": { - "node": ">=6" + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/mocha/node_modules/cliui": { @@ -6711,39 +7557,36 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { - "ms": "2.1.2" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=6.0" + "node": ">=12" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/debug/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/mocha/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=10" } }, "node_modules/mocha/node_modules/ms": { @@ -6785,15 +7628,6 @@ "node": ">=10" } }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -6809,31 +7643,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/nanoid": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", - "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", - "dev": true, - "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==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true, - "peer": true - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -9887,11 +10702,13 @@ "license": "ISC" }, "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==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, - "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9901,20 +10718,18 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "peer": true, "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==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -9925,16 +10740,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -9946,8 +10792,7 @@ "node_modules/obliterator": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz", - "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==", - "dev": true + "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==" }, "node_modules/once": { "version": "1.4.0", @@ -9974,9 +10819,9 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { "deep-is": "^0.1.3", @@ -9984,7 +10829,7 @@ "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -10263,7 +11108,16 @@ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" } }, "node_modules/prelude-ls": { @@ -10288,9 +11142,9 @@ "dev": true }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" @@ -10565,15 +11419,15 @@ } }, "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==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -10582,19 +11436,6 @@ "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, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/registry-auth-token": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", @@ -10626,12 +11467,12 @@ } }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -10651,16 +11492,13 @@ "node": ">=8" } }, - "node_modules/resolve-global": { + "node_modules/resolve-pkg-maps": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, - "dependencies": { - "global-dirs": "^0.1.1" - }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, "node_modules/retry": { @@ -10686,6 +11524,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { "glob": "^7.1.3" @@ -10720,6 +11559,30 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -10727,16 +11590,18 @@ "dev": true }, "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11111,13 +11976,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" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "devOptional": true, "bin": { "semver": "bin/semver.js" }, @@ -11153,14 +12015,46 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "dependencies": { "randombytes": "^2.1.0" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -11189,15 +12083,18 @@ "optional": 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==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11437,15 +12334,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -11455,30 +12352,31 @@ } }, "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==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "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==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11541,8 +12439,7 @@ "node_modules/strnum": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" }, "node_modules/supports-color": { "version": "7.2.0", @@ -11596,6 +12493,15 @@ "node": ">=8.0.0" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", @@ -11727,11 +12633,24 @@ "node": ">=8" } }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "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==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -11775,16 +12694,16 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "peer": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -11793,30 +12712,9 @@ } }, "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "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 + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, "node_modules/type-check": { "version": "0.4.0", @@ -11851,32 +12749,198 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.3.0.tgz", + "integrity": "sha512-EvWjwWLwwKDIJuBjk2I6UkV8KEQcwZ0VM10nR1rIunRDIP67QJTZAHBXTX0HW/oI1H10YESF8yWie8fRQxjvFA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.3.0", + "@typescript-eslint/parser": "8.3.0", + "@typescript-eslint/utils": "8.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.3.0.tgz", + "integrity": "sha512-FLAIn63G5KH+adZosDYiutqkOkYEx0nvcwNNfJAf+c7Ae/H35qWwTYvPZUKFj5AS+WfHG/WJJfWnDnyNUlp8UA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.3.0", + "@typescript-eslint/type-utils": "8.3.0", + "@typescript-eslint/utils": "8.3.0", + "@typescript-eslint/visitor-keys": "8.3.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.3.0.tgz", + "integrity": "sha512-h53RhVyLu6AtpUzVCYLPhZGL5jzTD9fZL+SYf/+hYOx2bDkyQXztXSc4tbvKYHzfMXExMLiL9CWqJmVz6+78IQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.3.0", + "@typescript-eslint/types": "8.3.0", + "@typescript-eslint/typescript-estree": "8.3.0", + "@typescript-eslint/visitor-keys": "8.3.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.3.0.tgz", + "integrity": "sha512-wrV6qh//nLbfXZQoj32EXKmwHf4b7L+xXLrP3FZ0GOUU72gSvLjeWUl5J5Ue5IwRxIV1TfF73j/eaBapxx99Lg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.3.0", + "@typescript-eslint/utils": "8.3.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/typical": { @@ -11906,7 +12970,6 @@ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "peer": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -11917,6 +12980,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unique-string": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", @@ -11969,10 +13051,13 @@ "dev": true }, "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } @@ -11981,7 +13066,8 @@ "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", @@ -12029,7 +13115,6 @@ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "peer": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -12042,18 +13127,16 @@ } }, "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==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, - "peer": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -12063,9 +13146,9 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -12091,9 +13174,9 @@ } }, "node_modules/workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", "dev": true }, "node_modules/wrap-ansi": { @@ -12141,7 +13224,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "devOptional": true + "dev": true }, "node_modules/yargs": { "version": "17.7.1", @@ -12232,6 +13315,7 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } diff --git a/package.json b/package.json index b91c861a..441224e5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,6 @@ { "name": "dyngoose", "version": "4.11.2", - "type": "commonjs", "description": "Elegant DynamoDB object modeling for Typescript", "keywords": [ "dynamo", @@ -12,18 +11,49 @@ "aws-dynamodb", "typescript" ], - "main": "lib/index.js", - "typings": "lib/index.d.ts", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts", + "sideEffects": false, + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "require": "./dist/cjs/index.js", + "import": "./dist/esm/index.js", + "default": "./dist/esm/index.js" + }, + "./utils": { + "types": "./dist/types/utils/index.d.ts", + "require": "./dist/cjs/utils/index.js", + "import": "./dist/esm/utils/index.js", + "default": "./dist/esm/utils/index.js" + }, + "./query": { + "types": "./dist/types/query/index.d.ts", + "require": "./dist/cjs/query/index.js", + "import": "./dist/esm/query/index.js", + "default": "./dist/esm/query/index.js" + }, + "./internal/*": { + "types": "./dist/types/internal/*.d.ts", + "require": "./dist/cjs/internal/*.js", + "import": "./dist/esm/internal/*.js", + "default": "./dist/esm/internal/*.js" + } + }, "scripts": { - "prebuild": "check-engine && rm -rf lib", - "build": "tsc", + "prebuild": "check-engine && npm run clean", + "build": "npm run compile && node tools/create-esm-package.js", + "compile": "tsc -b ./src/tsconfig.cjs.json ./src/tsconfig.cjs.spec.json ./src/tsconfig.esm.json ./src/tsconfig.types.json ./src/tsconfig.types.spec.json ./spec/tsconfig.json", + "clean": "rm -rf ./build", "watch": "tsc --watch", - "pretest": "npm run build", - "test": "env AWS_REGION=us-east-1 AWS_ACCESS_KEY_ID=abcde AWS_SECRET_ACCESS_KEY=abcde mocha --timeout 20000 --recursive lib", - "test:local": "env DYNAMO_ENDPOINT=http://127.0.0.1:8000 npm test", + "pretest": "npm run compile", + "test": "env DYNAMO_ENDPOINT=http://127.0.0.1:8000 npm run test:ci", + "test:esm": "node spec/module-test-spec.mjs", + "test:ci": "env AWS_REGION=us-east-1 AWS_ACCESS_KEY_ID=abcde AWS_SECRET_ACCESS_KEY=abcde TS_NODE_PROJECT=tsconfig.mocha.json mocha --config spec/.mocharc.cjs \"spec/**/*.spec.ts\"", "prepublishOnly": "npm run build", - "lint": "eslint 'src/**/*.ts'", - "autofix": "eslint --fix 'src/**/*.ts'", + "lint": "eslint src spec", + "autofix": "eslint --fix src spec", "prepare": "husky install" }, "repository": { @@ -31,36 +61,40 @@ "url": "git+https://github.com/benhutchins/dyngoose.git" }, "engines": { - "node": ">=12.4.0" + "node": ">=18.0.0" }, - "author": "Benjamin Hutchins", + "author": "Benjamin Hutchins ", "license": "ISC", "bugs": { "url": "https://github.com/benhutchins/dyngoose/issues" }, "homepage": "https://github.com/benhutchins/dyngoose#readme", "devDependencies": { - "@aws-sdk/client-dynamodb": "^3.309.0", - "@commitlint/cli": "^17.5.1", - "@commitlint/config-conventional": "^17.4.4", + "@aws-sdk/client-dynamodb": "^3.637.0", + "@commitlint/cli": "^19.4.1", + "@commitlint/config-conventional": "^19.4.1", "@semantic-release/changelog": "^6.0.3", "@semantic-release/git": "^10.0.1", "@types/chai": "4.3.4", - "@types/lodash": "^4.14.192", - "@types/mocha": "9.0.0", - "@types/node": "^18.15.11", + "@types/lodash": "^4.14.202", + "@types/mocha": "10.0.7", + "@types/node": "^20.16.2", + "@typescript-eslint/utils": "^8.3.0", "aws-cdk-lib": "^2.73.0", "chai": "4.3.7", - "check-engine": "1.10.1", - "eslint": "^8.38.0", - "eslint-config-standard-with-typescript": "^34.0.1", + "check-engine": "1.12.0", + "eslint": "^8.56.0", + "eslint-config-love": "^63.0.0", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-simple-import-sort": "^12.1.1", "husky": "^8.0.3", - "mocha": "9.1.2", + "mocha": "10.7.3", "semantic-release": "^21.0.1", - "typescript": "^5.0.4" + "ts-node": "^10.9.2", + "typescript": "^5.5.4" }, "dependencies": { - "@aws-sdk/util-dynamodb": "^3.309.0", + "@aws-sdk/util-dynamodb": "^3.637.0", "async-sema": "^3.1.1", "lodash": "^4.17.21" }, @@ -81,9 +115,9 @@ ] }, "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.279.0" + "@aws-sdk/client-dynamodb": "^3.637.0" }, "optionalDependencies": { - "aws-xray-sdk-core": "^3.5.1" + "aws-xray-sdk-core": "^3.9.0" } } diff --git a/spec/.mocharc.cjs b/spec/.mocharc.cjs new file mode 100644 index 00000000..8fac812c --- /dev/null +++ b/spec/.mocharc.cjs @@ -0,0 +1,11 @@ +module.exports = { + require: ['ts-node/register'], + reporter: 'dot', + extensions: ['ts', 'js'], + timeout: 20000, + recursive: true, + 'enable-source-maps': true, + 'expose-gc': true, + // Uncomment this to find all skipped tests. + // forbidPending: true +} \ No newline at end of file diff --git a/src/batch-get.spec.ts b/spec/batch-get.spec.ts similarity index 77% rename from src/batch-get.spec.ts rename to spec/batch-get.spec.ts index 0a88df9f..38ef76be 100644 --- a/src/batch-get.spec.ts +++ b/spec/batch-get.spec.ts @@ -1,38 +1,30 @@ import { expect, should } from 'chai' +import * as Dyngoose from 'dyngoose' import { sortBy } from 'lodash' -import { BatchGet } from './batch-get' -import { PrimaryKey } from './query/primary-key' -import { Table } from './table' - -import { - Attribute as AttributeDecorator, - PrimaryKey as PrimaryKeyDecorator, - Table as TableDecorator, -} from './decorator' describe('BatchGet', () => { - @TableDecorator({ name: 'BatchGetTestCardTable1', backup: false }) - class TestTable1 extends Table { - @PrimaryKeyDecorator('id') - public static readonly primaryKey: PrimaryKey + @Dyngoose.$Table({ name: 'BatchGetTestCardTable1', backup: false }) + class TestTable1 extends Dyngoose.Table { + @Dyngoose.$PrimaryKey('id') + public static readonly primaryKey: Dyngoose.Query.PrimaryKey - @AttributeDecorator.Number() - public id: number + @Dyngoose.Attribute.Number() + public id!: number - @AttributeDecorator.String() - public status: string + @Dyngoose.Attribute.String() + public status!: string } - @TableDecorator({ name: 'BatchGetTestCardTable2', backup: false }) - class TestTable2 extends Table { - @PrimaryKeyDecorator('id') - public static readonly primaryKey: PrimaryKey + @Dyngoose.$Table({ name: 'BatchGetTestCardTable2', backup: false }) + class TestTable2 extends Dyngoose.Table { + @Dyngoose.$PrimaryKey('id') + public static readonly primaryKey: Dyngoose.Query.PrimaryKey - @AttributeDecorator.Number() - public id: number + @Dyngoose.Attribute.Number() + public id!: number - @AttributeDecorator.String() - public status: string + @Dyngoose.Attribute.String() + public status!: string } before(async () => { @@ -62,7 +54,7 @@ describe('BatchGet', () => { }) it('should operate a successful batch operation', async () => { - const batch = new BatchGet() + const batch = new Dyngoose.BatchGet() const item = TestTable1.primaryKey.fromKey(1) batch.get(item) @@ -93,7 +85,7 @@ describe('BatchGet', () => { }) it('should operate a successful atomic batch operation', async () => { - const batch = new BatchGet().atomic() + const batch = new Dyngoose.BatchGet().atomic() const item = TestTable1.primaryKey.fromKey(1) batch.get(item) @@ -124,14 +116,14 @@ describe('BatchGet', () => { }) it('should return an empty array when nothing matches', async () => { - const batch = new BatchGet() + const batch = new Dyngoose.BatchGet() batch.get(TestTable1.primaryKey.fromKey(420)) const results = await batch.retrieve() expect(results.length).eq(0) }) it('should not return records that were missing', async () => { - const batch = new BatchGet() + const batch = new Dyngoose.BatchGet() batch.get(TestTable1.primaryKey.fromKey(1)) batch.get(TestTable1.primaryKey.fromKey(42)) @@ -145,7 +137,7 @@ describe('BatchGet', () => { it('should not return records when aborted', async () => { const abortController = new AbortController() - const batch = new BatchGet() + const batch = new Dyngoose.BatchGet() batch.get(TestTable1.primaryKey.fromKey(1)) batch.get(TestTable1.primaryKey.fromKey(42)) abortController.abort() @@ -163,7 +155,7 @@ describe('BatchGet', () => { }) it('should accept projection expressions', async () => { - const batch = new BatchGet() + const batch = new Dyngoose.BatchGet() const item = TestTable1.primaryKey.fromKey(1) batch.getSpecificAttributes(TestTable1, 'id') batch.get(item) @@ -180,7 +172,7 @@ describe('BatchGet', () => { }) it('should accept projection expressions with reserved keywords', async () => { - const batch = new BatchGet() + const batch = new Dyngoose.BatchGet() const item = TestTable1.primaryKey.fromKey(1) batch.getSpecificAttributes(TestTable1, 'id', 'status') batch.get(item) diff --git a/src/batch-write.spec.ts b/spec/batch-write.spec.ts similarity index 66% rename from src/batch-write.spec.ts rename to spec/batch-write.spec.ts index ab4b6db3..2d27759d 100644 --- a/src/batch-write.spec.ts +++ b/spec/batch-write.spec.ts @@ -1,29 +1,20 @@ import { expect } from 'chai' -import { BatchWrite } from './batch-write' -import { PrimaryKey } from './query/primary-key' -import { Table } from './table' - -import { - Attribute as AttributeDecorator, - PrimaryKey as PrimaryKeyDecorator, - Table as TableDecorator, -} from './decorator' -import { BatchError } from './errors' +import * as Dyngoose from 'dyngoose' describe('BatchWrite', () => { - @TableDecorator({ name: 'BatchWriteTestCardTable', backup: false }) - class Card extends Table { - @PrimaryKeyDecorator('id', 'title') - public static readonly primaryKey: PrimaryKey + @Dyngoose.$Table({ name: 'BatchWriteTestCardTable', backup: false }) + class Card extends Dyngoose.Table { + @Dyngoose.$PrimaryKey('id', 'title') + public static readonly primaryKey: Dyngoose.Query.PrimaryKey - @AttributeDecorator.Number() - public id: number + @Dyngoose.Attribute.Number() + public id!: number - @AttributeDecorator.String() - public title: string + @Dyngoose.Attribute.String() + public title!: string - @AttributeDecorator.Number() - public count: number + @Dyngoose.Attribute.Number() + public count!: number } before(async () => { @@ -44,7 +35,7 @@ describe('BatchWrite', () => { }) it('should operate a successful batch operation', async () => { - const batch = new BatchWrite() + const batch = new Dyngoose.BatchWrite() // add a bunch of records, above the limit for DynamoDB for (let i = 0; i < 250; i++) { @@ -72,21 +63,21 @@ describe('BatchWrite', () => { }) it('should fail with a BatchError', async () => { - const batch = new BatchWrite() + const batch = new Dyngoose.BatchWrite() // this will fail because we're using the same hash and range key value, which must be unique in DynamoDB // however, one of the documents will be written because BatchWrite is not atomic batch.put(Card.new({ id: 1, title: 'same', count: 1 })) batch.put(Card.new({ id: 1, title: 'same', count: 2 })) - let exception: BatchError | undefined + let exception: Dyngoose.Errors.BatchError | undefined try { await batch.commit() - } catch (ex) { + } catch (ex: any) { exception = ex } - expect(exception).to.be.instanceOf(BatchError) + expect(exception).to.be.instanceOf(Dyngoose.Errors.BatchError) }) }) diff --git a/src/decorator/attribute-types/any.spec.ts b/spec/decorator/attribute-types/any.spec.ts similarity index 99% rename from src/decorator/attribute-types/any.spec.ts rename to spec/decorator/attribute-types/any.spec.ts index 8f14692b..3acf971f 100644 --- a/src/decorator/attribute-types/any.spec.ts +++ b/spec/decorator/attribute-types/any.spec.ts @@ -1,4 +1,5 @@ import { expect, should } from 'chai' + import { TestableTable } from '../../setup-tests.spec' describe('AttributeType/Any', () => { diff --git a/src/decorator/attribute-types/date.spec.ts b/spec/decorator/attribute-types/date.spec.ts similarity index 93% rename from src/decorator/attribute-types/date.spec.ts rename to spec/decorator/attribute-types/date.spec.ts index dc2ce24b..6c3363f7 100644 --- a/src/decorator/attribute-types/date.spec.ts +++ b/spec/decorator/attribute-types/date.spec.ts @@ -1,4 +1,5 @@ import { expect } from 'chai' + import { TestableTable } from '../../setup-tests.spec' describe('AttributeType/Date', () => { @@ -122,14 +123,14 @@ describe('AttributeType/Date', () => { (record as any).dateOnly = '2021-02-24' expect(record.dateOnly).to.be.a('date') - expect(record.dateOnly.toISOString()).to.eq('2021-02-24T00:00:00.000Z') + expect(record.dateOnly?.toISOString()).to.eq('2021-02-24T00:00:00.000Z') }) it('should allow strings to be passed with date and time', async () => { (record as any).fullDate = '2018-01-25T23:55:39.000Z' expect(record.fullDate).to.be.a('date') - expect(record.fullDate.toISOString()).to.eq('2018-01-25T23:55:39.000Z') + expect(record.fullDate?.toISOString()).to.eq('2018-01-25T23:55:39.000Z') }) }) @@ -151,10 +152,10 @@ describe('AttributeType/Date', () => { }) expect(record.dateOnly).to.be.a('date') - expect(record.dateOnly.toISOString()).to.eq('2021-02-24T00:00:00.000Z') + expect(record.dateOnly?.toISOString()).to.eq('2021-02-24T00:00:00.000Z') expect(record.fullDate).to.be.a('date') - expect(record.fullDate.toISOString()).to.eq('2018-01-25T23:55:39.000Z') + expect(record.fullDate?.toISOString()).to.eq('2018-01-25T23:55:39.000Z') }) }) }) diff --git a/src/decorator/attribute-types/dynamic.spec.ts b/spec/decorator/attribute-types/dynamic.spec.ts similarity index 99% rename from src/decorator/attribute-types/dynamic.spec.ts rename to spec/decorator/attribute-types/dynamic.spec.ts index 384d593c..b5b2113f 100644 --- a/src/decorator/attribute-types/dynamic.spec.ts +++ b/spec/decorator/attribute-types/dynamic.spec.ts @@ -1,4 +1,5 @@ import { expect } from 'chai' + import { TestableTable } from '../../setup-tests.spec' describe('AttributeType/Dynamic', () => { diff --git a/src/decorator/attribute-types/list.spec.ts b/spec/decorator/attribute-types/list.spec.ts similarity index 92% rename from src/decorator/attribute-types/list.spec.ts rename to spec/decorator/attribute-types/list.spec.ts index 4cea53f0..9fc8ecb8 100644 --- a/src/decorator/attribute-types/list.spec.ts +++ b/spec/decorator/attribute-types/list.spec.ts @@ -1,5 +1,5 @@ import { expect } from 'chai' -import * as Dyngoose from '../..' +import * as Dyngoose from 'dyngoose' @Dyngoose.$Table({ name: `ListTest-${Math.random()}`, @@ -13,10 +13,10 @@ export class ListTestTable extends Dyngoose.Table { public static readonly documentClient: Dyngoose.DocumentClient @Dyngoose.Attribute.Number() - public id: number + public id!: number @Dyngoose.Attribute.List() - public list: Array<{ a: number, b: boolean }> + public list!: Array<{ a: number, b: boolean }> } describe('AttributeType/List', () => { diff --git a/src/decorator/attribute-types/map.spec.ts b/spec/decorator/attribute-types/map.spec.ts similarity index 90% rename from src/decorator/attribute-types/map.spec.ts rename to spec/decorator/attribute-types/map.spec.ts index b0ffb55a..79ec71a4 100644 --- a/src/decorator/attribute-types/map.spec.ts +++ b/spec/decorator/attribute-types/map.spec.ts @@ -1,5 +1,5 @@ import { expect, should } from 'chai' -import * as Dyngoose from '../..' +import * as Dyngoose from 'dyngoose' interface ITestMap { first: string @@ -35,7 +35,7 @@ export class MapTestTable extends Dyngoose.Table { public static readonly documentClient: Dyngoose.DocumentClient @Dyngoose.Attribute.Number() - id: number + public id!: number @Dyngoose.Attribute.Map({ attributes: { @@ -47,7 +47,7 @@ export class MapTestTable extends Dyngoose.Table { gender: Dyngoose.Attribute.String({ name: 'Gender' }), }, }) - public person: ITestMap + public person?: ITestMap @Dyngoose.Attribute.Map({ attributes: { @@ -67,13 +67,13 @@ export class MapTestTable extends Dyngoose.Table { dob: Dyngoose.Attribute.Date({ dateOnly: true }), }, }) - public contact: ITestContactMap + public contact?: ITestContactMap @Dyngoose.Attribute.Map({ attributes: {}, arbitraryAttributes: 'marshall', }) - public dynamicMap: { + public dynamicMap?: { dynamicAttribute: string emptyAttribute?: string } @@ -113,7 +113,7 @@ describe('AttributeType/Map', () => { }, }) - expect(loaded?.person.first).to.eq('John') + expect(loaded?.person?.first).to.eq('John') expect(loaded?.getAttributeDynamoValue('person')).to.deep.eq({ M: { @@ -154,12 +154,12 @@ describe('AttributeType/Map', () => { } as any).exec() expect(result.count).to.eq(1) - expect(result[0].person.first).to.eq('Sally') - expect(result.records[0].person.first).to.eq('Sally') + expect(result[0].person?.first).to.eq('Sally') + expect(result.records[0].person?.first).to.eq('Sally') // ensure you can look through the result as an array for (const doc of result) { - expect(doc.person.first).to.eq('Sally') + expect(doc.person?.first).to.eq('Sally') } const searchOutput = await MapTestTable.search() @@ -167,7 +167,7 @@ describe('AttributeType/Map', () => { .exec() expect(searchOutput.count).to.eq(1) - expect(searchOutput[0].person.first).to.eq('Sally') + expect(searchOutput[0].person?.first).to.eq('Sally') }) it('should allow maps within maps', async () => { @@ -218,8 +218,8 @@ describe('AttributeType/Map', () => { }, }) - expect(loaded.contact.name.first).to.eq('homer') - expect(loaded.contact.name.last).to.eq('SIMPSON') + expect(loaded.contact?.name.first).to.eq('homer') + expect(loaded.contact?.name.last).to.eq('SIMPSON') expect(loaded.toJSON()).to.deep.eq({ id: 3, contact: { @@ -257,7 +257,7 @@ describe('AttributeType/Map', () => { expect(result.count).to.eq(1) expect(result.length).to.eq(1) - expect(result[0].contact.name.first).to.eq('marge') + expect(result[0].contact?.name.first).to.eq('marge') const searchOutput = await MapTestTable.search() .filter('contact', 'name', 'first').eq('marge') @@ -265,7 +265,7 @@ describe('AttributeType/Map', () => { expect(searchOutput.count).to.eq(1) expect(searchOutput.length).to.eq(1) - expect(searchOutput[0].contact.name.first).to.eq('marge') + expect(searchOutput[0].contact?.name.first).to.eq('marge') }) it('should support use of fromJSON to support REST APIs and DB Seeding', async () => { @@ -285,9 +285,9 @@ describe('AttributeType/Map', () => { }, }) - expect(record.contact.address?.line1).to.eq('742 Evergreen Terrace') - expect(record.contact.dob).to.be.instanceOf(Date) - expect(record.contact.dob?.toISOString()).to.eq('1956-05-12T00:00:00.000Z') + expect(record.contact?.address?.line1).to.eq('742 Evergreen Terrace') + expect(record.contact?.dob).to.be.instanceOf(Date) + expect(record.contact?.dob?.toISOString()).to.eq('1956-05-12T00:00:00.000Z') }) it('maps should be able to specify attribute names independent from property names', async () => { diff --git a/src/decorator/attribute-types/number-set.spec.ts b/spec/decorator/attribute-types/number-set.spec.ts similarity index 94% rename from src/decorator/attribute-types/number-set.spec.ts rename to spec/decorator/attribute-types/number-set.spec.ts index fb195687..7801b54e 100644 --- a/src/decorator/attribute-types/number-set.spec.ts +++ b/spec/decorator/attribute-types/number-set.spec.ts @@ -1,4 +1,5 @@ import { expect } from 'chai' + import { TestableTable } from '../../setup-tests.spec' describe('AttributeType/NumberSet', () => { @@ -29,7 +30,7 @@ describe('AttributeType/NumberSet', () => { record.testNumberSet = new Set([int]) expect(Array.from(record.testNumberSet)).to.deep.eq([Number(int)], 'read from record') expect(Array.from(record.get('testNumberSet')!)).deep.eq([Number(int)], 'use .get') - expect(Array.from(record.getAttribute('testNumberSet')!)).deep.eq([Number(int)], 'use .getAttribute') + expect(Array.from(record.getAttribute('testNumberSet'))).deep.eq([Number(int)], 'use .getAttribute') expect(record.getAttributeDynamoValue('testNumberSet')).deep.eq({ NS: [int.toString()] }, 'use .getAttributeDynamoValue') }) diff --git a/src/decorator/attribute-types/number.spec.ts b/spec/decorator/attribute-types/number.spec.ts similarity index 99% rename from src/decorator/attribute-types/number.spec.ts rename to spec/decorator/attribute-types/number.spec.ts index 118cd7a0..3a7cdf61 100644 --- a/src/decorator/attribute-types/number.spec.ts +++ b/spec/decorator/attribute-types/number.spec.ts @@ -1,4 +1,5 @@ import { expect } from 'chai' + import { TestableTable } from '../../setup-tests.spec' describe('AttributeType/Number', () => { diff --git a/src/decorator/attribute-types/string-set.spec.ts b/spec/decorator/attribute-types/string-set.spec.ts similarity index 93% rename from src/decorator/attribute-types/string-set.spec.ts rename to spec/decorator/attribute-types/string-set.spec.ts index 142f7c29..70be2eaf 100644 --- a/src/decorator/attribute-types/string-set.spec.ts +++ b/spec/decorator/attribute-types/string-set.spec.ts @@ -1,7 +1,8 @@ import { expect } from 'chai' -import { TestableTable } from '../../setup-tests.spec' import { isArray } from 'lodash' +import { TestableTable } from '../../setup-tests.spec' + describe('AttributeType/StringSet', () => { let record: TestableTable @@ -25,7 +26,7 @@ describe('AttributeType/StringSet', () => { it('should allow values to be set as an Array using Table.set', () => { expect(record.testStringSet).eq(null) record.set('testStringSet', ['some value']) - expect(Array.from(record.testStringSet)).deep.eq(['some value']) + expect(Array.from(record.testStringSet!)).deep.eq(['some value']) }) }) @@ -71,7 +72,7 @@ describe('AttributeType/StringSet', () => { await record.save() const reloaded = await TestableTable.primaryKey.get({ id: 10, title: 'add to set' }) - expect(Array.from(reloaded!.testStringSet)).to.deep.eq(['some new value', 'some value']) + expect(Array.from(reloaded!.testStringSet!)).to.deep.eq(['some new value', 'some value']) }) }) }) diff --git a/src/decorator/attribute-types/string.spec.ts b/spec/decorator/attribute-types/string.spec.ts similarity index 99% rename from src/decorator/attribute-types/string.spec.ts rename to spec/decorator/attribute-types/string.spec.ts index 5539f61d..8bc12298 100644 --- a/src/decorator/attribute-types/string.spec.ts +++ b/spec/decorator/attribute-types/string.spec.ts @@ -1,4 +1,5 @@ import { expect } from 'chai' + import { TestableTable } from '../../setup-tests.spec' describe('AttributeType/String', () => { diff --git a/src/decorator/attribute-types/utils.spec.ts b/spec/decorator/attribute-types/utils.spec.ts similarity index 90% rename from src/decorator/attribute-types/utils.spec.ts rename to spec/decorator/attribute-types/utils.spec.ts index a48c4430..99ad5ccc 100644 --- a/src/decorator/attribute-types/utils.spec.ts +++ b/spec/decorator/attribute-types/utils.spec.ts @@ -1,5 +1,5 @@ import { expect } from 'chai' -import { stringToNumber } from './utils' +import { stringToNumber } from 'dyngoose/utils' describe('AttributeType/Utils', () => { describe('stringToNumber', () => { diff --git a/src/decorator/table.spec.ts b/spec/decorator/table.spec.ts similarity index 89% rename from src/decorator/table.spec.ts rename to spec/decorator/table.spec.ts index 6a160bb7..740fa71c 100644 --- a/src/decorator/table.spec.ts +++ b/spec/decorator/table.spec.ts @@ -1,5 +1,5 @@ import { expect } from 'chai' -import * as Dyngoose from '..' +import * as Dyngoose from 'dyngoose' @Dyngoose.$Table({ name: 'prod-Card1', backup: false }) class Card extends Dyngoose.Table { @@ -10,16 +10,16 @@ class Card extends Dyngoose.Table { public static readonly documentClient: Dyngoose.DocumentClient @Dyngoose.Attribute.Number() - public id: number + public id!: number @Dyngoose.Attribute.String() - public title: string + public title!: string @Dyngoose.Attribute.String({ name: 'complicated_field' }) - public complicatedField: string + public complicatedField!: string @Dyngoose.Attribute.String() - public testString: string + public testString!: string } describe('Table Decorator', () => { diff --git a/src/errors.spec.ts b/spec/errors.spec.ts similarity index 89% rename from src/errors.spec.ts rename to spec/errors.spec.ts index 0c270b63..60dc904e 100644 --- a/src/errors.spec.ts +++ b/spec/errors.spec.ts @@ -1,5 +1,5 @@ import { expect } from 'chai' -import * as Dyngoose from '.' +import * as Dyngoose from 'dyngoose' @Dyngoose.$Table({ name: `missing-table-${Math.random()}`, @@ -10,10 +10,10 @@ export class MissingTable extends Dyngoose.Table { public static readonly primaryKey: Dyngoose.Query.PrimaryKey @Dyngoose.Attribute.Number({ default: 1 }) - public id: number + public id!: number @Dyngoose.Attribute.String() - public title: string + public title!: string } describe('DyngooseError', () => { @@ -27,7 +27,7 @@ describe('DyngooseError', () => { try { await record.save() - } catch (ex) { + } catch (ex: any) { error = ex } diff --git a/spec/module-test-spec.mjs b/spec/module-test-spec.mjs new file mode 100644 index 00000000..3353fc26 --- /dev/null +++ b/spec/module-test-spec.mjs @@ -0,0 +1,11 @@ +/** + * Test file to ensure dyngoose can be loaded from esm + * + * If this fails node will error when running this with an error like + * node:internal/process/esm_loader:74 internalBinding('errors').triggerUncaughtException( + */ +import { Dyngoose } from 'dyngoose' +import * as d from 'dyngoose/decorator' +import * as e from 'dyngoose/errors' +import * as q from 'dyngoose/query' +import * as u from 'dyngoose/utils' diff --git a/src/query/expression.spec.ts b/spec/query/expression.spec.ts similarity index 97% rename from src/query/expression.spec.ts rename to spec/query/expression.spec.ts index f40ea79e..345d1924 100644 --- a/src/query/expression.spec.ts +++ b/spec/query/expression.spec.ts @@ -1,6 +1,6 @@ import { expect } from 'chai' -import * as Dyngoose from '..' -import { buildQueryExpression } from './expression' +import * as Dyngoose from 'dyngoose' +import { buildQueryExpression } from 'dyngoose/query' describe('query/expression', () => { interface ISomeMap { @@ -20,22 +20,22 @@ describe('query/expression', () => { public static readonly someIndex: Dyngoose.Query.GlobalSecondaryIndex @Dyngoose.Attribute.String() - public id: string + public id!: string @Dyngoose.Attribute.String() - public customer: string + public customer?: string @Dyngoose.Attribute.String() - public someString: string + public someString?: string @Dyngoose.Attribute.Number() - public someNumber: number + public someNumber?: number @Dyngoose.Attribute.Boolean() - public someBool: boolean + public someBool?: boolean @Dyngoose.Attribute.StringSet() - public someStrings: Set + public someStrings?: Set @Dyngoose.Attribute.Map({ name: 'someTestMap', @@ -44,7 +44,7 @@ describe('query/expression', () => { second: Dyngoose.Attribute.String(), }, }) - public someMap: ISomeMap + public someMap?: ISomeMap @Dyngoose.Attribute.Map({ attributes: { @@ -56,12 +56,12 @@ describe('query/expression', () => { }), }, }) - public someDeepMap: { + public someDeepMap?: { map: ISomeMap } @Dyngoose.Attribute.String() - someNonExistAttr: string + public someNonExistAttr?: string } const schema = DummyTable.schema diff --git a/src/query/global-secondary-index.spec.ts b/spec/query/global-secondary-index.spec.ts similarity index 88% rename from src/query/global-secondary-index.spec.ts rename to spec/query/global-secondary-index.spec.ts index 71d7244a..81cb62b1 100644 --- a/src/query/global-secondary-index.spec.ts +++ b/spec/query/global-secondary-index.spec.ts @@ -1,38 +1,36 @@ import { expect, should } from 'chai' -import * as Decorator from '../decorator' -import { QueryError } from '../errors' -import { Table } from '../table' -import * as Query from './index' +import * as Dyngoose from 'dyngoose' +import { QueryError } from 'dyngoose/errors' -@Decorator.Table({ name: 'QueryGlobalSecondaryIndexCardTable', backup: false }) -class Card extends Table { - @Decorator.PrimaryKey('id', 'title') - public static readonly primaryKey: Query.PrimaryKey +@Dyngoose.$Table({ name: 'QueryGlobalSecondaryIndexCardTable', backup: false }) +class Card extends Dyngoose.Table { + @Dyngoose.$PrimaryKey('id', 'title') + public static readonly primaryKey: Dyngoose.Query.PrimaryKey - @Decorator.GlobalSecondaryIndex({ primaryKey: 'title' }) - public static readonly hashTitleIndex: Query.GlobalSecondaryIndex + @Dyngoose.$GlobalSecondaryIndex({ primaryKey: 'title' }) + public static readonly hashTitleIndex: Dyngoose.Query.GlobalSecondaryIndex - @Decorator.GlobalSecondaryIndex({ hashKey: 'title', rangeKey: 'id' }) - public static readonly fullTitleIndex: Query.GlobalSecondaryIndex + @Dyngoose.$GlobalSecondaryIndex({ hashKey: 'title', rangeKey: 'id' }) + public static readonly fullTitleIndex: Dyngoose.Query.GlobalSecondaryIndex - @Decorator.GlobalSecondaryIndex({ hashKey: 'id', rangeKey: 'title' }) - public static readonly filterableTitleIndex: Query.GlobalSecondaryIndex + @Dyngoose.$GlobalSecondaryIndex({ hashKey: 'id', rangeKey: 'title' }) + public static readonly filterableTitleIndex: Dyngoose.Query.GlobalSecondaryIndex - @Decorator.GlobalSecondaryIndex({ + @Dyngoose.$GlobalSecondaryIndex({ hashKey: 'id', projection: 'INCLUDE', nonKeyAttributes: ['title'], }) - public static readonly includeTestIndex: Query.GlobalSecondaryIndex + public static readonly includeTestIndex: Dyngoose.Query.GlobalSecondaryIndex - @Decorator.Attribute.Number() - public id: number + @Dyngoose.Attribute.Number() + public id?: number - @Decorator.Attribute.String() - public title: string + @Dyngoose.Attribute.String() + public title?: string - @Decorator.Attribute.Number() - public count: number + @Dyngoose.Attribute.Number() + public count?: number customMethod(): number { return 1 diff --git a/src/query/local-secondary-index.spec.ts b/spec/query/local-secondary-index.spec.ts similarity index 68% rename from src/query/local-secondary-index.spec.ts rename to spec/query/local-secondary-index.spec.ts index baea9c4c..b4eae6d1 100644 --- a/src/query/local-secondary-index.spec.ts +++ b/spec/query/local-secondary-index.spec.ts @@ -1,28 +1,25 @@ import { expect, should } from 'chai' -import * as Decorator from '../decorator' -import { DocumentClient } from '../document-client' -import { Table } from '../table' -import * as Query from './index' +import * as Dyngoose from 'dyngoose' -@Decorator.Table({ name: 'QueryLocalSecondaryIndexCardTable', backup: false }) -class Card extends Table { - @Decorator.PrimaryKey('id', 'title') - public static readonly primaryKey: Query.PrimaryKey +@Dyngoose.$Table({ name: 'QueryLocalSecondaryIndexCardTable', backup: false }) +class Card extends Dyngoose.Table { + @Dyngoose.$PrimaryKey('id', 'title') + public static readonly primaryKey: Dyngoose.Query.PrimaryKey - @Decorator.LocalSecondaryIndex('count') - public static readonly countIndex: Query.LocalSecondaryIndex + @Dyngoose.$LocalSecondaryIndex('count') + public static readonly countIndex: Dyngoose.Query.LocalSecondaryIndex - @Decorator.DocumentClient() - public static documentClient: DocumentClient + @Dyngoose.$DocumentClient() + public static documentClient: Dyngoose.DocumentClient - @Decorator.Attribute.Number() - public id: number + @Dyngoose.Attribute.Number() + public id!: number - @Decorator.Attribute.String() - public title: string + @Dyngoose.Attribute.String() + public title!: string - @Decorator.Attribute.Number() - public count: number + @Dyngoose.Attribute.Number() + public count!: number } describe('Query/LocalSecondaryIndex', () => { diff --git a/src/query/output.spec.ts b/spec/query/output.spec.ts similarity index 96% rename from src/query/output.spec.ts rename to spec/query/output.spec.ts index bfe9ee82..38e2c88a 100644 --- a/src/query/output.spec.ts +++ b/spec/query/output.spec.ts @@ -1,7 +1,8 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' import { expect } from 'chai' +import { QueryOutput } from 'dyngoose/query' + import { TestableTable } from '../setup-tests.spec' -import { QueryOutput } from './output' type ItemList = Array> diff --git a/src/query/primary-key.spec.ts b/spec/query/primary-key.spec.ts similarity index 85% rename from src/query/primary-key.spec.ts rename to spec/query/primary-key.spec.ts index 762af778..b3c462c3 100644 --- a/src/query/primary-key.spec.ts +++ b/spec/query/primary-key.spec.ts @@ -1,42 +1,35 @@ import { expect, should } from 'chai' -import { Table } from '../table' -import { PrimaryKey } from './primary-key' - -import { - Attribute as AttributeDecorator, - PrimaryKey as PrimaryKeyDecorator, - Table as TableDecorator, -} from '../decorator' +import * as Dyngoose from 'dyngoose' describe('Query/PrimaryKey', () => { - @TableDecorator({ name: 'QueryPrimaryKeyCardTable', backup: false }) - class Card extends Table { - @PrimaryKeyDecorator('id', 'title') - public static readonly primaryKey: PrimaryKey + @Dyngoose.$Table({ name: 'QueryPrimaryKeyCardTable', backup: false }) + class Card extends Dyngoose.Table { + @Dyngoose.$PrimaryKey('id', 'title') + public static readonly primaryKey: Dyngoose.Query.PrimaryKey - @AttributeDecorator.Number() - public id: number + @Dyngoose.Attribute.Number() + public id?: number - @AttributeDecorator.String() - public title: string + @Dyngoose.Attribute.String() + public title?: string - @AttributeDecorator.Number() - public count: number + @Dyngoose.Attribute.Number() + public count?: number } - @TableDecorator({ name: 'QueryPrimaryKeyTableWithDateRange', backup: false }) - class TableWithDateRange extends Table { - @PrimaryKeyDecorator('id', 'date') - public static readonly primaryKey: PrimaryKey + @Dyngoose.$Table({ name: 'QueryPrimaryKeyTableWithDateRange', backup: false }) + class TableWithDateRange extends Dyngoose.Table { + @Dyngoose.$PrimaryKey('id', 'date') + public static readonly primaryKey: Dyngoose.Query.PrimaryKey - @AttributeDecorator.Number() - public id: number + @Dyngoose.Attribute.Number() + public id?: number - @AttributeDecorator.Date() - public date: Date + @Dyngoose.Attribute.Date() + public date?: Date } - let primaryKey: PrimaryKey + let primaryKey: Dyngoose.Query.PrimaryKey before(async () => { await TableWithDateRange.createTable() @@ -133,7 +126,7 @@ describe('Query/PrimaryKey', () => { expect(item).to.be.instanceof(TableWithDateRange) if (item != null) { expect(item.id).to.eq(1) - expect(item.date.toISOString()).to.eq(now.toISOString()) + expect(item.date?.toISOString()).to.eq(now.toISOString()) } }) }) diff --git a/src/query/projection-expression.spec.ts b/spec/query/projection-expression.spec.ts similarity index 87% rename from src/query/projection-expression.spec.ts rename to spec/query/projection-expression.spec.ts index 3072e999..e3ccc5f3 100644 --- a/src/query/projection-expression.spec.ts +++ b/spec/query/projection-expression.spec.ts @@ -1,6 +1,7 @@ import { expect } from 'chai' +import { buildProjectionExpression } from 'dyngoose/query' + import { TestableTable } from '../setup-tests.spec' -import { buildProjectionExpression } from './projection-expression' describe('Query/ProjectionExpression', () => { describe('buildProjectionExpression', () => { diff --git a/src/query/search.spec.ts b/spec/query/search.spec.ts similarity index 99% rename from src/query/search.spec.ts rename to spec/query/search.spec.ts index bf0f2377..9067072f 100644 --- a/src/query/search.spec.ts +++ b/spec/query/search.spec.ts @@ -1,6 +1,7 @@ import { expect, should } from 'chai' +import { MagicSearch } from 'dyngoose/query' + import { TestableTable } from '../setup-tests.spec' -import { MagicSearch } from './search' describe('Query/Search', () => { before(async () => { diff --git a/src/setup-tests.spec.ts b/spec/setup-tests.spec.ts similarity index 72% rename from src/setup-tests.spec.ts rename to spec/setup-tests.spec.ts index 0fbf503a..2edd616a 100644 --- a/src/setup-tests.spec.ts +++ b/spec/setup-tests.spec.ts @@ -1,4 +1,4 @@ -import { Dyngoose } from '.' +import * as Dyngoose from 'dyngoose' @Dyngoose.$Table({ name: `testable-${Math.random()}`, @@ -18,70 +18,70 @@ export class TestableTable extends Dyngoose.Table { public generic: any @Dyngoose.Attribute.Number({ default: 1 }) - public id: number + public id!: number @Dyngoose.Attribute() - public dynamic: number | string + public dynamic?: number | string @Dyngoose.Attribute.String() - public title: string + public title?: string @Dyngoose.Attribute.Date({ nowOnCreate: true }) - public createdAt: Date + public createdAt!: Date @Dyngoose.Attribute.Date({ nowOnUpdate: true }) - public updatedAt: Date + public updatedAt!: Date @Dyngoose.Attribute.Date({ timeToLive: true }) - public expiresAt: Date + public expiresAt?: Date @Dyngoose.Attribute.Date({ unixTimestamp: true }) - public unixTimestamp: Date + public unixTimestamp?: Date @Dyngoose.Attribute.Date({ millisecondTimestamp: true }) - public msTimestamp: Date + public msTimestamp?: Date @Dyngoose.Attribute.Date({ dateOnly: true }) - public dateOnly: Date + public dateOnly?: Date @Dyngoose.Attribute.Date() - public fullDate: Date + public fullDate?: Date @Dyngoose.Attribute('String', { default: 'SomeDefault' }) - public defaultedString: string + public defaultedString!: string @Dyngoose.Attribute.String() - public testString: string + public testString?: string @Dyngoose.Attribute.StringSet() - public testStringSet: Set + public testStringSet?: Set @Dyngoose.Attribute.StringSet({ array: true }) - public testStringSetArray: string[] + public testStringSetArray?: string[] @Dyngoose.Attribute.String({ lowercase: true }) - public lowercaseString: string + public lowercaseString?: string @Dyngoose.Attribute.String({ uppercase: true }) - public uppercaseString: string + public uppercaseString?: string @Dyngoose.Attribute.String({ trim: true }) - public trimmedString: string + public trimmedString?: string @Dyngoose.Attribute.Number() - public testNumber: number + public testNumber?: number @Dyngoose.Attribute.NumberSet() - public testNumberSet: Set | null + public testNumberSet?: Set | null @Dyngoose.Attribute.NumberSet({ default: () => new Set([42, 420]) }) - public testNumberSetWithDefaults: Set + public testNumberSetWithDefaults?: Set @Dyngoose.Attribute.Number() - public testBigInt: bigint + public testBigInt?: bigint @Dyngoose.Attribute.String({ name: 'testAttributeNameNotMatchingPropertyName' }) - public testAttributeNaming: string + public testAttributeNaming?: string @Dyngoose.Attribute.Map({ name: 'someMap', diff --git a/src/table.spec.ts b/spec/table.spec.ts similarity index 97% rename from src/table.spec.ts rename to spec/table.spec.ts index 7addaa4d..bb4f556a 100644 --- a/src/table.spec.ts +++ b/spec/table.spec.ts @@ -1,5 +1,6 @@ import { expect } from 'chai' -import * as Dyngoose from '.' +import * as Dyngoose from 'dyngoose' + import { TestableTable } from './setup-tests.spec' describe('Table', () => { @@ -137,7 +138,7 @@ describe('Table', () => { try { record.generic = 'something blue' await record.save({ conditions: { generic: 'fail' } }) - } catch (ex) { + } catch (ex: any) { error = ex } @@ -200,7 +201,7 @@ describe('Table', () => { try { await record.delete({ conditions: { id: 24 } }) - } catch (ex) { + } catch (ex: any) { error = ex } @@ -231,14 +232,14 @@ describe('Table', () => { const record = TestableTable.new() expect(record.id).to.eq(1) expect(record.defaultedString).to.eq('SomeDefault') - expect(Array.from(record.testNumberSetWithDefaults)).to.deep.eq([42, 420]) + expect(Array.from(record.testNumberSetWithDefaults!)).to.deep.eq([42, 420]) }) it('should apply default values even when undefined is given', () => { const record = TestableTable.new({ defaultedString: undefined }) expect(record.id).to.eq(1) expect(record.defaultedString).to.eq('SomeDefault') - expect(Array.from(record.testNumberSetWithDefaults)).to.deep.eq([42, 420]) + expect(Array.from(record.testNumberSetWithDefaults!)).to.deep.eq([42, 420]) }) it('should not apply defaults when the record is loaded from DynamoDB', () => { diff --git a/src/transaction.spec.ts b/spec/transaction.spec.ts similarity index 71% rename from src/transaction.spec.ts rename to spec/transaction.spec.ts index 4d8c357c..4b5fa83b 100644 --- a/src/transaction.spec.ts +++ b/spec/transaction.spec.ts @@ -1,30 +1,22 @@ +import type { TransactionCanceledException } from '@aws-sdk/client-dynamodb' import { expect, should } from 'chai' +import * as Dyngoose from 'dyngoose' import { sortBy } from 'lodash' -import { PrimaryKey } from './query/primary-key' -import { Table } from './table' -import { Transaction } from './transaction' - -import { - Attribute as AttributeDecorator, - PrimaryKey as PrimaryKeyDecorator, - Table as TableDecorator, -} from './decorator' -import { type TransactionCanceledException } from '@aws-sdk/client-dynamodb' describe('Transaction', () => { - @TableDecorator({ name: 'TransactionTestCardTable', backup: false }) - class Card extends Table { - @PrimaryKeyDecorator('id', 'title') - public static readonly primaryKey: PrimaryKey + @Dyngoose.$Table({ name: 'TransactionTestCardTable', backup: false }) + class Card extends Dyngoose.Table { + @Dyngoose.$PrimaryKey('id', 'title') + public static readonly primaryKey: Dyngoose.Query.PrimaryKey - @AttributeDecorator.Number() - public id: number + @Dyngoose.Attribute.Number() + public id!: number - @AttributeDecorator.String() - public title: string + @Dyngoose.Attribute.String() + public title!: string - @AttributeDecorator.Number() - public count: number + @Dyngoose.Attribute.Number() + public count!: number } before(async () => { @@ -45,7 +37,7 @@ describe('Transaction', () => { }) it('should operate a successful commit', async () => { - const transaction = new Transaction() + const transaction = new Dyngoose.Transaction() // add a new record transaction.save(Card.new({ id: 42, title: 'new record', count: 1 })) @@ -74,7 +66,7 @@ describe('Transaction', () => { }) it('should fail with a ConditionalCheckFailed error', async () => { - const transaction = new Transaction() + const transaction = new Dyngoose.Transaction() // add a new record transaction.save(Card.new({ id: 42, title: 'new record', count: 1 })) @@ -86,7 +78,7 @@ describe('Transaction', () => { try { await transaction.commit() - } catch (ex) { + } catch (ex: any) { error = ex } diff --git a/spec/tsconfig.json b/spec/tsconfig.json new file mode 100644 index 00000000..4877802e --- /dev/null +++ b/spec/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../dist/spec", + "module": "CommonJS" + }, + "references": [ + { + "path": "../src/tsconfig.types.spec.json" + } + ] +} \ No newline at end of file diff --git a/src/utils/cdk.spec.ts b/spec/utils/cdk.spec.ts similarity index 89% rename from src/utils/cdk.spec.ts rename to spec/utils/cdk.spec.ts index 5644a3f7..b7c32bde 100644 --- a/src/utils/cdk.spec.ts +++ b/spec/utils/cdk.spec.ts @@ -1,6 +1,7 @@ import { App, Stack } from 'aws-cdk-lib' import { expect } from 'chai' -import { createCDKTable } from './cdk' +import { createCDKTable } from 'dyngoose/utils' + import { TestableTable } from '../setup-tests.spec' describe('utils/cdk', () => { diff --git a/src/utils/truly-empty.spec.ts b/spec/utils/truly-empty.spec.ts similarity index 97% rename from src/utils/truly-empty.spec.ts rename to spec/utils/truly-empty.spec.ts index 56b6f6c8..dd2e6589 100644 --- a/src/utils/truly-empty.spec.ts +++ b/spec/utils/truly-empty.spec.ts @@ -1,5 +1,5 @@ import { expect } from 'chai' -import { isTrulyEmpty } from './truly-empty' +import { isTrulyEmpty } from 'dyngoose/utils' describe('utils/empty', () => { describe('isTrulyEmpty', () => { diff --git a/src/attribute.ts b/src/attribute.ts index c29893a9..26b178f3 100644 --- a/src/attribute.ts +++ b/src/attribute.ts @@ -1,8 +1,9 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' import * as _ from 'lodash' + import { ValidationError } from './errors' -import { type IAttributeType } from './interfaces' -import { type AttributeMetadata } from './metadata/attribute' +import type { IAttributeType } from './interfaces' +import type { AttributeMetadata } from './metadata/attribute' import { isTrulyEmpty } from './utils/truly-empty' export class Attribute { @@ -13,7 +14,7 @@ export class Attribute { public readonly type: IAttributeType, public metadata: AttributeMetadata = {}, ) { - this.name = this.metadata.name == null ? this.propertyName : this.metadata.name + this.name = this.metadata.name ?? this.propertyName } /** diff --git a/src/batch-get.ts b/src/batch-get.ts index 9e874c6f..8a88c02d 100644 --- a/src/batch-get.ts +++ b/src/batch-get.ts @@ -1,11 +1,12 @@ -import { flatten, filter, isArray, isEqual, chunk } from 'lodash' -import { type BatchGetItemOutput, type DynamoDB, type Get, type KeysAndAttributes, type TransactGetItem, type TransactGetItemsOutput } from '@aws-sdk/client-dynamodb' +import type { BatchGetItemOutput, DynamoDB, Get, KeysAndAttributes, TransactGetItem, TransactGetItemsOutput } from '@aws-sdk/client-dynamodb' +import { chunk,filter, flatten, isArray, isEqual } from 'lodash' + import Config from './config' -import { type Table } from './table' -import { buildProjectionExpression } from './query/projection-expression' +import type { IRequestOptions } from './connections' import { HelpfulError } from './errors' -import { type AttributeMap } from './interfaces' -import { type IRequestOptions } from './connections' +import type { AttributeMap } from './interfaces' +import { buildProjectionExpression } from './query/projection-expression' +import type { Table } from './table' export class BatchGet { public static readonly MAX_BATCH_ITEMS = 100 @@ -34,7 +35,7 @@ export class BatchGet { * @see {@link https://github.com/benhutchins/dyngoose/blob/master/docs/Connections.md}. */ constructor(connection?: DynamoDB) { - this.dynamo = connection == null ? Config.defaultConnection.client : connection + this.dynamo = connection ?? Config.defaultConnection.client } public setConnection(dynamo: DynamoDB): this { @@ -124,11 +125,12 @@ export class BatchGet { RequestItems: requestMap, }, requestOptions) } - } catch (ex) { + } catch (ex: any) { throw new HelpfulError(ex) } - const responses = output.Responses == null ? [] : output.Responses + + const responses = output.Responses ?? [] if (responses.length === 0) { return [] diff --git a/src/batch-write.ts b/src/batch-write.ts index dbbe81e5..7af22605 100644 --- a/src/batch-write.ts +++ b/src/batch-write.ts @@ -1,9 +1,10 @@ -import { type BatchWriteItemOutput, type DynamoDB, type WriteRequest } from '@aws-sdk/client-dynamodb' +import type { BatchWriteItemOutput, DynamoDB, WriteRequest } from '@aws-sdk/client-dynamodb' import { RateLimit } from 'async-sema' import * as _ from 'lodash' + import Config from './config' -import { type Table } from './table' import { BatchError, HelpfulError } from './errors' +import type { Table } from './table' type BatchWriteItemRequestMap = Record @@ -51,7 +52,7 @@ export class BatchWrite { */ breakOnException?: boolean } = {}) { - this.dynamo = options.connection == null ? Config.defaultConnection.client : options.connection + this.dynamo = options.connection ?? Config.defaultConnection.client if (this.options.maxItemsPerBatch != null && this.options.maxItemsPerBatch > BatchWrite.MAX_BATCH_ITEMS) { throw new Error(`maxItemsPerBatch cannot be greater than ${BatchWrite.MAX_BATCH_ITEMS}`) @@ -102,8 +103,8 @@ export class BatchWrite { } public async commit(): Promise { - const limit = RateLimit(this.options.maxParallelWrites == null ? BatchWrite.MAX_PARALLEL_WRITES : this.options.maxParallelWrites) - const chunks = _.chunk(this.list, this.options.maxItemsPerBatch == null ? BatchWrite.MAX_BATCH_ITEMS : this.options.maxItemsPerBatch) + const limit = RateLimit(this.options.maxParallelWrites ?? BatchWrite.MAX_PARALLEL_WRITES) + const chunks = _.chunk(this.list, this.options.maxItemsPerBatch ?? BatchWrite.MAX_BATCH_ITEMS) const exceptions: HelpfulError[] = [] const promises = chunks.map(async (chunk) => { @@ -131,7 +132,7 @@ export class BatchWrite { try { return await this.dynamo.batchWriteItem({ RequestItems: mergedMap }) - } catch (ex) { + } catch (ex: any) { // save the exception to stop all future chunks, because without this the other chunks would continue // this is not perfect, because operations that are in-progress will still continue, although they // might fail as well for the same reason as the first exception diff --git a/src/config.ts b/src/config.ts index ceaedc87..d4c40f56 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,4 +1,5 @@ import { DynamoDB } from '@aws-sdk/client-dynamodb' + import { type Connection, DynamoDBConnection } from './connections' /** @@ -39,5 +40,5 @@ export default class Config { } // this is to avoid a type error, but we should probably convert this class to something else - public useless: boolean + public useless: undefined } diff --git a/src/connections/connection.ts b/src/connections/connection.ts index a245ee72..d0b519d6 100644 --- a/src/connections/connection.ts +++ b/src/connections/connection.ts @@ -1,4 +1,4 @@ -import { type DynamoDB } from '@aws-sdk/client-dynamodb' +import type { DynamoDB } from '@aws-sdk/client-dynamodb' export interface Connection { readonly client: DynamoDB diff --git a/src/connections/dynamodb-connection.spec.ts b/src/connections/dynamodb-connection.spec.ts index 866666db..be43d73d 100644 --- a/src/connections/dynamodb-connection.spec.ts +++ b/src/connections/dynamodb-connection.spec.ts @@ -1,5 +1,6 @@ import { DynamoDB } from '@aws-sdk/client-dynamodb' import { expect } from 'chai' + import { DynamoDBConnection } from './dynamodb-connection' describe(DynamoDBConnection.name, () => { diff --git a/src/connections/dynamodb-connection.ts b/src/connections/dynamodb-connection.ts index 5943d83f..31cdca85 100644 --- a/src/connections/dynamodb-connection.ts +++ b/src/connections/dynamodb-connection.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-var-requires */ import { DynamoDB, type DynamoDBClientConfig } from '@aws-sdk/client-dynamodb' -import { type Connection } from './connection' + +import type { Connection } from './connection' interface DyngooseDynamoDBConnectionOptions extends DynamoDBClientConfig { enableAWSXray?: boolean diff --git a/src/decorator/attribute-types/any.ts b/src/decorator/attribute-types/any.ts index bc9e828b..ec48264f 100644 --- a/src/decorator/attribute-types/any.ts +++ b/src/decorator/attribute-types/any.ts @@ -1,7 +1,8 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' + import { DynamoAttributeType } from '../../dynamo-attribute-types' -import { type IAttributeType } from '../../interfaces' -import { type AnyAttributeMetadata } from '../../metadata/attribute-types/any.metadata' +import type { IAttributeType } from '../../interfaces' +import type { AnyAttributeMetadata } from '../../metadata/attribute-types/any.metadata' import { AttributeType } from '../../tables/attribute-type' type Value = any @@ -18,7 +19,7 @@ export class AnyAttributeType extends AttributeType implements fromDynamo(attributeValue: AttributeValue): Value | null { try { - return JSON.parse(attributeValue.S as string) + return JSON.parse(attributeValue.S!) } catch (ex) { return null } diff --git a/src/decorator/attribute-types/binary-set.ts b/src/decorator/attribute-types/binary-set.ts index 633b73d0..96b03f6b 100644 --- a/src/decorator/attribute-types/binary-set.ts +++ b/src/decorator/attribute-types/binary-set.ts @@ -1,9 +1,10 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' import { isArray, isSet } from 'lodash' + import { DynamoAttributeType } from '../../dynamo-attribute-types' import { ValidationError } from '../../errors' -import { type IAttributeType } from '../../interfaces' -import { type BinarySetAttributeMetadata, type BinarySetValue } from '../../metadata/attribute-types/binary-set.metadata' +import type { IAttributeType } from '../../interfaces' +import type { BinarySetAttributeMetadata, BinarySetValue } from '../../metadata/attribute-types/binary-set.metadata' import { AttributeType } from '../../tables/attribute-type' type Metadata = BinarySetAttributeMetadata diff --git a/src/decorator/attribute-types/binary.ts b/src/decorator/attribute-types/binary.ts index ad1237d3..c67b0702 100644 --- a/src/decorator/attribute-types/binary.ts +++ b/src/decorator/attribute-types/binary.ts @@ -1,6 +1,6 @@ import { DynamoAttributeType } from '../../dynamo-attribute-types' -import { type IAttributeType } from '../../interfaces' -import { type BinaryAttributeMetadata } from '../../metadata/attribute-types/binary.metadata' +import type { IAttributeType } from '../../interfaces' +import type { BinaryAttributeMetadata } from '../../metadata/attribute-types/binary.metadata' import { AttributeType } from '../../tables/attribute-type' type Value = Uint8Array diff --git a/src/decorator/attribute-types/boolean.ts b/src/decorator/attribute-types/boolean.ts index 2f4543ef..39c2fc58 100644 --- a/src/decorator/attribute-types/boolean.ts +++ b/src/decorator/attribute-types/boolean.ts @@ -1,6 +1,6 @@ import { DynamoAttributeType } from '../../dynamo-attribute-types' -import { type IAttributeType } from '../../interfaces' -import { type BooleanAttributeMetadata, type BooleanAttributeValue } from '../../metadata/attribute-types/boolean.metadata' +import type { IAttributeType } from '../../interfaces' +import type { BooleanAttributeMetadata, BooleanAttributeValue } from '../../metadata/attribute-types/boolean.metadata' import { AttributeType } from '../../tables/attribute-type' type Value = BooleanAttributeValue diff --git a/src/decorator/attribute-types/date.ts b/src/decorator/attribute-types/date.ts index 072ac480..1b6dbbfd 100644 --- a/src/decorator/attribute-types/date.ts +++ b/src/decorator/attribute-types/date.ts @@ -1,11 +1,12 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' + import { DynamoAttributeType } from '../../dynamo-attribute-types' import { SchemaError } from '../../errors' -import { type IAttributeType } from '../../interfaces' -import { type DateAttributeMetadata } from '../../metadata/attribute-types/date.metadata' -import { type Table } from '../../table' +import type { IAttributeType } from '../../interfaces' +import type { DateAttributeMetadata } from '../../metadata/attribute-types/date.metadata' +import type { Table } from '../../table' import { AttributeType } from '../../tables/attribute-type' -import { stringToNumber } from './utils' +import { stringToNumber } from '../../utils' type Value = Date type Metadata = DateAttributeMetadata diff --git a/src/decorator/attribute-types/dynamic.ts b/src/decorator/attribute-types/dynamic.ts index 4349f9ca..2353c883 100644 --- a/src/decorator/attribute-types/dynamic.ts +++ b/src/decorator/attribute-types/dynamic.ts @@ -1,10 +1,11 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' -import { type IAttributeType } from '../../interfaces' -import { type DynamicAttributeValue, type DynamicAttributeMetadata } from '../../metadata/attribute-types/dynamic.metadata' -import { type Table } from '../../table' -import { AttributeType } from '../../tables/attribute-type' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' import { marshall, unmarshall } from '@aws-sdk/util-dynamodb' + import { DynamoAttributeType } from '../../dynamo-attribute-types' +import type { IAttributeType } from '../../interfaces' +import type { DynamicAttributeMetadata,DynamicAttributeValue } from '../../metadata/attribute-types/dynamic.metadata' +import type { Table } from '../../table' +import { AttributeType } from '../../tables/attribute-type' export class DynamicAttributeType extends AttributeType implements IAttributeType { diff --git a/src/decorator/attribute-types/index.ts b/src/decorator/attribute-types/index.ts index 931927e2..35a74387 100644 --- a/src/decorator/attribute-types/index.ts +++ b/src/decorator/attribute-types/index.ts @@ -1,5 +1,5 @@ -import { type Metadata, type Table } from '../..' -import { type MapBaseValue } from '../../metadata/attribute-types/map.metadata' +import type { Metadata, Table } from '../..' +import type { MapBaseValue } from '../../metadata/attribute-types/map.metadata' import { AnyAttributeType } from './any' import { BinaryAttributeType } from './binary' import { BinarySetAttributeType } from './binary-set' diff --git a/src/decorator/attribute-types/list.ts b/src/decorator/attribute-types/list.ts index 308ee485..6ddb3da4 100644 --- a/src/decorator/attribute-types/list.ts +++ b/src/decorator/attribute-types/list.ts @@ -1,7 +1,8 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' import { marshall, unmarshall } from '@aws-sdk/util-dynamodb' + import { DynamoAttributeType } from '../../dynamo-attribute-types' -import { type ListAttributeMetadata } from '../../metadata/attribute-types/list.metadata' +import type { ListAttributeMetadata } from '../../metadata/attribute-types/list.metadata' import { AttributeType } from '../../tables/attribute-type' type Value = any[] diff --git a/src/decorator/attribute-types/map.ts b/src/decorator/attribute-types/map.ts index 3ecbb809..8c23f6d6 100644 --- a/src/decorator/attribute-types/map.ts +++ b/src/decorator/attribute-types/map.ts @@ -1,14 +1,15 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' +import { marshall, unmarshall } from '@aws-sdk/util-dynamodb' import { each, find, get, isFunction, isObject } from 'lodash' -import { type Attribute } from '../../attribute' + +import type { Attribute } from '../../attribute' import { DynamoAttributeType } from '../../dynamo-attribute-types' import { ValidationError } from '../../errors' -import { type AttributeMap, type IAttributeType } from '../../interfaces' -import { type MapAttributeMetadata, type MapBaseValue } from '../../metadata/attribute-types/map.metadata' -import { type Table } from '../../table' +import type { AttributeMap, IAttributeType } from '../../interfaces' +import type { MapAttributeMetadata, MapBaseValue } from '../../metadata/attribute-types/map.metadata' +import type { Table } from '../../table' import { AttributeType } from '../../tables/attribute-type' import { isTrulyEmpty } from '../../utils/truly-empty' -import { marshall, unmarshall } from '@aws-sdk/util-dynamodb' export class MapAttributeType extends AttributeType> implements IAttributeType { @@ -72,7 +73,7 @@ export class MapAttributeType extends AttributeType< } fromDynamo(attributeValue: AttributeValue): Value { - const mapValue: AttributeMap = attributeValue.M == null ? {} : attributeValue.M + const mapValue: AttributeMap = attributeValue.M ?? {} const map: any = {} for (const attributeName of Object.keys(mapValue)) { diff --git a/src/decorator/attribute-types/number-set.ts b/src/decorator/attribute-types/number-set.ts index 194285b5..667925d5 100644 --- a/src/decorator/attribute-types/number-set.ts +++ b/src/decorator/attribute-types/number-set.ts @@ -1,12 +1,13 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' import { every, isArray, isSet, uniq } from 'lodash' + import { DynamoAttributeType } from '../../dynamo-attribute-types' import { ValidationError } from '../../errors' -import { type IAttributeType } from '../../interfaces' -import { type NumberSetAttributeMetadata, type NumberSetValue } from '../../metadata/attribute-types/number-set.metadata' -import { type NumberValue } from '../../metadata/attribute-types/number.metadata' +import type { IAttributeType } from '../../interfaces' +import type { NumberValue } from '../../metadata/attribute-types/number.metadata' +import type { NumberSetAttributeMetadata, NumberSetValue } from '../../metadata/attribute-types/number-set.metadata' import { AttributeType } from '../../tables/attribute-type' -import { isNumber, numberToString, stringToNumber } from './utils' +import { isNumber, numberToString, stringToNumber } from '../../utils' type Metadata = NumberSetAttributeMetadata diff --git a/src/decorator/attribute-types/number.ts b/src/decorator/attribute-types/number.ts index 1e466065..0e3b05ce 100644 --- a/src/decorator/attribute-types/number.ts +++ b/src/decorator/attribute-types/number.ts @@ -1,10 +1,11 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' + import { DynamoAttributeType } from '../../dynamo-attribute-types' import { ValidationError } from '../../errors' -import { type IAttributeType } from '../../interfaces' -import { type NumberAttributeMetadata } from '../../metadata/attribute-types/number.metadata' +import type { IAttributeType } from '../../interfaces' +import type { NumberAttributeMetadata } from '../../metadata/attribute-types/number.metadata' import { AttributeType } from '../../tables/attribute-type' -import { isNumber, numberToString, stringToNumber } from './utils' +import { isNumber, numberToString, stringToNumber } from '../../utils' type Value = number | bigint type Metadata = NumberAttributeMetadata diff --git a/src/decorator/attribute-types/string-set.ts b/src/decorator/attribute-types/string-set.ts index 342ad17e..12dad1be 100644 --- a/src/decorator/attribute-types/string-set.ts +++ b/src/decorator/attribute-types/string-set.ts @@ -1,9 +1,10 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' import { every, isArray, isSet, isString, uniq } from 'lodash' + import { DynamoAttributeType } from '../../dynamo-attribute-types' import { ValidationError } from '../../errors' -import { type IAttributeType } from '../../interfaces' -import { type StringSetAttributeMetadata, type StringSetValue } from '../../metadata/attribute-types/string-set.metadata' +import type { IAttributeType } from '../../interfaces' +import type { StringSetAttributeMetadata, StringSetValue } from '../../metadata/attribute-types/string-set.metadata' import { AttributeType } from '../../tables/attribute-type' type Metadata = StringSetAttributeMetadata diff --git a/src/decorator/attribute-types/string.ts b/src/decorator/attribute-types/string.ts index 5949ecf9..b1250052 100644 --- a/src/decorator/attribute-types/string.ts +++ b/src/decorator/attribute-types/string.ts @@ -1,9 +1,10 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' import { trim } from 'lodash' + import { DynamoAttributeType } from '../../dynamo-attribute-types' import { ValidationError } from '../../errors' -import { type IAttributeType } from '../../interfaces' -import { type StringAttributeMetadata } from '../../metadata/attribute-types/string.metadata' +import type { IAttributeType } from '../../interfaces' +import type { StringAttributeMetadata } from '../../metadata/attribute-types/string.metadata' import { AttributeType } from '../../tables/attribute-type' type Value = string diff --git a/src/decorator/attribute-types/utils.ts b/src/decorator/attribute-types/utils.ts deleted file mode 100644 index 7848f3d2..00000000 --- a/src/decorator/attribute-types/utils.ts +++ /dev/null @@ -1,16 +0,0 @@ -export function stringToNumber(number: number | string): number { - if (typeof number === 'number') { - return number - } else { - return JSON.parse(number) - } -} - -export function numberToString(number: number | bigint): string { - return number.toString() -} - -export function isNumber(value: any): value is number { - const type = typeof value - return type === 'number' || type === 'bigint' -} diff --git a/src/decorator/document-client.ts b/src/decorator/document-client.ts index 779398d7..34b731a3 100644 --- a/src/decorator/document-client.ts +++ b/src/decorator/document-client.ts @@ -1,4 +1,4 @@ -import { type ITable } from '../table' +import type { ITable } from '../table' export function DocumentClient() { return (tableClass: ITable, propertyKey: string) => { diff --git a/src/decorator/global-secondary-index.ts b/src/decorator/global-secondary-index.ts index 8f2087ec..0b19446c 100644 --- a/src/decorator/global-secondary-index.ts +++ b/src/decorator/global-secondary-index.ts @@ -1,8 +1,9 @@ import { uniq } from 'lodash' + import { SchemaError } from '../errors' -import { type IThroughput } from '../interfaces' +import type { IThroughput } from '../interfaces' import type * as Metadata from '../metadata' -import { type ITable } from '../table' +import type { ITable } from '../table' interface GlobalSecondaryIndexOptionsBase { name?: string @@ -61,7 +62,7 @@ export function GlobalSecondaryIndex(options: GlobalSecondaryIndexOptions) { const index: Metadata.Index.GlobalSecondaryIndex = { propertyName, - name: options.name == null ? propertyName : options.name, + name: options.name ?? propertyName, hash: table.schema.getAttributeByName(primaryKey), range: sortKey == null ? undefined : table.schema.getAttributeByName(sortKey), projection: options.projection, diff --git a/src/decorator/index.ts b/src/decorator/index.ts index acd6516f..8e9e1d7d 100644 --- a/src/decorator/index.ts +++ b/src/decorator/index.ts @@ -1,8 +1,6 @@ -import { Attribute } from './attribute-types' - -export { Attribute } -export { Table } from './table' -export { GlobalSecondaryIndex } from './global-secondary-index' -export { LocalSecondaryIndex } from './local-secondary-index' -export { PrimaryKey } from './primary-key' -export { DocumentClient } from './document-client' +export * from './attribute-types' +export * from './document-client' +export * from './global-secondary-index' +export * from './local-secondary-index' +export * from './primary-key' +export * from './table' diff --git a/src/decorator/local-secondary-index.ts b/src/decorator/local-secondary-index.ts index 29e4b374..c302c3e1 100644 --- a/src/decorator/local-secondary-index.ts +++ b/src/decorator/local-secondary-index.ts @@ -1,5 +1,5 @@ import { SchemaError } from '../errors' -import { type ITable } from '../table' +import type { ITable } from '../table' export function LocalSecondaryIndex(sortKeyName: string, options: { name?: string } = {}) { return (tableClass: ITable, propertyName: string) => { @@ -11,7 +11,7 @@ export function LocalSecondaryIndex(sortKeyName: string, options: { name?: strin } tableClass.schema.localSecondaryIndexes.push({ - name: options.name == null ? propertyName : options.name, + name: options.name ?? propertyName, propertyName, range, }) diff --git a/src/decorator/primary-key.ts b/src/decorator/primary-key.ts index b979c9ad..d06b83e2 100644 --- a/src/decorator/primary-key.ts +++ b/src/decorator/primary-key.ts @@ -1,4 +1,4 @@ -import { type ITable } from '../table' +import type { ITable } from '../table' export function PrimaryKey(primaryKey: string, sortKey?: string) { return (tableClass: ITable, propertyKey: string) => { diff --git a/src/decorator/table.ts b/src/decorator/table.ts index 630aa8a2..099dd91a 100644 --- a/src/decorator/table.ts +++ b/src/decorator/table.ts @@ -1,5 +1,5 @@ -import { type TableMetadata } from '../metadata/table' -import { type ITable } from '../table' +import type { TableMetadata } from '../metadata/table' +import type { ITable } from '../table' export function Table(metadata: TableMetadata) { return (table: ITable) => { diff --git a/src/document-client.ts b/src/document-client.ts index a6108066..a868f30b 100644 --- a/src/document-client.ts +++ b/src/document-client.ts @@ -1,21 +1,22 @@ -import { - type DeleteItemInput, - type TransactWriteItem, - type TransactWriteItemsOutput, - type BatchWriteItemOutput, - type UpdateItemInput, - type PutItemInput, - type UpdateItemCommandOutput, - type PutItemCommandOutput, - type DeleteItemCommandOutput, +import type { + BatchWriteItemOutput, + DeleteItemCommandOutput, + DeleteItemInput, + PutItemCommandOutput, + PutItemInput, + TransactWriteItem, + TransactWriteItemsOutput, + UpdateItemCommandOutput, + UpdateItemInput, } from '@aws-sdk/client-dynamodb' + import { HelpfulError } from './errors' import { batchWrite, type WriteRequestMap } from './query/batch-write' import { buildQueryExpression } from './query/expression' -import { type UpdateConditions } from './query/filters' +import type { UpdateConditions } from './query/filters' import { transactWrite } from './query/transact-write' import { getUpdateItemInput, type UpdateItemInputParams } from './query/update-item-input' -import { type ITable, type Table } from './table' +import type { ITable, Table } from './table' interface PutItemInputParams extends UpdateItemInputParams { } @@ -48,7 +49,7 @@ export class DocumentClient { const input = this.getPutInput(record, params) try { return await this.tableClass.schema.dynamo.putItem(input) - } catch (ex) { + } catch (ex: any) { throw new HelpfulError(ex, this.tableClass, input) } } @@ -61,7 +62,7 @@ export class DocumentClient { const input = this.getUpdateInput(record, params) try { return await this.tableClass.schema.dynamo.updateItem(input) - } catch (ex) { + } catch (ex: any) { throw new HelpfulError(ex, this.tableClass, input) } } @@ -120,7 +121,7 @@ export class DocumentClient { const input = this.getDeleteInput(record, conditions) try { return await this.tableClass.schema.dynamo.deleteItem(input) - } catch (ex) { + } catch (ex: any) { throw new HelpfulError(ex, this.tableClass, input) } } diff --git a/src/dyngoose.ts b/src/dyngoose.ts deleted file mode 100644 index 29c38326..00000000 --- a/src/dyngoose.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { type TableDescription } from '@aws-sdk/client-dynamodb' - -import { BatchGet } from './batch-get' -import { BatchWrite } from './batch-write' -import Config from './config' -import * as Connection from './connections' -import * as Decorator from './decorator' -import { DynamoAttributeType } from './dynamo-attribute-types' -import * as Errors from './errors' -import * as Events from './events' -import * as Metadata from './metadata' -import * as Query from './query' -import { type ITable, Table } from './table' -import { AttributeType } from './tables/attribute-type' -import { createTable } from './tables/create-table' -import { deleteTable } from './tables/delete-table' -import { Transaction } from './transaction' -import { type Filters } from './query/filters' -import { QueryOutput } from './query/output' - -export const TableOperations = { - createTable: async (table: ITable): Promise => await createTable(table.schema), - deleteTable: async (table: ITable): Promise => await deleteTable(table.schema), -} - -export { - AttributeType, - BatchGet, - BatchWrite, - Config, - Connection, - Decorator, - DynamoAttributeType, - Errors, - Events, - type Filters, - Metadata, - Query, - QueryOutput, - Table, - Transaction, -} - -export type { - ITable, -} - -// export decorators prefixed with $ for convenience -export { Decorator as $ } -export { DocumentClient as $DocumentClient } from './decorator/document-client' -export { GlobalSecondaryIndex as $GlobalSecondaryIndex, type GlobalSecondaryIndexOptions } from './decorator/global-secondary-index' -export { LocalSecondaryIndex as $LocalSecondaryIndex } from './decorator/local-secondary-index' -export { PrimaryKey as $PrimaryKey } from './decorator/primary-key' -export { Table as $Table } from './decorator/table' - -export { Attribute } from './decorator' -export { DocumentClient } from './document-client' diff --git a/src/errors.ts b/src/errors.ts deleted file mode 100644 index 8b85f20f..00000000 --- a/src/errors.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { type BatchWriteItemOutput, type DynamoDBServiceException } from '@aws-sdk/client-dynamodb' -import { type ITable } from './table' - -export class DyngooseError extends Error { - constructor(message: string) { - super(message) - this.message = message - Error.captureStackTrace(this, this.constructor) - this.name = this.constructor.name - } -} - -export class HelpfulError extends DyngooseError { - tableName?: string - - constructor(error: DynamoDBServiceException, public tableClass?: ITable, public queryInput?: any) { - super(error.message) - Object.assign(this, error) - Error.captureStackTrace(this, this.constructor) - this.name = error.name - if (tableClass != null) { - this.tableName = tableClass.schema.name - } - } -} - -export class SchemaError extends DyngooseError {} -export class QueryError extends DyngooseError {} -export class ValidationError extends DyngooseError {} - -export class BatchError extends DyngooseError { - constructor(message: string, public errors: HelpfulError[], public output: BatchWriteItemOutput) { - super(message) - } -} diff --git a/src/errors/batch-error.ts b/src/errors/batch-error.ts new file mode 100644 index 00000000..9f81b32f --- /dev/null +++ b/src/errors/batch-error.ts @@ -0,0 +1,10 @@ +import type { BatchWriteItemOutput } from '@aws-sdk/client-dynamodb' + +import { DyngooseError } from './dyngoose-error' +import type { HelpfulError } from './helpful-error' + +export class BatchError extends DyngooseError { + constructor(message: string, public errors: HelpfulError[], public output: BatchWriteItemOutput) { + super(message) + } +} diff --git a/src/errors/dyngoose-error.ts b/src/errors/dyngoose-error.ts new file mode 100644 index 00000000..fea2fa47 --- /dev/null +++ b/src/errors/dyngoose-error.ts @@ -0,0 +1,8 @@ +export class DyngooseError extends Error { + constructor(message: string) { + super(message) + this.message = message + Error.captureStackTrace(this, this.constructor) + this.name = this.constructor.name + } +} \ No newline at end of file diff --git a/src/errors/helpful-error.ts b/src/errors/helpful-error.ts new file mode 100644 index 00000000..9967a632 --- /dev/null +++ b/src/errors/helpful-error.ts @@ -0,0 +1,18 @@ +import type { DynamoDBServiceException } from '@aws-sdk/client-dynamodb' + +import type { ITable } from '../table' +import { DyngooseError } from './dyngoose-error' + +export class HelpfulError extends DyngooseError { + tableName?: string + + constructor(error: DynamoDBServiceException, public tableClass?: ITable, public queryInput?: any) { + super(error.message) + Object.assign(this, error) + Error.captureStackTrace(this, this.constructor) + this.name = error.name + if (tableClass != null) { + this.tableName = tableClass.schema.name + } + } +} diff --git a/src/errors/index.ts b/src/errors/index.ts new file mode 100644 index 00000000..dea6b60a --- /dev/null +++ b/src/errors/index.ts @@ -0,0 +1,6 @@ +export * from './batch-error' +export * from './dyngoose-error' +export * from './helpful-error' +export * from './query-error' +export * from './schema-error' +export * from './validator-error' diff --git a/src/errors/query-error.ts b/src/errors/query-error.ts new file mode 100644 index 00000000..e706b7e6 --- /dev/null +++ b/src/errors/query-error.ts @@ -0,0 +1,3 @@ +import { DyngooseError } from './dyngoose-error' + +export class QueryError extends DyngooseError {} diff --git a/src/errors/schema-error.ts b/src/errors/schema-error.ts new file mode 100644 index 00000000..391ba7e4 --- /dev/null +++ b/src/errors/schema-error.ts @@ -0,0 +1,3 @@ +import { DyngooseError } from './dyngoose-error' + +export class SchemaError extends DyngooseError {} diff --git a/src/errors/validator-error.ts b/src/errors/validator-error.ts new file mode 100644 index 00000000..287bf0a6 --- /dev/null +++ b/src/errors/validator-error.ts @@ -0,0 +1,3 @@ +import { DyngooseError } from './dyngoose-error' + +export class ValidationError extends DyngooseError { } diff --git a/src/events.ts b/src/events.ts index 23e8bea7..178abf10 100644 --- a/src/events.ts +++ b/src/events.ts @@ -1,7 +1,8 @@ -import { type DeleteItemCommandOutput, type PutItemCommandOutput, type ReturnConsumedCapacity, type UpdateItemCommandOutput } from '@aws-sdk/client-dynamodb' -import { type Table } from './table' -import { type AttributeMap, type DynamoReturnValues } from './interfaces' -import { type UpdateConditions } from './query/filters' +import type { DeleteItemCommandOutput, PutItemCommandOutput, ReturnConsumedCapacity, UpdateItemCommandOutput } from '@aws-sdk/client-dynamodb' + +import type { AttributeMap, DynamoReturnValues } from './interfaces' +import type { UpdateConditions } from './query/filters' +import type { Table } from './table' interface BaseEvent { /** diff --git a/src/index.ts b/src/index.ts index 94d229fe..cbe1eb21 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,22 @@ -import * as Dyngoose from './dyngoose' - -export * from './dyngoose' -export { Dyngoose } +export { BatchGet } from './batch-get' +export { BatchWrite } from './batch-write' +export { default as Config } from './config' +export * as Connection from './connections' +export * as $ from './decorator' // export decorators prefixed with $ for convenience +export * as Decorator from './decorator' +export { Attribute } from './decorator' +export { DocumentClient as $DocumentClient } from './decorator/document-client' +export { GlobalSecondaryIndex as $GlobalSecondaryIndex, type GlobalSecondaryIndexOptions } from './decorator/global-secondary-index' +export { LocalSecondaryIndex as $LocalSecondaryIndex } from './decorator/local-secondary-index' +export { PrimaryKey as $PrimaryKey } from './decorator/primary-key' +export { Table as $Table } from './decorator/table' +export { DocumentClient } from './document-client' +export { DynamoAttributeType } from './dynamo-attribute-types' +export * as Errors from './errors' +export * as Events from './events' +export * as Metadata from './metadata' +export * as Query from './query' +export type { ITable } from './table' +export { Table } from './table' +export { AttributeType } from './tables/attribute-type' +export { Transaction } from './transaction' diff --git a/src/interfaces/attribute-map.interface.ts b/src/interfaces/attribute-map.interface.ts index 10f545e5..bb32df88 100644 --- a/src/interfaces/attribute-map.interface.ts +++ b/src/interfaces/attribute-map.interface.ts @@ -1,3 +1,3 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' export type AttributeMap = Record diff --git a/src/interfaces/attribute-type.interface.ts b/src/interfaces/attribute-type.interface.ts index c0b7e7d5..4c0c6d0d 100644 --- a/src/interfaces/attribute-type.interface.ts +++ b/src/interfaces/attribute-type.interface.ts @@ -1,6 +1,7 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' -import { type Attribute } from '../attribute' -import { type DynamoAttributeTypes } from '../dynamo-attribute-types' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' + +import type { Attribute } from '../attribute' +import type { DynamoAttributeTypes } from '../dynamo-attribute-types' export interface IAttributeType { type: DynamoAttributeTypes diff --git a/src/interfaces/key.interface.ts b/src/interfaces/key.interface.ts index 74a02ad1..73c69402 100644 --- a/src/interfaces/key.interface.ts +++ b/src/interfaces/key.interface.ts @@ -1,3 +1,3 @@ -import { type AttributeMap } from './attribute-map.interface' +import type { AttributeMap } from './attribute-map.interface' export type Key = AttributeMap diff --git a/src/interfaces/set-property-parameters.ts b/src/interfaces/set-property-parameters.ts index 2b3efe1d..6c6d9e0b 100644 --- a/src/interfaces/set-property-parameters.ts +++ b/src/interfaces/set-property-parameters.ts @@ -1,4 +1,4 @@ -import { type UpdateOperator } from './update-operator.interface' +import type { UpdateOperator } from './update-operator.interface' export interface SetPropParams { /** diff --git a/src/metadata/attribute-types/any.metadata.ts b/src/metadata/attribute-types/any.metadata.ts index 9bcccc03..ed63c34d 100644 --- a/src/metadata/attribute-types/any.metadata.ts +++ b/src/metadata/attribute-types/any.metadata.ts @@ -1,4 +1,4 @@ -import { type AttributeMetadata } from '../attribute' +import type { AttributeMetadata } from '../attribute' type Value = any diff --git a/src/metadata/attribute-types/binary-set.metadata.ts b/src/metadata/attribute-types/binary-set.metadata.ts index 77be62e2..075288b2 100644 --- a/src/metadata/attribute-types/binary-set.metadata.ts +++ b/src/metadata/attribute-types/binary-set.metadata.ts @@ -1,4 +1,4 @@ -import { type AttributeMetadata } from '../attribute' +import type { AttributeMetadata } from '../attribute' export type BinarySetValue = Set | Uint8Array[] diff --git a/src/metadata/attribute-types/binary.metadata.ts b/src/metadata/attribute-types/binary.metadata.ts index 4841f810..fc0df471 100644 --- a/src/metadata/attribute-types/binary.metadata.ts +++ b/src/metadata/attribute-types/binary.metadata.ts @@ -1,4 +1,4 @@ -import { type AttributeMetadata } from '../attribute' +import type { AttributeMetadata } from '../attribute' type Type = Uint8Array diff --git a/src/metadata/attribute-types/boolean.metadata.ts b/src/metadata/attribute-types/boolean.metadata.ts index 461a4db8..68ac8791 100644 --- a/src/metadata/attribute-types/boolean.metadata.ts +++ b/src/metadata/attribute-types/boolean.metadata.ts @@ -1,4 +1,4 @@ -import { type AttributeMetadata } from '../attribute' +import type { AttributeMetadata } from '../attribute' export type BooleanAttributeValue = boolean diff --git a/src/metadata/attribute-types/date.metadata.ts b/src/metadata/attribute-types/date.metadata.ts index 19992be5..3dcdb7a1 100644 --- a/src/metadata/attribute-types/date.metadata.ts +++ b/src/metadata/attribute-types/date.metadata.ts @@ -1,4 +1,4 @@ -import { type AttributeMetadata } from '../attribute' +import type { AttributeMetadata } from '../attribute' export interface DateAttributeMetadata extends AttributeMetadata { /** diff --git a/src/metadata/attribute-types/dynamic.metadata.ts b/src/metadata/attribute-types/dynamic.metadata.ts index 90c617da..cb85bd2f 100644 --- a/src/metadata/attribute-types/dynamic.metadata.ts +++ b/src/metadata/attribute-types/dynamic.metadata.ts @@ -1,5 +1,6 @@ -import { type marshallOptions, type unmarshallOptions } from '@aws-sdk/util-dynamodb' -import { type AttributeMetadata } from '../attribute' +import type { marshallOptions, unmarshallOptions } from '@aws-sdk/util-dynamodb' + +import type { AttributeMetadata } from '../attribute' export type DynamicAttributeValue = any diff --git a/src/metadata/attribute-types/list.metadata.ts b/src/metadata/attribute-types/list.metadata.ts index 38407262..1ad5cd92 100644 --- a/src/metadata/attribute-types/list.metadata.ts +++ b/src/metadata/attribute-types/list.metadata.ts @@ -1,6 +1,6 @@ -import { type marshallOptions, type unmarshallOptions } from '@aws-sdk/util-dynamodb' +import type { marshallOptions, unmarshallOptions } from '@aws-sdk/util-dynamodb' -import { type AttributeMetadata } from '../attribute' +import type { AttributeMetadata } from '../attribute' export interface ListAttributeMetadata extends AttributeMetadata { marshallOptions?: marshallOptions diff --git a/src/metadata/attribute-types/map.metadata.ts b/src/metadata/attribute-types/map.metadata.ts index f168cc81..6a8f4658 100644 --- a/src/metadata/attribute-types/map.metadata.ts +++ b/src/metadata/attribute-types/map.metadata.ts @@ -1,6 +1,7 @@ -import { type NativeAttributeValue, type marshallOptions, type unmarshallOptions } from '@aws-sdk/util-dynamodb' -import { type AttributeDefinition } from '../../decorator/attribute-types' -import { type AttributeMetadata } from '../attribute' +import type { marshallOptions, NativeAttributeValue, unmarshallOptions } from '@aws-sdk/util-dynamodb' + +import type { AttributeDefinition } from '../../decorator/attribute-types' +import type { AttributeMetadata } from '../attribute' export type MapBaseValue = Record diff --git a/src/metadata/attribute-types/number-set.metadata.ts b/src/metadata/attribute-types/number-set.metadata.ts index 40dd135d..7fbb6354 100644 --- a/src/metadata/attribute-types/number-set.metadata.ts +++ b/src/metadata/attribute-types/number-set.metadata.ts @@ -1,5 +1,5 @@ -import { type AttributeMetadata } from '../attribute' -import { type NumberValue } from './number.metadata' +import type { AttributeMetadata } from '../attribute' +import type { NumberValue } from './number.metadata' export type NumberSetValue = Set | number[] diff --git a/src/metadata/attribute-types/number.metadata.ts b/src/metadata/attribute-types/number.metadata.ts index 692a6411..8be23ef8 100644 --- a/src/metadata/attribute-types/number.metadata.ts +++ b/src/metadata/attribute-types/number.metadata.ts @@ -1,4 +1,4 @@ -import { type AttributeMetadata } from '../attribute' +import type { AttributeMetadata } from '../attribute' export type NumberValue = number | bigint diff --git a/src/metadata/attribute-types/string-set.metadata.ts b/src/metadata/attribute-types/string-set.metadata.ts index 6d1f94b4..b9b03436 100644 --- a/src/metadata/attribute-types/string-set.metadata.ts +++ b/src/metadata/attribute-types/string-set.metadata.ts @@ -1,4 +1,4 @@ -import { type AttributeMetadata } from '../attribute' +import type { AttributeMetadata } from '../attribute' export type StringSetValue = Set | string[] diff --git a/src/metadata/attribute-types/string.metadata.ts b/src/metadata/attribute-types/string.metadata.ts index 8d5f0e15..b6e45886 100644 --- a/src/metadata/attribute-types/string.metadata.ts +++ b/src/metadata/attribute-types/string.metadata.ts @@ -1,4 +1,4 @@ -import { type AttributeMetadata } from '../attribute' +import type { AttributeMetadata } from '../attribute' export interface StringAttributeMetadata extends AttributeMetadata { /** diff --git a/src/metadata/attribute.ts b/src/metadata/attribute.ts index 799bc43a..ed94716f 100644 --- a/src/metadata/attribute.ts +++ b/src/metadata/attribute.ts @@ -1,5 +1,6 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' -import { type Attribute } from '../attribute' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' + +import type { Attribute } from '../attribute' export interface AttributeMetadata { /** diff --git a/src/metadata/index.ts b/src/metadata/index.ts index ed35a9e0..ddded302 100644 --- a/src/metadata/index.ts +++ b/src/metadata/index.ts @@ -1,11 +1,11 @@ -import { type AttributeMetadata as Attribute } from './attribute' +import type { AttributeMetadata as Attribute } from './attribute' import * as AttributeType from './attribute-types' import * as Index from './indexes' -import { type TableMetadata as Table } from './table' +import type { TableMetadata as Table } from './table' export { type Attribute, AttributeType, - type Table, Index, + type Table, } diff --git a/src/metadata/indexes.ts b/src/metadata/indexes.ts index 53edfd86..8a0f8c48 100644 --- a/src/metadata/indexes.ts +++ b/src/metadata/indexes.ts @@ -1,5 +1,5 @@ -import { type Attribute } from '../attribute' -import { type IThroughput } from '../interfaces' +import type { Attribute } from '../attribute' +import type { IThroughput } from '../interfaces' export interface PrimaryKey { readonly propertyName: string diff --git a/src/metadata/table.ts b/src/metadata/table.ts index 9f90869a..f3f17a94 100644 --- a/src/metadata/table.ts +++ b/src/metadata/table.ts @@ -1,5 +1,6 @@ -import { type DynamoDB, type StreamSpecification } from '@aws-sdk/client-dynamodb' -import { type IThroughput } from '../interfaces' +import type { DynamoDB, StreamSpecification } from '@aws-sdk/client-dynamodb' + +import type { IThroughput } from '../interfaces' export interface TableMetadata { /** diff --git a/src/multi-document-operation.ts b/src/multi-document-operation.ts new file mode 100644 index 00000000..d357c442 --- /dev/null +++ b/src/multi-document-operation.ts @@ -0,0 +1,35 @@ +import type { DynamoDB } from '@aws-sdk/client-dynamodb' + +import Config from './config' + +/** + * Base class for utilities that deal with multiple documents, such as BatchGet, + * BatchWrite, and Transaction. + */ +export class MultiDocumentOperation { + protected dynamo: DynamoDB + protected readonly list: ListItem[] = [] + + constructor(connection?: DynamoDB) { + this.dynamo = connection ?? Config.defaultConnection.client + } + + public setConnection(dynamo: DynamoDB): this { + this.dynamo = dynamo + return this + } + + /** + * Get the number of operations pending in this batch request + */ + public getCount(): number { + return this.list.length + } + + /** + * Get the list of pending operation items. + */ + public getPendingItems(): ListItem[] { + return this.list + } +} diff --git a/src/query/batch-write.ts b/src/query/batch-write.ts index 486abd84..dad6616a 100644 --- a/src/query/batch-write.ts +++ b/src/query/batch-write.ts @@ -1,4 +1,4 @@ -import { type BatchWriteItemOutput, type DynamoDB, type WriteRequest } from '@aws-sdk/client-dynamodb' +import type { BatchWriteItemOutput, DynamoDB, WriteRequest } from '@aws-sdk/client-dynamodb' import { chunk } from 'lodash' // this is limit of dynamoDB diff --git a/src/query/condition.ts b/src/query/condition.ts index 009bbcdb..35b987d4 100644 --- a/src/query/condition.ts +++ b/src/query/condition.ts @@ -1,14 +1,15 @@ import { flatten } from 'lodash' -import { type Table } from '../dyngoose' -import { type SimpleTypesOnly, type ContainsType, type Filter, type IntersectsType } from './filters' -import { type MagicSearch } from './search' + +import type { Table } from '../table' +import type { ContainsType, Filter, IntersectsType,SimpleTypesOnly } from './filters' +import type { MagicSearch } from './search' export class Condition { private readonly key: Attr | string private _not = false - private filter: Filter + private filter!: Filter - constructor(private readonly search: MagicSearch, attributeName: Attr) { + constructor(private readonly search: MagicSearch, attributeName: Attr | string) { this.key = attributeName return this } diff --git a/src/query/expression.ts b/src/query/expression.ts index cd18b439..28281363 100644 --- a/src/query/expression.ts +++ b/src/query/expression.ts @@ -1,11 +1,12 @@ import * as _ from 'lodash' -import { type Attribute } from '../attribute' + +import type { Attribute } from '../attribute' import { QueryError } from '../errors' -import { type AttributeMap } from '../interfaces' +import type { AttributeMap } from '../interfaces' import type * as Metadata from '../metadata' -import { type Table } from '../table' -import { type Schema } from '../tables/schema' -import { type ComplexFilters, type Filter, type Filters } from './filters' +import type { Table } from '../table' +import type { Schema } from '../tables/schema' +import type { ComplexFilters, Filter, Filters } from './filters' interface Expression { ExpressionAttributeNames: Record @@ -146,7 +147,8 @@ class FilterExpressionQuery { } else if (_.isArray(filters)) { conditions.push(this.parseComplexFilters(filters, true)) } else { - _.each(filters, (value, propName) => { + for (const propName in filters) { + const value = filters[propName as keyof typeof filters] const queryValue = this.handleFilter(propName, value, false) const attribute = this.schema.getAttributeByPropertyName(propName) @@ -168,7 +170,7 @@ class FilterExpressionQuery { conditions.push(queryValue.query) } } - }) + } } } diff --git a/src/query/filters.ts b/src/query/filters.ts index 930ecda0..001a5ffb 100644 --- a/src/query/filters.ts +++ b/src/query/filters.ts @@ -1,4 +1,4 @@ -import { type Table } from '../table' +import type { Table } from '../table' export type AttributeNames = Exclude, () => any> @@ -6,7 +6,7 @@ export type ContainsType = Type extends Array | Set ? E export type IntersectsType = Type extends Array | Set ? E : never -export type SimpleTypesOnly = Type extends string | number | bigint | number | bigint ? Type : never +export type SimpleTypesOnly = Type extends string | number | bigint ? Type : never export type Filter = ['=', Type] | diff --git a/src/query/global-secondary-index.ts b/src/query/global-secondary-index.ts index d6a1cfd2..e9034a18 100644 --- a/src/query/global-secondary-index.ts +++ b/src/query/global-secondary-index.ts @@ -1,15 +1,17 @@ -import { type QueryCommandInput, type QueryCommandOutput, type ScanCommandInput, type ScanCommandOutput } from '@aws-sdk/client-dynamodb' -import { get, has, isArray } from 'lodash' +import type { QueryCommandInput, QueryCommandOutput, ScanCommandInput, ScanCommandOutput } from '@aws-sdk/client-dynamodb' +import { has } from 'lodash' + +import { type IRequestOptions,toHttpHandlerOptions } from '../connections' import { HelpfulError, QueryError } from '../errors' -import { type Key } from '../interfaces/key.interface' +import type { Key } from '../interfaces/key.interface' import type * as Metadata from '../metadata' -import { type ITable, type Table } from '../table' +import type { ITable, Table } from '../table' +import { requireHashKeyEqualsOperator } from '../utils/require-hash-key-equals-operator' import { buildQueryExpression } from './expression' -import { type Filters as QueryFilters } from './filters' +import type { Filters as QueryFilters } from './filters' import { QueryOutput } from './output' import { buildProjectionExpression } from './projection-expression' import { MagicSearch, type MagicSearchInput } from './search' -import { toHttpHandlerOptions, type IRequestOptions } from '../connections' interface GlobalSecondaryIndexGetInput extends IRequestOptions { /** @@ -179,11 +181,7 @@ export class GlobalSecondaryIndex { } public async query(filters: QueryFilters, input?: GlobalSecondaryIndexQueryInput): Promise> { - if (!has(filters, this.metadata.hash.propertyName)) { - throw new QueryError('Cannot perform a query on a GlobalSecondaryIndex without specifying a hash key value') - } else if (isArray(get(filters, this.metadata.hash.propertyName)) && get(filters, this.metadata.hash.propertyName)[0] !== '=') { - throw new QueryError('DynamoDB only supports using equal operator for the HASH key') - } + requireHashKeyEqualsOperator(filters, this.metadata.hash.propertyName) const queryInput = this.getQueryInput(input, filters) const hasProjection = queryInput.ProjectionExpression == null @@ -191,7 +189,7 @@ export class GlobalSecondaryIndex { try { output = await this.tableClass.schema.dynamo.query(queryInput, toHttpHandlerOptions(input)) - } catch (ex) { + } catch (ex: any) { throw new HelpfulError(ex, this.tableClass, queryInput) } @@ -243,12 +241,12 @@ export class GlobalSecondaryIndex { * This will return all the items in this index, does not perform well! */ public async scan(filters?: QueryFilters | undefined | null, input: GlobalSecondaryIndexScanInput = {}, requestOptions?: IRequestOptions): Promise> { - const scanInput = this.getScanInput(input, filters == null ? undefined : filters) + const scanInput = this.getScanInput(input, filters ?? undefined) const hasProjection = scanInput.ProjectionExpression == null let output: ScanCommandOutput try { output = await this.tableClass.schema.dynamo.scan(scanInput, requestOptions) - } catch (ex) { + } catch (ex: any) { throw new HelpfulError(ex, this.tableClass, scanInput) } return QueryOutput.fromDynamoOutput(this.tableClass, output, hasProjection) diff --git a/src/query/index.ts b/src/query/index.ts index 691be742..d9e075f9 100644 --- a/src/query/index.ts +++ b/src/query/index.ts @@ -1,3 +1,12 @@ -export { PrimaryKey } from './primary-key' -export { GlobalSecondaryIndex } from './global-secondary-index' -export { LocalSecondaryIndex } from './local-secondary-index' +export * from './batch-write' +export * from './condition' +export * from './expression' +export * from './filters' +export * from './global-secondary-index' +export * from './local-secondary-index' +export * from './output' +export * from './primary-key' +export * from './projection-expression' +export * from './search' +export * from './transact-write' +export * from './update-item-input' diff --git a/src/query/local-secondary-index.ts b/src/query/local-secondary-index.ts index dee1528e..a377a7eb 100644 --- a/src/query/local-secondary-index.ts +++ b/src/query/local-secondary-index.ts @@ -1,14 +1,15 @@ -import { type QueryCommandInput, type QueryCommandOutput, type ScanCommandInput, type ScanCommandOutput, type Select } from '@aws-sdk/client-dynamodb' +import type { QueryCommandInput, QueryCommandOutput, ScanCommandInput, ScanCommandOutput, Select } from '@aws-sdk/client-dynamodb' import { has } from 'lodash' + +import { type IRequestOptions,toHttpHandlerOptions } from '../connections' import { HelpfulError, QueryError } from '../errors' -import { type Key } from '../interfaces/key.interface' +import type { Key } from '../interfaces/key.interface' import type * as Metadata from '../metadata' -import { type ITable, type Table } from '../table' +import type { ITable, Table } from '../table' import { buildQueryExpression } from './expression' -import { type Filters as QueryFilters } from './filters' +import type { Filters as QueryFilters } from './filters' import { QueryOutput } from './output' import { MagicSearch, type MagicSearchInput } from './search' -import { toHttpHandlerOptions, type IRequestOptions } from '../connections' interface LocalSecondaryIndexQueryInput extends IRequestOptions { rangeOrder?: 'ASC' | 'DESC' @@ -72,7 +73,7 @@ export class LocalSecondaryIndex { let output: QueryCommandOutput try { output = await this.tableClass.schema.dynamo.query(queryInput, toHttpHandlerOptions(input)) - } catch (ex) { + } catch (ex: any) { throw new HelpfulError(ex, this.tableClass, queryInput) } return QueryOutput.fromDynamoOutput(this.tableClass, output, hasProjection) @@ -105,7 +106,7 @@ export class LocalSecondaryIndex { let output: ScanCommandOutput try { output = await this.tableClass.schema.dynamo.scan(scanInput, requestOptions) - } catch (ex) { + } catch (ex: any) { throw new HelpfulError(ex, this.tableClass, scanInput) } return QueryOutput.fromDynamoOutput(this.tableClass, output, hasProjection) diff --git a/src/query/output.ts b/src/query/output.ts index 56a60c4d..8c22876b 100644 --- a/src/query/output.ts +++ b/src/query/output.ts @@ -1,7 +1,8 @@ -import { type ScanOutput, type QueryOutput as DynQueryOutput, type ConsumedCapacity } from '@aws-sdk/client-dynamodb' -import { type Table } from '..' -import { type Key } from '../interfaces/key.interface' -import { type ITable } from '../table' +import type { ConsumedCapacity,QueryOutput as DynQueryOutput, ScanOutput } from '@aws-sdk/client-dynamodb' + +import type { Table } from '..' +import type { Key } from '../interfaces/key.interface' +import type { ITable } from '../table' export class QueryOutput extends Array { public static fromDynamoOutput( @@ -24,10 +25,10 @@ export class QueryOutput extends Array { } const queryOutput = new QueryOutput(items, tableClass) - queryOutput.count = output.Count == null ? items.length : output.Count - queryOutput.scannedCount = output.ScannedCount as number + queryOutput.count = output.Count ?? items.length + queryOutput.scannedCount = output.ScannedCount! queryOutput.lastEvaluatedKey = output.LastEvaluatedKey - queryOutput.consumedCapacity = output.ConsumedCapacity as ConsumedCapacity + queryOutput.consumedCapacity = output.ConsumedCapacity! return queryOutput } @@ -87,10 +88,10 @@ export class QueryOutput extends Array { return queryOutput } - count: number - scannedCount: number + count!: number + scannedCount!: number lastEvaluatedKey?: Key - consumedCapacity: ConsumedCapacity + consumedCapacity!: ConsumedCapacity /** * The items returned from DynamoDB diff --git a/src/query/primary-key.ts b/src/query/primary-key.ts index 727069ca..8d113ac8 100644 --- a/src/query/primary-key.ts +++ b/src/query/primary-key.ts @@ -1,20 +1,22 @@ -import { type BatchWriteItemOutput, type DeleteItemInput, type DeleteItemOutput, type DeleteRequest, type GetItemInput, type GetItemOutput, type QueryCommandInput, type QueryCommandOutput, type ReturnConsumedCapacity, type ScanCommandInput, type ScanCommandOutput, type WriteRequest } from '@aws-sdk/client-dynamodb' +import type { BatchWriteItemOutput, DeleteItemInput, DeleteItemOutput, DeleteRequest, GetItemInput, GetItemOutput, QueryCommandInput, QueryCommandOutput, ReturnConsumedCapacity, ScanCommandInput, ScanCommandOutput, WriteRequest } from '@aws-sdk/client-dynamodb' import { get, has, isArray, isDate, isObject } from 'lodash' + import { BatchGet } from '../batch-get' +import { type IRequestOptions, toHttpHandlerOptions } from '../connections' import { HelpfulError, QueryError } from '../errors' -import { type AttributeMap } from '../interfaces' -import { type Key } from '../interfaces/key.interface' +import type { AttributeMap } from '../interfaces' +import type { Key } from '../interfaces/key.interface' import type * as Metadata from '../metadata' -import { type ITable, type Table } from '../table' -import { type TableProperties } from '../tables/properties' +import type { ITable, Table } from '../table' +import type { TableProperties } from '../tables/properties' import { isDyngooseTableInstance } from '../utils/is' +import { requireHashKeyEqualsOperator } from '../utils/require-hash-key-equals-operator' import { batchWrite, type WriteRequestMap } from './batch-write' import { buildQueryExpression } from './expression' -import { type Filters as QueryFilters, type UpdateConditions } from './filters' +import type { Filters as QueryFilters, UpdateConditions } from './filters' import { QueryOutput } from './output' import { buildProjectionExpression } from './projection-expression' import { MagicSearch, type MagicSearchInput } from './search' -import { type IRequestOptions, toHttpHandlerOptions } from '../connections' type PrimaryKeyType = string | number | Date // eslint-disable-next-line @typescript-eslint/no-invalid-void-type @@ -110,7 +112,7 @@ export class PrimaryKey = input == null ? ((range == null || isKeyValue(range)) ? {} : range as PrimaryKeyGetInput) : input + const getGetInput: Partial = input ?? ((range == null || isKeyValue(range)) ? {} : range as PrimaryKeyGetInput) getGetInput.key = record.getDynamoKey() const getItemInput = this.getGetInput(getGetInput as PrimaryKeyGetGetItemInput) const entireDocument = getItemInput.ProjectionExpression == null @@ -162,7 +164,7 @@ export class PrimaryKey, input?: PrimaryKeyQueryInput): Promise> { - if (!has(filters, this.metadata.hash.propertyName)) { - throw new QueryError('Cannot perform a query on the PrimaryKey index without specifying a hash key value') - } else if (isArray(get(filters, this.metadata.hash.propertyName)) && get(filters, this.metadata.hash.propertyName)[0] !== '=') { - throw new QueryError('DynamoDB only supports using equal operator for the HASH key') - } + requireHashKeyEqualsOperator(filters, this.metadata.hash.propertyName) const queryInput = this.getQueryInput(input) const hasProjection = queryInput.ProjectionExpression == null @@ -263,7 +261,7 @@ export class PrimaryKey | undefined | null, input?: PrimaryKeyScanInput): Promise> { - const scanInput = this.getScanInput(input, filters == null ? undefined : filters) + const scanInput = this.getScanInput(input, filters ?? undefined) let output: ScanCommandOutput try { output = await this.table.schema.dynamo.scan(scanInput, toHttpHandlerOptions(input)) - } catch (ex) { + } catch (ex: any) { throw new HelpfulError(ex, this.table, scanInput) } const hasProjection = scanInput.ProjectionExpression == null @@ -348,7 +346,8 @@ export class PrimaryKey + hash = get(queryFilters, this.metadata.hash.propertyName) if (isArray(hash)) { if (hash[0] === '=') { @@ -359,7 +358,7 @@ export class PrimaryKey = PrimaryKey | GlobalSecondaryIndex | LocalSecondaryIndex | string @@ -445,7 +446,7 @@ export class MagicSearch { if ((input as QueryCommandInput).KeyConditionExpression != null) { try { output = await this.tableClass.schema.dynamo.query(input, requestOptions) - } catch (ex) { + } catch (ex: any) { throw new HelpfulError(ex, this.tableClass, input) } } else { @@ -457,7 +458,7 @@ export class MagicSearch { try { output = await this.tableClass.schema.dynamo.scan(input, requestOptions) - } catch (ex) { + } catch (ex: any) { throw new HelpfulError(ex, this.tableClass, input) } } @@ -509,7 +510,7 @@ export class MagicSearch { continue } - const hashFilter: Filter = get(filters, hash.name) + const hashFilter = get(filters, hash.name) as Filter // if there is an operator, ensure it is allowed as a key expression if (isArray(hashFilter)) { @@ -530,7 +531,7 @@ export class MagicSearch { continue } - const rangeFilter: Filter = get(filters, range.name) + const rangeFilter = get(filters, range.name) as Filter // if there is an operator, ensure it is allowed as a key expression if (isArray(rangeFilter)) { diff --git a/src/query/transact-write.ts b/src/query/transact-write.ts index c3d616dd..1593ff9f 100644 --- a/src/query/transact-write.ts +++ b/src/query/transact-write.ts @@ -1,4 +1,4 @@ -import { type DynamoDB, type TransactWriteItemsOutput, type TransactWriteItem } from '@aws-sdk/client-dynamodb' +import type { DynamoDB, TransactWriteItem,TransactWriteItemsOutput } from '@aws-sdk/client-dynamodb' import { chunk } from 'lodash' // this is limit of dynamoDB diff --git a/src/query/update-item-input.ts b/src/query/update-item-input.ts index ada0f94e..86c0b3ae 100644 --- a/src/query/update-item-input.ts +++ b/src/query/update-item-input.ts @@ -1,9 +1,10 @@ -import { type ReturnConsumedCapacity, type UpdateItemCommandInput } from '@aws-sdk/client-dynamodb' +import type { ReturnConsumedCapacity, UpdateItemCommandInput } from '@aws-sdk/client-dynamodb' import * as _ from 'lodash' -import { type AttributeMap, type DynamoReturnValues } from '../interfaces' -import { type Table } from '../table' + +import type { AttributeMap, DynamoReturnValues } from '../interfaces' +import type { Table } from '../table' import { buildQueryExpression } from './expression' -import { type UpdateConditions } from './filters' +import type { UpdateConditions } from './filters' export interface UpdateItemInputParams { conditions?: UpdateConditions diff --git a/src/table.ts b/src/table.ts index d48d10b9..ceeb1b29 100644 --- a/src/table.ts +++ b/src/table.ts @@ -1,27 +1,28 @@ -import { - type AttributeValue, - type PutItemOutput, - type UpdateItemOutput, - type TableDescription, - type PutItemCommandOutput, - type UpdateItemCommandOutput, - type DeleteItemCommandOutput, +import type { + AttributeValue, + DeleteItemCommandOutput, + PutItemCommandOutput, + PutItemOutput, + TableDescription, + UpdateItemCommandOutput, + UpdateItemOutput, } from '@aws-sdk/client-dynamodb' import * as _ from 'lodash' -import { type Attribute } from './attribute' + +import type { Attribute } from './attribute' +import type { IRequestOptions } from './connections' import { DocumentClient } from './document-client' import type * as Events from './events' -import { type AttributeMap, type SetPropParams, type UpdateOperator } from './interfaces' -import { type Filters } from './query/filters' +import type { AttributeMap, SetPropParams, UpdateOperator } from './interfaces' +import type { Filters } from './query/filters' import { MagicSearch, type MagicSearchInput } from './query/search' import { createTable } from './tables/create-table' import { deleteTable } from './tables/delete-table' import { describeTable } from './tables/describe-table' import { migrateTable } from './tables/migrate-table' -import { type TablePropertyValue, type TableProperties, type TableProperty } from './tables/properties' +import type { TableProperties, TableProperty,TablePropertyValue } from './tables/properties' import { Schema } from './tables/schema' import { isTrulyEmpty } from './utils/truly-empty' -import { type IRequestOptions } from './connections' type StaticThis = new() => T @@ -30,7 +31,7 @@ export class Table { // #region static properties public static get schema(): Schema { if (this.__schema == null) { - this.__schema = new Schema(this as any) + this.__schema = new Schema(this) } return this.__schema @@ -65,7 +66,13 @@ export class Table { public static new(this: StaticThis, values?: TableProperties): T { const record = new this().applyDefaults() if (values != null) { - record.setValues(_.omitBy(values, (v) => v === undefined) as any) + for (const key in values) { + if (values[key as keyof typeof values] === undefined) { + delete values[key as keyof typeof values] + } + } + + record.setValues(values) } return record } diff --git a/src/tables/attribute-type.ts b/src/tables/attribute-type.ts index f74de5cc..733cafb6 100644 --- a/src/tables/attribute-type.ts +++ b/src/tables/attribute-type.ts @@ -1,15 +1,16 @@ -import { type AttributeValue } from '@aws-sdk/client-dynamodb' +import type { AttributeValue } from '@aws-sdk/client-dynamodb' + import { Attribute } from '../attribute' -import { type DynamoAttributeTypes } from '../dynamo-attribute-types' -import { type IAttributeType } from '../interfaces' -import { type AttributeMetadata } from '../metadata/attribute' -import { type ITable, type Table } from '../table' -import { type Schema } from './schema' +import type { DynamoAttributeTypes } from '../dynamo-attribute-types' +import type { IAttributeType } from '../interfaces' +import type { AttributeMetadata } from '../metadata/attribute' +import type { ITable, Table } from '../table' +import type { Schema } from './schema' export class AttributeType> implements IAttributeType { - public type: DynamoAttributeTypes + public type!: DynamoAttributeTypes - private __attribute: Attribute + private __attribute?: Attribute constructor( protected record: Table, diff --git a/src/tables/create-table-input.ts b/src/tables/create-table-input.ts index cada097c..aee551bd 100644 --- a/src/tables/create-table-input.ts +++ b/src/tables/create-table-input.ts @@ -1,9 +1,19 @@ -import { type CreateTableCommandInput, type GlobalSecondaryIndex, type KeySchemaElement, type LocalSecondaryIndex } from '@aws-sdk/client-dynamodb' +import { type CreateTableCommandInput, type GlobalSecondaryIndex, type KeySchemaElement, type LocalSecondaryIndex,ScalarAttributeType } from '@aws-sdk/client-dynamodb' import { uniqBy } from 'lodash' -import { type Attribute } from '../attribute' + +import type { DynamoAttributeTypes } from '../dynamo-attribute-types' import { SchemaError } from '../errors' -import { type Schema } from './schema' import { DEFAULT_READ_CAPACITY, DEFAULT_WRITE_CAPACITY } from './defaults' +import type { Schema } from './schema' + +function getScalarAttributeType(type: DynamoAttributeTypes, errorMessage: string): ScalarAttributeType { + switch (type) { + case 'B': return ScalarAttributeType.B + case 'N': return ScalarAttributeType.N + case 'S': return ScalarAttributeType.S + default: throw new Error(`Non-Scalar Attribute Type. ${errorMessage}. Attribute type must be a String, Number, or Boolean`) + } +} export function createTableInput(schema: Schema, forCloudFormation = false): CreateTableCommandInput { const params: CreateTableCommandInput = { @@ -11,7 +21,7 @@ export function createTableInput(schema: Schema, forCloudFormation = false): Cre AttributeDefinitions: [ { AttributeName: schema.primaryKey.hash.name, - AttributeType: schema.primaryKey.hash.type.type, + AttributeType: getScalarAttributeType(schema.primaryKey.hash.type.type, `Table ${schema.name} Hash Attribute ${schema.primaryKey.hash.name}`), }, ], KeySchema: [ @@ -34,7 +44,7 @@ export function createTableInput(schema: Schema, forCloudFormation = false): Cre if (schema.primaryKey.range != null) { params.AttributeDefinitions!.push({ AttributeName: schema.primaryKey.range.name, - AttributeType: schema.primaryKey.range.type.type, + AttributeType: getScalarAttributeType(schema.primaryKey.range.type.type, `Table ${schema.name} Range Attribute ${schema.primaryKey.range.name}`), }) params.KeySchema!.push({ @@ -95,7 +105,10 @@ export function createTableInput(schema: Schema, forCloudFormation = false): Cre if (params.AttributeDefinitions!.find((ad) => indexMetadata.range.name === ad.AttributeName) == null) { params.AttributeDefinitions!.push({ AttributeName: indexMetadata.range.name, - AttributeType: indexMetadata.range.type.type, + AttributeType: getScalarAttributeType( + indexMetadata.range.type.type, + `Table ${schema.name} Index ${indexMetadata.name} Range Attribute ${indexMetadata.range.name}`, + ), }) } @@ -103,9 +116,8 @@ export function createTableInput(schema: Schema, forCloudFormation = false): Cre IndexName: indexMetadata.name, KeySchema, Projection: { - ProjectionType: indexMetadata.projection == null ? 'ALL' : indexMetadata.projection, + ProjectionType: indexMetadata.projection ?? 'ALL', }, - // Projection: indexMetadata.projection, } if (indexMetadata.nonKeyAttributes != null && indexMetadata.nonKeyAttributes.length > 0) { @@ -131,16 +143,22 @@ export function createTableInput(schema: Schema, forCloudFormation = false): Cre if (params.AttributeDefinitions!.find((ad) => indexMetadata.hash.name === ad.AttributeName) == null) { params.AttributeDefinitions!.push({ AttributeName: indexMetadata.hash.name, - AttributeType: indexMetadata.hash.type.type, + AttributeType: getScalarAttributeType( + indexMetadata.hash.type.type, + `Table ${schema.name} Index ${indexMetadata.name} Hash Attribute ${indexMetadata.hash.name}`, + ), }) } if (indexMetadata.range != null) { // make sure the rangeKey is defined in the AttributeDefinitions - if (params.AttributeDefinitions!.find((ad) => (indexMetadata.range as Attribute).name === ad.AttributeName) == null) { + if (params.AttributeDefinitions!.find((ad) => indexMetadata.range!.name === ad.AttributeName) == null) { params.AttributeDefinitions!.push({ AttributeName: indexMetadata.range.name, - AttributeType: indexMetadata.range.type.type, + AttributeType: getScalarAttributeType( + indexMetadata.range.type.type, + `Table ${schema.name} Index ${indexMetadata.name} Range Attribute ${indexMetadata.range.name}`, + ), }) } @@ -151,13 +169,13 @@ export function createTableInput(schema: Schema, forCloudFormation = false): Cre } // by default, indexes will share the same throughput as the table - const throughput = indexMetadata.throughput == null ? schema.throughput : indexMetadata.throughput + const throughput = indexMetadata.throughput ?? schema.throughput const index: GlobalSecondaryIndex = { IndexName: indexMetadata.name, KeySchema, Projection: { - ProjectionType: indexMetadata.projection == null ? 'ALL' : indexMetadata.projection, + ProjectionType: indexMetadata.projection ?? 'ALL', }, } diff --git a/src/tables/create-table.ts b/src/tables/create-table.ts index 5c62736d..bfe5e2ba 100644 --- a/src/tables/create-table.ts +++ b/src/tables/create-table.ts @@ -1,5 +1,6 @@ import { type TableDescription, waitUntilTableExists } from '@aws-sdk/client-dynamodb' -import { type Schema } from './schema' + +import type { Schema } from './schema' export async function createTable(schema: Schema, waitForReady = true): Promise { const res = await schema.dynamo.createTable(schema.createTableInput()) @@ -29,5 +30,5 @@ export async function createTable(schema: Schema, waitForReady = true): Promise< } } - return res.TableDescription as TableDescription + return res.TableDescription! } diff --git a/src/tables/delete-table.ts b/src/tables/delete-table.ts index 899c68a8..eb80f9f1 100644 --- a/src/tables/delete-table.ts +++ b/src/tables/delete-table.ts @@ -1,5 +1,6 @@ -import { type TableDescription } from '@aws-sdk/client-dynamodb' -import { type Schema } from './schema' +import type { TableDescription } from '@aws-sdk/client-dynamodb' + +import type { Schema } from './schema' export async function deleteTable(schema: Schema): Promise { const res = await schema.dynamo.deleteTable({ TableName: schema.name }) diff --git a/src/tables/describe-table.ts b/src/tables/describe-table.ts index ad8b3371..0025708f 100644 --- a/src/tables/describe-table.ts +++ b/src/tables/describe-table.ts @@ -1,6 +1,7 @@ -import { type DescribeTableCommandInput, type TableDescription } from '@aws-sdk/client-dynamodb' -import { type Schema } from './schema' -import { type IRequestOptions } from '../connections' +import type { DescribeTableCommandInput, TableDescription } from '@aws-sdk/client-dynamodb' + +import type { IRequestOptions } from '../connections' +import type { Schema } from './schema' export async function describeTable(schema: Schema, requestOptions?: IRequestOptions): Promise { const params: DescribeTableCommandInput = { @@ -8,5 +9,5 @@ export async function describeTable(schema: Schema, requestOptions?: IRequestOpt } const result = await schema.dynamo.describeTable(params, requestOptions) - return result.Table as TableDescription + return result.Table! } diff --git a/src/tables/migrate-table.ts b/src/tables/migrate-table.ts index b4cf67da..5815e9cf 100644 --- a/src/tables/migrate-table.ts +++ b/src/tables/migrate-table.ts @@ -7,17 +7,18 @@ import { waitUntilTableExists, } from '@aws-sdk/client-dynamodb' import * as _ from 'lodash' + import { SchemaError } from '../errors' import { createTable } from './create-table' import { describeTable } from './describe-table' -import { type Schema } from './schema' +import type { Schema } from './schema' export async function migrateTable(schema: Schema, waitForReady = false): Promise { let description: TableDescription try { description = await describeTable(schema) - } catch (err) { + } catch (err: any) { if (err.name === 'ResourceNotFoundException') { return await createTable(schema, waitForReady) } else { @@ -60,7 +61,7 @@ export async function migrateTable(schema: Schema, waitForReady = false): Promis // assign a default value for NonKeyAttributes to prevent comparison issues, fixes #645 !_.isEqual({ NonKeyAttributes: undefined, ...oldIndex.Projection }, { NonKeyAttributes: undefined, ...newIndex.Projection }) ) { - const oldIndexName = oldIndex.IndexName == null ? '' : oldIndex.IndexName + const oldIndexName = oldIndex.IndexName ?? '' // you can only updated ProvisionedThroughput, which is useless to do on the DynamoDB development server // so really we want to verify we're not attempting to change an index's KeySchema or Projection, if we // are, error and warn developer… they need to rename the index so the old one is deleted diff --git a/src/tables/operations.ts b/src/tables/operations.ts new file mode 100644 index 00000000..8ec7b006 --- /dev/null +++ b/src/tables/operations.ts @@ -0,0 +1,10 @@ +import type { TableDescription } from '@aws-sdk/client-dynamodb' + +import type { ITable } from '../table' +import { createTable } from './create-table' +import { deleteTable } from './delete-table' + +export const TableOperations = { + createTable: async (table: ITable): Promise => await createTable(table.schema), + deleteTable: async (table: ITable): Promise => await deleteTable(table.schema), +} diff --git a/src/tables/properties.ts b/src/tables/properties.ts index e84b28eb..91e9b710 100644 --- a/src/tables/properties.ts +++ b/src/tables/properties.ts @@ -1,6 +1,6 @@ -import { type NumberSetValue } from '../metadata/attribute-types/number-set.metadata' -import { type StringSetValue } from '../metadata/attribute-types/string-set.metadata' -import { type Table } from '../table' +import type { NumberSetValue } from '../metadata/attribute-types/number-set.metadata' +import type { StringSetValue } from '../metadata/attribute-types/string-set.metadata' +import type { Table } from '../table' export type TableProperty = Exclude diff --git a/src/tables/schema.ts b/src/tables/schema.ts index 6446c49d..764d89e5 100644 --- a/src/tables/schema.ts +++ b/src/tables/schema.ts @@ -1,28 +1,29 @@ -import { type CreateTableInput, type DynamoDB } from '@aws-sdk/client-dynamodb' -import { type Attribute } from '../attribute' -import { type MapAttributeType } from '../decorator/attribute-types/map' +import type { CreateTableInput, DynamoDB } from '@aws-sdk/client-dynamodb' +import { last } from 'lodash' + +import type { Attribute } from '../attribute' +import Config from '../config' +import type { MapAttributeType } from '../decorator/attribute-types/map' import { SchemaError } from '../errors' -import { type AttributeMap, type IThroughput } from '../interfaces' +import type { AttributeMap, IThroughput } from '../interfaces' import type * as Metadata from '../metadata' import * as Query from '../query' -import { type ITable, type Table } from '../table' +import type { ITable, Table } from '../table' import { createTableInput } from './create-table-input' -import { last } from 'lodash' -import Config from '../config' export class Schema { public isDyngoose = true - public options: Metadata.Table + public options!: Metadata.Table /** * The TableName in DynamoDB */ public get name(): string { - return this.options?.name == null ? '' : this.options.name + return this.options.name ?? '' } // Default Index, which every table must have - public primaryKey: Metadata.Index.PrimaryKey + public primaryKey!: Metadata.Index.PrimaryKey public timeToLiveAttribute?: Attribute // Additional table indexes @@ -298,5 +299,7 @@ export class Schema { return attribute } } + + return undefined } } diff --git a/src/transaction.ts b/src/transaction.ts index 687285d6..3383f4b0 100644 --- a/src/transaction.ts +++ b/src/transaction.ts @@ -1,10 +1,11 @@ -import { type Delete, type DynamoDB, type Put, type TransactWriteItem, type TransactWriteItemsOutput } from '@aws-sdk/client-dynamodb' +import type { Delete, DynamoDB, Put, TransactWriteItem, TransactWriteItemsOutput } from '@aws-sdk/client-dynamodb' + import Config from './config' import { buildQueryExpression } from './query/expression' -import { type UpdateConditions } from './query/filters' +import type { UpdateConditions } from './query/filters' import { transactWrite } from './query/transact-write' import { getUpdateItemInput } from './query/update-item-input' -import { type Table } from './table' +import type { Table } from './table' export class Transaction { private dynamo: DynamoDB @@ -29,7 +30,7 @@ export class Transaction { * @see {@link https://github.com/benhutchins/dyngoose/blob/master/docs/Connections.md}. */ constructor(connection?: DynamoDB) { - this.dynamo = connection == null ? Config.defaultConnection.client : connection + this.dynamo = connection ?? Config.defaultConnection.client } public setConnection(dynamo: DynamoDB): this { @@ -120,7 +121,7 @@ export class Transaction { ConditionCheck: { TableName: tableClass.schema.name, Key: record.getDynamoKey(), - ConditionExpression: conditionExpression.FilterExpression as string, + ConditionExpression: conditionExpression.FilterExpression!, ExpressionAttributeNames: conditionExpression.ExpressionAttributeNames, ExpressionAttributeValues: conditionExpression.ExpressionAttributeValues, }, diff --git a/src/tsconfig.base.json b/src/tsconfig.base.json new file mode 100644 index 00000000..06614752 --- /dev/null +++ b/src/tsconfig.base.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "baseUrl": ".", + "paths": { + "dyngoose": ["./"], + "dyngoose/*": ["./*"] + } + }, + "include": ["./**/*.ts"], + "exclude": ["node_modules", "dist"] +} \ No newline at end of file diff --git a/src/tsconfig.cjs.json b/src/tsconfig.cjs.json new file mode 100644 index 00000000..e027e72a --- /dev/null +++ b/src/tsconfig.cjs.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "../dist/cjs", + "module": "commonjs", + "target": "ES2022" + } +} \ No newline at end of file diff --git a/src/tsconfig.cjs.spec.json b/src/tsconfig.cjs.spec.json new file mode 100644 index 00000000..65e7782b --- /dev/null +++ b/src/tsconfig.cjs.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.cjs.json", + /** + * this is pseudo config for test case's relative path resolution to `../src`, runs + * cjs config once more instead of manual copying to utilize incremental build. + */ + "compilerOptions": { + "outDir": "../dist/src" + } +} \ No newline at end of file diff --git a/src/tsconfig.esm.json b/src/tsconfig.esm.json new file mode 100644 index 00000000..8cfe899e --- /dev/null +++ b/src/tsconfig.esm.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "module": "esnext", + "target": "ES2022", + "outDir": "../dist/esm" + } +} \ No newline at end of file diff --git a/src/tsconfig.types.json b/src/tsconfig.types.json new file mode 100644 index 00000000..a03562d4 --- /dev/null +++ b/src/tsconfig.types.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.esm.json", + "compilerOptions": { + "composite": true, + "module": "es2015", + "target": "es2022", + "removeComments": false, + "declaration": true, + "declarationMap": true, + "declarationDir": "../dist/types", + "emitDeclarationOnly": true + } +} \ No newline at end of file diff --git a/src/tsconfig.types.spec.json b/src/tsconfig.types.spec.json new file mode 100644 index 00000000..23928687 --- /dev/null +++ b/src/tsconfig.types.spec.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.types.json", + "compilerOptions": { + "declarationDir": "../dist/types_spec", + "stripInternal": false + } +} \ No newline at end of file diff --git a/src/utils/cdk.ts b/src/utils/cdk.ts index 049fbf6d..d7283893 100644 --- a/src/utils/cdk.ts +++ b/src/utils/cdk.ts @@ -1,10 +1,12 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -import type { Construct } from 'constructs' import * as dynamodb from 'aws-cdk-lib/aws-dynamodb' +import type { Construct } from 'constructs' import { readdir } from 'fs/promises' import { isNil } from 'lodash' import { join } from 'path' -import { type IThroughputAutoScalingCapacity } from '../interfaces' + +import type { IThroughputAutoScalingCapacity } from '../interfaces' +import { Table } from '../table' import { DEFAULT_AUTOSCALING_MAX_CAPACITY, DEFAULT_AUTOSCALING_MIN_CAPACITY, @@ -12,8 +14,7 @@ import { DEFAULT_READ_CAPACITY, DEFAULT_WRITE_CAPACITY, } from '../tables/defaults' -import { Table } from '../table' -import { type Schema } from '../tables/schema' +import type { Schema } from '../tables/schema' export interface CreateCDKTablesInput { scope: Construct @@ -51,20 +52,20 @@ export function createCDKTable(scope: Construct, schema: Schema, tableProps: Par } if (tableProps.billingMode == null) { - if (schema.options.billingMode === 'PAY_PER_REQUEST') { + if (schema.options?.billingMode === 'PAY_PER_REQUEST') { tableProps.billingMode = dynamodb.BillingMode.PAY_PER_REQUEST - } else if (schema.options.billingMode === 'PROVISIONED') { + } else if (schema.options?.billingMode === 'PROVISIONED') { tableProps.billingMode = dynamodb.BillingMode.PROVISIONED tableProps.readCapacity = schema.throughput?.read ?? DEFAULT_READ_CAPACITY tableProps.writeCapacity = schema.throughput?.write ?? DEFAULT_WRITE_CAPACITY } } - if (tableProps.pointInTimeRecovery == null && schema.options.backup === true) { + if (tableProps.pointInTimeRecovery == null && schema.options?.backup === true) { tableProps.pointInTimeRecovery = true } - if (tableProps.encryption == null && schema.options.encrypted === true) { + if (tableProps.encryption == null && schema.options?.encrypted === true) { tableProps.encryption = dynamodb.TableEncryption.AWS_MANAGED } @@ -72,7 +73,7 @@ export function createCDKTable(scope: Construct, schema: Schema, tableProps: Par tableProps.timeToLiveAttribute = schema.timeToLiveAttribute.name } - if (tableProps.stream == null && schema.options.stream != null) { + if (tableProps.stream == null && schema.options?.stream != null) { if (typeof schema.options.stream === 'boolean') { tableProps.stream = dynamodb.StreamViewType.NEW_AND_OLD_IMAGES } else if (schema.options.stream.StreamViewType != null) { @@ -82,7 +83,7 @@ export function createCDKTable(scope: Construct, schema: Schema, tableProps: Par const table = new dynamodb.Table(scope, `${schema.name}Table`, tableProps as any) - if (schema.options.billingMode === 'PROVISIONED') { + if (schema.options?.billingMode === 'PROVISIONED') { let autoScaling = schema.throughput?.autoScaling if (autoScaling === true) { @@ -154,7 +155,7 @@ export async function createCDKTables(input: CreateCDKTablesInput): Promise = [] const resources: dynamodb.Table[] = [] - const log = input.log == null ? console.log : input.log + const log = input.log ?? console.log log('Running Dyngoose CDK generation utility…') for (const file of tableFiles) { diff --git a/src/utils/cloudformation.ts b/src/utils/cloudformation.ts index 93a41ee8..325e165e 100644 --- a/src/utils/cloudformation.ts +++ b/src/utils/cloudformation.ts @@ -2,6 +2,7 @@ import { readdir } from 'fs/promises' import * as _ from 'lodash' import { join } from 'path' + import { Table } from '../table' import type { MigrateTablesInput } from './migrate' @@ -9,9 +10,9 @@ export default async function createCloudFormationResources(input: MigrateTables const tableFiles = await readdir(input.tablesDirectory) const tables: Array = [] const resources: any = {} - const log = input.log == null ? console.log : input.log - const prefix = input.tableNamePrefix == null ? '' : input.tableNamePrefix - const suffix = input.tableNameSuffix == null ? '' : input.tableNameSuffix + const log = input.log ?? console.log + const prefix = input.tableNamePrefix ?? '' + const suffix = input.tableNameSuffix ?? '' log('Running Dyngoose CloudFormation template generation utility…') for (const file of tableFiles) { @@ -31,7 +32,7 @@ export default async function createCloudFormationResources(input: MigrateTables const properties = SomeTable.schema.createCloudFormationResource() const tableName = properties.TableName as string let resourceName: string - if (typeof SomeTable.schema.options.cloudFormationResourceName === 'string') { + if (typeof SomeTable.schema.options?.cloudFormationResourceName === 'string') { resourceName = SomeTable.schema.options.cloudFormationResourceName } else { resourceName = _.upperFirst(SomeTable.name) diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 00000000..aa6392d5 --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,10 @@ +export * from './cdk' +export * from './cloudformation' +export * from './is' +export * from './is-number' +export * from './migrate' +export * from './number-to-string' +export * from './require-hash-key-equals-operator' +export * from './seed' +export * from './string-to-number' +export * from './truly-empty' diff --git a/src/utils/is-number.ts b/src/utils/is-number.ts new file mode 100644 index 00000000..2c4ed560 --- /dev/null +++ b/src/utils/is-number.ts @@ -0,0 +1,5 @@ +export function isNumber(value: any): value is number { + const type = typeof value + return type === 'number' || type === 'bigint' +} + diff --git a/src/utils/migrate.ts b/src/utils/migrate.ts index 749e8cd2..7c05ea25 100644 --- a/src/utils/migrate.ts +++ b/src/utils/migrate.ts @@ -2,7 +2,8 @@ import { readdirSync } from 'fs' import * as _ from 'lodash' import { join } from 'path' -import { type Table } from '../table' + +import type { Table } from '../table' import { isDyngooseTableClass } from './is' export interface MigrateTablesInput { @@ -22,9 +23,9 @@ export interface MigrateTablesInput { export default async function migrateTables(input: MigrateTablesInput): Promise { const tableFiles = readdirSync(input.tablesDirectory) const tables: Array = [] - const log = input.log == null ? console.log : input.log - const prefix = input.tableNamePrefix == null ? '' : input.tableNamePrefix - const suffix = input.tableNameSuffix == null ? '' : input.tableNameSuffix + const log = input.log ?? console.log + const prefix = input.tableNamePrefix ?? '' + const suffix = input.tableNameSuffix ?? '' log('Running Dyngoose migration utility…') for (const file of tableFiles) { diff --git a/src/utils/number-to-string.ts b/src/utils/number-to-string.ts new file mode 100644 index 00000000..f403e913 --- /dev/null +++ b/src/utils/number-to-string.ts @@ -0,0 +1,3 @@ +export function numberToString(number: number | bigint): string { + return number.toString() +} diff --git a/src/utils/require-hash-key-equals-operator.ts b/src/utils/require-hash-key-equals-operator.ts new file mode 100644 index 00000000..9f854f28 --- /dev/null +++ b/src/utils/require-hash-key-equals-operator.ts @@ -0,0 +1,15 @@ +import { isArray } from 'lodash' + +import { QueryError } from '../errors' +import type { Filters } from '../query/filters' +import type { Table } from '../table' + +export function requireHashKeyEqualsOperator(filters: Filters, propertyName: string): void { + const hashPropertyName = propertyName as keyof typeof filters + + if (filters?.[hashPropertyName] == null) { + throw new QueryError('Cannot perform a query on the PrimaryKey Index or a GlobalSecondaryIndex without specifying a hash key value') + } else if (isArray(filters[hashPropertyName]) && filters[hashPropertyName][0] !== '=') { + throw new QueryError('DynamoDB only supports using equal operator for the HASH key') + } +} diff --git a/src/utils/seed.ts b/src/utils/seed.ts index 50ce4d9e..bdfd80d8 100644 --- a/src/utils/seed.ts +++ b/src/utils/seed.ts @@ -2,6 +2,7 @@ import { readdir, readFile } from 'fs/promises' import * as _ from 'lodash' import { join } from 'path' + import type { PrimaryKey } from '../query' import type { Table } from '../table' import { isDyngooseTableClass } from './is' @@ -13,7 +14,7 @@ export interface SeedTablesInput extends MigrateTablesInput { } export default async function seedTables(input: SeedTablesInput): Promise { - const log = input.log == null ? console.log : input.log + const log = input.log ?? console.log const seedFiles = await readdir(input.seedsDirectory) const tableFileSuffix = input.tableFileSuffix.substr(0, 1) === '.' ? input.tableFileSuffix : `.${input.tableFileSuffix}` @@ -45,8 +46,8 @@ export default async function seedTables(input: SeedTablesInput): Promise if (records.length > 0) { const modelName = file.replace(/.seed.(json|js)/, '') const modelPath = join(input.tablesDirectory, `${modelName}${tableFileSuffix}`) - const prefix = input.tableNamePrefix == null ? '' : input.tableNamePrefix - const suffix = input.tableNameSuffix == null ? '' : input.tableNameSuffix + const prefix = input.tableNamePrefix ?? '' + const suffix = input.tableNameSuffix ?? '' log(`Seeding ${modelName}`) @@ -61,7 +62,7 @@ export default async function seedTables(input: SeedTablesInput): Promise for (const data of records) { if (input.preventDuplication === true) { const hashKey = ExportedTable.schema.primaryKey.hash.name - const rangeKey = ExportedTable.schema.primaryKey.range == null ? null : ExportedTable.schema.primaryKey.range.name + const rangeKey = ExportedTable.schema.primaryKey.range?.name const primaryKey = (ExportedTable as any)[ExportedTable.schema.primaryKey.propertyName] as PrimaryKey const existingRecord = await primaryKey.get(data[hashKey], rangeKey == null ? undefined : data[rangeKey]) diff --git a/src/utils/string-to-number.ts b/src/utils/string-to-number.ts new file mode 100644 index 00000000..99846ee6 --- /dev/null +++ b/src/utils/string-to-number.ts @@ -0,0 +1,7 @@ +export function stringToNumber(number: number | string): number { + if (typeof number === 'number') { + return number + } else { + return JSON.parse(number) + } +} diff --git a/tools/create-esm-package.js b/tools/create-esm-package.js new file mode 100644 index 00000000..b8c3cca8 --- /dev/null +++ b/tools/create-esm-package.js @@ -0,0 +1,15 @@ +const { readdir, writeFile } = require('fs/promises') +const path = require('path') + +const buildDir = './build' +async function createEsmModulePackageJson() { + const dirs = await readdir(buildDir) + for (const dir of dirs) { + if (dir === 'esm') { + const packageJsonFile = path.join(buildDir, dir, '/package.json') + await writeFile(packageJsonFile, '{"type": "module"}', 'utf8') + } + } +} + +createEsmModulePackageJson().then(() => {}, (err) => { throw err }) diff --git a/tsconfig.json b/tsconfig.json index 85b2a54f..b353f339 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,18 +1,29 @@ { "compilerOptions": { - "module": "commonjs", - "target": "es2019", - "noImplicitAny": true, + "incremental": true, + "removeComments": true, + "preserveConstEnums": true, "sourceMap": true, - "declaration": true, - "outDir": "lib", + "strict": true, + "strictNullChecks": true, + "moduleResolution": "node", + "stripInternal": true, + "noEmit": true, + "lib": ["esnext", "dom"], + "target": "esnext", + "baseUrl": ".", "emitDecoratorMetadata": true, "experimentalDecorators": true, "esModuleInterop": true, - "strictNullChecks": true, - "moduleResolution": "node" - }, - "include": [ - "src" - ] + "allowSyntheticDefaultImports": true, + // "isolatedModules": true, + "paths": { + "dyngoose": ["./src/index"], + "dyngoose/decorator": ["./src/decorator/index"], + "dyngoose/errors": ["./src/errors/index"], + "dyngoose/query": ["./src/query/index"], + "dyngoose/utils": ["./src/utils/index"], + "dyngoose/internal/*": ["./src/internal/*"] + } + } } \ No newline at end of file diff --git a/tsconfig.mocha.json b/tsconfig.mocha.json new file mode 100644 index 00000000..c1e594c4 --- /dev/null +++ b/tsconfig.mocha.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "strictPropertyInitialization": false + }, + "ts-node": { + "transpileOnly": true + } +} \ No newline at end of file