From 4e8189ae010aadbff9fb35ee4b3861b5e29992c4 Mon Sep 17 00:00:00 2001 From: Max Hauser Date: Mon, 23 Sep 2024 09:38:11 +0200 Subject: [PATCH] [chore]: port to official `@iobroker/eslint-config` config (#2898) * port to official eslint config * cleanup * move jszip in correct package * try to fix build * pack lock update * update tsd * move tsd to global pack as dev dep * fix tsd and ignore build for eslint * fix build * fix type tests * upgrade to 0.1.4 * update to 0.1.5 * fix rest of lint errors * fix install without override --- .eslintrc.json | 299 - .github/workflows/ci-tests.yml | 4 +- .github/workflows/nightly-dev-release.yml | 8 +- .github/workflows/official-release.yml | 8 +- .prettierrc.json | 12 - eslint.config.mjs | 16 + package-lock.json | 34654 ++++++++-------- package.json | 9 +- packages/adapter/src/lib/_Types.ts | 21 +- packages/adapter/src/lib/adapter/adapter.ts | 1611 +- packages/adapter/src/lib/adapter/constants.ts | 4 +- .../adapter/src/lib/adapter/defaultObjs.ts | 14 +- .../userInterfaceMessagingController.ts | 6 +- packages/adapter/src/lib/adapter/utils.ts | 4 +- packages/adapter/src/lib/adapter/validator.ts | 58 +- packages/cli/package.json | 1 + packages/cli/src/lib/_Types.ts | 2 +- packages/cli/src/lib/cli/cliCert.ts | 6 +- packages/cli/src/lib/cli/cliCompact.ts | 32 +- packages/cli/src/lib/cli/cliDebug.ts | 4 +- packages/cli/src/lib/cli/cliHost.ts | 12 +- packages/cli/src/lib/cli/cliLogs.ts | 8 +- packages/cli/src/lib/cli/cliObjects.ts | 109 +- packages/cli/src/lib/cli/cliPlugin.ts | 20 +- packages/cli/src/lib/cli/cliProcess.ts | 57 +- packages/cli/src/lib/cli/cliStates.ts | 23 +- packages/cli/src/lib/cli/cliTools.ts | 6 +- packages/cli/src/lib/cli/messages.ts | 28 +- packages/cli/src/lib/setup.ts | 776 +- packages/cli/src/lib/setup/dbConnection.ts | 52 +- packages/cli/src/lib/setup/formatters.ts | 8 +- packages/cli/src/lib/setup/multihostClient.ts | 21 +- packages/cli/src/lib/setup/pluginInfos.ts | 8 +- packages/cli/src/lib/setup/setupBackup.ts | 80 +- packages/cli/src/lib/setup/setupInstall.ts | 217 +- packages/cli/src/lib/setup/setupLicense.ts | 4 +- packages/cli/src/lib/setup/setupList.ts | 122 +- packages/cli/src/lib/setup/setupMultihost.ts | 48 +- .../cli/src/lib/setup/setupPacketManager.ts | 28 +- packages/cli/src/lib/setup/setupRepo.ts | 34 +- packages/cli/src/lib/setup/setupSetup.ts | 152 +- packages/cli/src/lib/setup/setupUpgrade.ts | 174 +- packages/cli/src/lib/setup/setupUpload.ts | 67 +- packages/cli/src/lib/setup/setupUsers.ts | 386 +- packages/cli/src/lib/setup/setupVendor.ts | 12 +- packages/cli/src/lib/setup/setupVisDebug.ts | 2 +- packages/cli/src/lib/setup/utils.ts | 10 +- .../src/lib/common/aliasProcessing.ts | 9 +- .../common-db/src/lib/common/exitCodes.ts | 2 +- .../common-db/src/lib/common/interview.ts | 6 +- packages/common-db/src/lib/common/logger.ts | 39 +- .../src/lib/common/maybeCallback.test.ts | 27 +- .../common-db/src/lib/common/maybeCallback.ts | 15 +- packages/common-db/src/lib/common/password.ts | 16 +- packages/common-db/src/lib/common/tools.ts | 590 +- packages/common/package.json | 3 +- packages/common/src/index.ts | 4 +- .../src/lib/common/notificationHandler.ts | 46 +- packages/common/src/lib/common/objects.ts | 4 +- packages/common/src/lib/common/states.ts | 4 +- packages/common/src/lib/common/tools.ts | 4 +- packages/common/src/lib/common/zipFiles.ts | 24 +- packages/controller/package.json | 1 - .../src/lib/adapterAutoUpgradeManager.ts | 32 +- .../src/lib/adapterUpgradeManager.ts | 12 +- .../controller/src/lib/blocklistManager.ts | 6 +- .../controller/src/lib/multihostServer.js | 61 +- packages/controller/src/lib/objects.ts | 110 +- .../src/lib/objects/objectsInMemServer.ts | 2 +- .../controller/src/lib/preinstallCheck.ts | 14 +- packages/controller/src/lib/restart.ts | 4 +- .../src/lib/states/statesInMemServer.ts | 2 +- packages/controller/src/lib/upgradeManager.ts | 14 +- packages/controller/src/lib/vis/states.ts | 2 +- packages/controller/src/lib/vis/visUtils.js | 24 +- packages/controller/src/main.ts | 1139 +- packages/controller/test/.eslintrc | 6 - .../jsonl/testAdapterObjectsInFileJsonl.ts | 24 +- .../jsonl/testAdapterStatesInFilesJsonl.ts | 12 +- packages/controller/test/lib/permissions.ts | 2 +- .../controller/test/lib/setup4controller.ts | 20 +- packages/controller/test/lib/testAdapter.ts | 163 +- .../controller/test/lib/testAdapterHelpers.ts | 125 +- packages/controller/test/lib/testAliases.ts | 358 +- packages/controller/test/lib/testConsole.ts | 66 +- packages/controller/test/lib/testFiles.ts | 60 +- .../controller/test/lib/testHelperStates.ts | 6 +- packages/controller/test/lib/testMessages.ts | 20 +- packages/controller/test/lib/testObjects.ts | 128 +- .../controller/test/lib/testObjectsACL.ts | 131 +- .../test/lib/testObjectsFunctions.ts | 595 +- packages/controller/test/lib/testStates.ts | 296 +- .../redis-sentinel/testAdapterStatesRedis.ts | 16 +- .../test/redis-sentinel/testStatesRedis.ts | 18 +- .../redis-socket/testAdapterStatesRedis.ts | 16 +- .../test/redis-socket/testStatesRedis.ts | 8 +- .../test/testAdapterObjectsInFile.ts | 20 +- .../test/testAdapterObjectsInRedis.ts | 26 +- .../test/testAdapterStatesInFile.ts | 12 +- .../controller/test/testAdapterStatesRedis.ts | 14 +- .../controller/test/testInternalUtilities.ts | 20 +- packages/controller/test/testPackageFiles.ts | 36 +- packages/controller/test/testStates.ts | 26 +- packages/controller/test/testStatesRedis.ts | 26 +- packages/controller/test/testTools.ts | 2 +- packages/controller/test/tsconfig.json | 3 - packages/db-base/src/lib/inMemFileDB.ts | 40 +- packages/db-base/src/lib/redisHandler.ts | 10 +- .../src/lib/objects/objectsInMemFileDB.js | 93 +- .../lib/objects/objectsInMemServerClass.js | 2 +- .../lib/objects/objectsInMemServerRedis.js | 142 +- .../src/lib/objects/objectsInMemJsonlDB.js | 59 +- .../lib/objects/objectsInMemServerClass.js | 2 +- .../lib/objects/objectsInMemServerRedis.js | 140 +- .../src/lib/objects/constants.ts | 2 +- .../src/lib/objects/objectsInRedisClient.ts | 1159 +- .../src/lib/objects/objectsUtils.ts | 85 +- .../src/lib/states/statesInMemFileDB.js | 24 +- .../src/lib/states/statesInMemServerClass.js | 2 +- .../src/lib/states/statesInMemServerRedis.js | 73 +- .../src/lib/states/statesInMemJsonlDB.js | 59 +- .../src/lib/states/statesInMemServerClass.js | 2 +- .../src/lib/states/statesInMemServerRedis.js | 50 +- .../src/lib/states/statesInRedisClient.ts | 172 +- packages/types-dev/index.d.ts | 17 +- packages/types-dev/objects.d.ts | 2 +- packages/types-public/build.ts | 4 +- packages/types-public/index.test-d.ts | 122 +- packages/types-public/package.json | 6 +- prettier.config.mjs | 3 + schemas/updateSchemas.ts | 2 +- tsconfig.json | 1 + 132 files changed, 23708 insertions(+), 22273 deletions(-) delete mode 100644 .eslintrc.json delete mode 100644 .prettierrc.json create mode 100644 eslint.config.mjs delete mode 100644 packages/controller/test/.eslintrc delete mode 100644 packages/controller/test/tsconfig.json create mode 100644 prettier.config.mjs diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 7cc2b00fb9..0000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,299 +0,0 @@ -{ - "env": { - "es6": true, - "node": true - }, - "extends": [ - "eslint:recommended", - "plugin:prettier/recommended" - ], - "plugins": [ - "unicorn" - ], - "ignorePatterns": [ - "**/doc", - "**/build" - ], - "reportUnusedDisableDirectives": true, - "rules": { - "curly": "error", - "brace-style": "error", - "arrow-parens": [ - "error", - "as-needed" - ], - "no-console": "off", - "no-unused-vars": [ - "error", - { - "argsIgnorePattern": "^_", - "caughtErrors": "all" - } - ], - "no-useless-escape": "warn", - "no-constant-condition": "off", - "no-multiple-empty-lines": [ - "error", - { - "max": 1, - "maxEOF": 1 - } - ], - "no-var": "error", - "prefer-const": "error", - "no-throw-literal": "error", - "prefer-promise-reject-errors": "error", - "require-await": "error", - "no-return-await": "error", - "eqeqeq": [ - "error", - "always" - ], - "quotes": [ - "error", - "single", - { - "avoidEscape": true, - "allowTemplateLiterals": true - } - ], - "semi": [ - "error", - "always" - ], - "comma-dangle": [ - "error", - { - "arrays": "never", - "objects": "never", - "imports": "never", - "exports": "never", - "functions": "ignore" - } - ], - "no-trailing-spaces": "error", - "prettier/prettier": "error", - "no-nested-ternary": "off", - "no-unneeded-ternary": "error", - "unicorn/prefer-module": "error", - "unicorn/prefer-node-protocol": "error" - }, - "parserOptions": { - "sourceType": "module", - "ecmaVersion": 2022 - }, - "overrides": [ - { - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 2021, - "sourceType": "module", - "project": "./tsconfig.json" - }, - "files": [ - "**/*.ts", - "**/*.cts", - "**/*.mts", - "**/*.tsx" - ], - "extends": [ - "plugin:@typescript-eslint/recommended", - "plugin:jsdoc/recommended-typescript" - ], - "rules": { - "jsdoc/require-returns": 0, - "jsdoc/tag-lines": ["error", "never", { "startLines": 1 }], - "jsdoc/no-blank-blocks": ["error", { "enableFixer": true }], - "@typescript-eslint/no-parameter-properties": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-use-before-define": [ - "error", - { - "functions": false, - "typedefs": false, - "classes": false - } - ], - "@typescript-eslint/no-unused-vars": [ - "error", - { - "ignoreRestSiblings": true, - "argsIgnorePattern": "^_", - "caughtErrors": "all" - } - ], - "@typescript-eslint/no-object-literal-type-assertion": "off", - "@typescript-eslint/interface-name-prefix": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-inferrable-types": [ - "error", - { - "ignoreProperties": true, - "ignoreParameters": true - } - ], - "@typescript-eslint/ban-ts-comment": [ - "error", - { - "ts-expect-error": false, - "ts-ignore": true, - "ts-nocheck": true, - "ts-check": false - } - ], - "@typescript-eslint/restrict-template-expressions": [ - "error", - { - "allowNumber": true, - "allowBoolean": true, - "allowAny": true, - "allowNullish": true - } - ], - "@typescript-eslint/no-misused-promises": [ - "error", - { - "checksVoidReturn": false - } - ], - "@typescript-eslint/explicit-function-return-type": [ - "error", - { - "allowTypedFunctionExpressions": true, - "allowExpressions": true - } - ], - "@typescript-eslint/no-unsafe-argument": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/no-unsafe-member-access": "off", - "@typescript-eslint/no-unsafe-return": "off", - "@typescript-eslint/no-unsafe-call": "off", - "@typescript-eslint/no-implied-eval": "off", - "@typescript-eslint/explicit-module-boundary-types": [ - "error", - { - "allowArgumentsExplicitlyTypedAsAny": true - } - ], - "@typescript-eslint/no-this-alias": "off", - "dot-notation": "off", - "@typescript-eslint/dot-notation": [ - "error", - { - "allowPrivateClassPropertyAccess": true, - "allowProtectedClassPropertyAccess": true - } - ], - "@typescript-eslint/no-unsafe-declaration-merging": "off", - "quote-props": [ - "error", - "as-needed" - ], - "@typescript-eslint/consistent-type-imports": "error", - "@typescript-eslint/consistent-type-exports": "error" - } - }, - { - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 2019, - "sourceType": "module", - "project": "./tsconfig.json" - }, - "files": [ - "**/*.test-d.ts" - ], - "extends": [ - "plugin:@typescript-eslint/recommended" - ], - "rules": { - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-parameter-properties": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-use-before-define": [ - "error", - { - "functions": false, - "typedefs": false, - "classes": false - } - ], - "@typescript-eslint/no-unused-vars": [ - "off", - { - "ignoreRestSiblings": true, - "argsIgnorePattern": "^_" - } - ], - "@typescript-eslint/no-object-literal-type-assertion": "off", - "@typescript-eslint/interface-name-prefix": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-inferrable-types": [ - "error", - { - "ignoreProperties": true, - "ignoreParameters": true - } - ], - "@typescript-eslint/ban-ts-comment": [ - "error", - { - "ts-expect-error": false, - "ts-ignore": true, - "ts-nocheck": true, - "ts-check": false - } - ], - "@typescript-eslint/explicit-function-return-type": [ - "error", - { - "allowTypedFunctionExpressions": true, - "allowExpressions": true - } - ], - "@typescript-eslint/restrict-template-expressions": [ - "error", - { - "allowNumber": true, - "allowBoolean": true, - "allowAny": true, - "allowNullish": true - } - ], - "@typescript-eslint/no-misused-promises": [ - "error", - { - "checksVoidReturn": false - } - ], - "@typescript-eslint/no-unsafe-argument": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/no-unsafe-member-access": "off", - "@typescript-eslint/no-unsafe-return": "off", - "@typescript-eslint/no-unsafe-call": "off", - "@typescript-eslint/no-implied-eval": "off", - "@typescript-eslint/explicit-module-boundary-types": [ - "warn", - { - "allowArgumentsExplicitlyTypedAsAny": true - } - ], - "@typescript-eslint/no-this-alias": "off", - "dot-notation": "off", - "@typescript-eslint/dot-notation": [ - "error", - { - "allowPrivateClassPropertyAccess": true, - "allowProtectedClassPropertyAccess": true - } - ], - "quote-props": [ - "error", - "as-needed" - ], - "@typescript-eslint/consistent-type-imports": "error", - "@typescript-eslint/consistent-type-exports": "error" - } - } - ] -} \ No newline at end of file diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml index 62dae1ad76..cf4d289d40 100644 --- a/.github/workflows/ci-tests.yml +++ b/.github/workflows/ci-tests.yml @@ -25,10 +25,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Use Node.js 18 + - name: Use Node.js uses: actions/setup-node@v4 with: - node-version: 18 + node-version-file: '.nvmrc' - name: NPM install run: npm i --ignore-scripts # install typescript and @types do not `setup first` diff --git a/.github/workflows/nightly-dev-release.yml b/.github/workflows/nightly-dev-release.yml index 0f956b51c5..658cc4873b 100644 --- a/.github/workflows/nightly-dev-release.yml +++ b/.github/workflows/nightly-dev-release.yml @@ -9,20 +9,16 @@ jobs: publish-config: runs-on: ubuntu-20.04 - strategy: - matrix: - node: [18.x] # This should be LTS - steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 # Fetch the history, or this action won't work - - name: Use Node.js ${{ matrix.node }} + - name: Use Node.js uses: actions/setup-node@v4 with: - node-version: ${{ matrix.node }} + node-version-file: '.nvmrc' - name: Detect changes (git) id: changes diff --git a/.github/workflows/official-release.yml b/.github/workflows/official-release.yml index 7cee35177a..3c76506303 100644 --- a/.github/workflows/official-release.yml +++ b/.github/workflows/official-release.yml @@ -17,20 +17,16 @@ jobs: publish-config: runs-on: ubuntu-20.04 - strategy: - matrix: - node: [18.x] # This should be LTS - steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 # Fetch the history, or this action won't work - - name: Use Node.js ${{ matrix.node }} + - name: Use Node.js uses: actions/setup-node@v4 with: - node-version: ${{ matrix.node }} + node-version-file: '.nvmrc' - name: Prepare installation uses: ./.github/actions/install-redis-linux diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index f45187bd91..0000000000 --- a/.prettierrc.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "printWidth": 120, - "semi": true, - "tabWidth": 4, - "useTabs": false, - "trailingComma": "none", - "singleQuote": true, - "endOfLine": "lf", - "bracketSpacing": true, - "arrowParens": "avoid", - "quoteProps": "as-needed" -} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..c781bbdb25 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,16 @@ +import config, { esmConfig } from '@iobroker/eslint-config'; + +export default [ + { + ignores: ['**/build/*'], + }, + ...config, + ...esmConfig, + { + files: ['**/*.test-d.ts'], + rules: { + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-base-to-string': 'off', + }, + }, +]; diff --git a/package-lock.json b/package-lock.json index 2174d36228..03435e5376 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16374 +1,18288 @@ { - "name": "iobroker.js-controller-mono", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "iobroker.js-controller-mono", - "hasInstallScript": true, - "workspaces": [ - "packages/*" - ], - "dependencies": { - "@iobroker/db-base": "file:packages/db-base", - "@iobroker/db-objects-file": "file:packages/db-objects-file", - "@iobroker/db-objects-jsonl": "file:packages/db-objects-jsonl", - "@iobroker/db-objects-redis": "file:packages/db-objects-redis", - "@iobroker/db-states-file": "file:packages/db-states-file", - "@iobroker/db-states-jsonl": "file:packages/db-states-jsonl", - "@iobroker/db-states-redis": "file:packages/db-states-redis", - "@iobroker/js-controller-adapter": "file:packages/adapter", - "@iobroker/js-controller-cli": "file:packages/cli", - "@iobroker/js-controller-common": "file:packages/common", - "@iobroker/js-controller-common-db": "file:packages/common-db", - "iobroker.js-controller": "file:packages/controller" - }, - "devDependencies": { - "@alcalzone/esm2cjs": "^1.1.2", - "@alcalzone/release-script": "~3.8.0", - "@alcalzone/release-script-plugin-iobroker": "~3.7.0", - "@alcalzone/release-script-plugin-lerna": "~3.7.0", - "@alcalzone/release-script-plugin-license": "~3.5.0", - "@alcalzone/release-script-plugin-manual-review": "~3.5.9", - "@iobroker/types": "file:packages/types-public", - "@iobroker/types-dev": "file:packages/types-dev", - "@microsoft/api-extractor": "^7.43.0", - "@tsconfig/node18": "^18.2.2", - "@types/chai": "^4.3.3", - "@types/chai-as-promised": "^7.1.5", - "@types/debug": "^4.1.12", - "@types/event-stream": "^4.0.0", - "@types/fs-extra": "^11.0.1", - "@types/ioredis": "^4.28.10", - "@types/jsonwebtoken": "^8.5.9", - "@types/mime-types": "^2.1.1", - "@types/mocha": "^10.0.6", - "@types/node": "^18.19.31", - "@types/node-forge": "^1.3.0", - "@types/node-schedule": "^2.1.0", - "@types/pidusage": "^2.0.2", - "@types/prompt": "^1.1.5", - "@types/readline-sync": "^1.4.4", - "@types/semver": "^7.3.10", - "@types/sinon": "^10.0.13", - "@types/sinon-chai": "^3.2.9", - "@types/tar": "^6.1.3", - "@types/triple-beam": "^1.3.5", - "@types/winston-syslog": "^2.4.0", - "@types/yargs": "^17.0.8", - "@typescript-eslint/eslint-plugin": "^6.18.1", - "@typescript-eslint/parser": "^6.18.1", - "chai": "^4.3.4", - "chai-as-promised": "^7.1.1", - "cpy-cli": "^4.2.0", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-jsdoc": "^48.2.7", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-unicorn": "^52.0.0", - "fs-extra": "^11.1.0", - "lerna": "^7.1.4", - "mocha": "^10.4.0", - "prettier": "^3.0.1", - "semver": "^7.5.2", - "sinon": "^15.0.0", - "sinon-chai": "^3.7.0", - "ts-json-schema-generator": "~1.2.0", - "ts-node": "^10.9.2", - "tsc-alias": "^1.8.8", - "typedoc": "^0.25.12", - "typedoc-plugin-markdown": "^3.17.1", - "typedoc-plugin-missing-exports": "^2.2.0", - "typescript": "~5.4.2" - } - }, - "node_modules/@alcalzone/esbuild-register": { - "version": "2.5.1-1", - "resolved": "https://registry.npmjs.org/@alcalzone/esbuild-register/-/esbuild-register-2.5.1-1.tgz", - "integrity": "sha512-u19/K/ZaiWQhYIQZeF2FImUeJDiMD4i2h7qPdU0HVFCxoQynye59N4oy6EvjxeXaxLnGkppcb5KKeiYD4cT1iQ==", - "license": "MIT", - "dependencies": { - "esbuild": "^0.11.5", - "jsonc-parser": "^3.0.0" - } - }, - "node_modules/@alcalzone/esbuild-register/node_modules/esbuild": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", - "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - } - }, - "node_modules/@alcalzone/esm2cjs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@alcalzone/esm2cjs/-/esm2cjs-1.1.2.tgz", - "integrity": "sha512-rxl3YvaWp+4RlTLKrs8xjP4ZXA07m0mQTywQMRWmhUhfeqOnymEOwT6WKbR71LJUy0grgbe5T/SCsF6aYoqbig==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.15.5", - "fs-extra": "^10.1.0", - "tiny-glob": "^0.2.9", - "yargs": "^17.5.1" - }, - "bin": { - "esm2cjs": "bin/esm2cjs.js" - } - }, - "node_modules/@alcalzone/esm2cjs/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@alcalzone/jsonl-db": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@alcalzone/jsonl-db/-/jsonl-db-3.1.1.tgz", - "integrity": "sha512-1ezCM6Od1vW3uT+ALLkAg0vN+MZtib18k1A+JPvLTm55tb4Lj9PsF4x3o9mBI102/nRAI3FpkEzLJAeZlkXdDA==", - "license": "MIT", - "dependencies": { - "@alcalzone/proper-lockfile": "^4.1.3-0", - "alcalzone-shared": "^4.0.8", - "fs-extra": "^10.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@alcalzone/jsonl-db/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@alcalzone/pak": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@alcalzone/pak/-/pak-0.10.2.tgz", - "integrity": "sha512-v+kM7HlfIVNLDlGBcbZvrG3yVK3rPLH5kIoGRJbCcoHwpUqQbfEMzXAy1ZrfP+zbI5phHw2PhgrXZr3z6nh7Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "axios": "^1.6.2", - "execa": "~5.0.1", - "fs-extra": "^10.1.0", - "semver": "^7.3.7", - "tiny-glob": "^0.2.9" - } - }, - "node_modules/@alcalzone/pak/node_modules/execa": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.1.tgz", - "integrity": "sha512-4hFTjFbFzQa3aCLobpbPJR/U+VoL1wdV5ozOWjeet0AWDeYr9UFGM1eUFWHX+VtOWFq4p0xXUXfW1YxUaP4fpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/@alcalzone/pak/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@alcalzone/proper-lockfile": { - "version": "4.1.3-0", - "resolved": "https://registry.npmjs.org/@alcalzone/proper-lockfile/-/proper-lockfile-4.1.3-0.tgz", - "integrity": "sha512-8mlX3l5Xc+pYyiK9G156NyMosNuvvukL+TtNMqw7ti2zgVpz+WqPMPb2J1WU8I03Jbm4cXF+Q0D53hWvQqLQ0Q==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/@alcalzone/release-script": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@alcalzone/release-script/-/release-script-3.8.0.tgz", - "integrity": "sha512-9H3imn8o9n3Ekpkie9TMgPeJfgT6WmklCMtOZ1wuwvMw/obNA0Ao1ZZ8CJfHk1YNjiLGmWn0kQFEGTqz4DoD7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alcalzone/release-script-core": "3.7.0", - "@alcalzone/release-script-plugin-changelog": "3.7.0", - "@alcalzone/release-script-plugin-exec": "3.7.0", - "@alcalzone/release-script-plugin-git": "3.8.0", - "@alcalzone/release-script-plugin-package": "3.7.3", - "@alcalzone/release-script-plugin-version": "3.7.0", - "alcalzone-shared": "^4.0.1", - "axios": "^1.6.2", - "enquirer": "^2.3.6", - "fs-extra": "^10.1.0", - "picocolors": "1.0.0", - "semver": "^7.5.2", - "source-map-support": "^0.5.21", - "yargs": "^17.4.1" - }, - "bin": { - "release-script": "bin/release.js" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@alcalzone/release-script-core": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@alcalzone/release-script-core/-/release-script-core-3.7.0.tgz", - "integrity": "sha512-4np4dBziwX/aNRhS/gpK8bwa0wpLe7oomzJ7YTUXf5bUtV/UTpN2a9tm5Bp7ElnisKj6N3AqHl4lVXRo4L9hYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.1.1" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@alcalzone/release-script-plugin-changelog": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-changelog/-/release-script-plugin-changelog-3.7.0.tgz", - "integrity": "sha512-AlLOIjIPP42uBmvcdYkfijYDzolyY6JmfbTmdxQDBLyrgYXnuUr2GaKxbpeWSbvcAuUhNvHCAyI6LI90X3OTEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alcalzone/release-script-core": "3.7.0", - "alcalzone-shared": "^4.0.1", - "fs-extra": "^10.1.0" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@alcalzone/release-script-plugin-changelog/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@alcalzone/release-script-plugin-exec": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-exec/-/release-script-plugin-exec-3.7.0.tgz", - "integrity": "sha512-ZhlKGhxa71mLyYB1/ojzik2RKcSAeIjuwKzlWRd6oUvKoZPe7eAjLYneXx5viQC6tvDJE4dvN1NlkFGWsSlZYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alcalzone/release-script-core": "3.7.0", - "alcalzone-shared": "^4.0.1" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@alcalzone/release-script-plugin-git": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-git/-/release-script-plugin-git-3.8.0.tgz", - "integrity": "sha512-rI9EqSmvMWaNZ5xxOUBZjD4WOv1Enl+/ZxhUoTROq+K/9RYYHQaAXilGWNvnz2DYr14Q+Yx/fs54GXgAVf0scg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alcalzone/release-script-core": "3.7.0", - "fs-extra": "^10.1.0" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@alcalzone/release-script-plugin-git/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@alcalzone/release-script-plugin-iobroker": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-iobroker/-/release-script-plugin-iobroker-3.7.2.tgz", - "integrity": "sha512-ezXFyxx2irq7my3BmlBUrzT+QHNsldR9MQYkXs7uyH6lXSkudmqq5EiDW9WckT0Cj9YqIUzoOJhhnZA9M+XTvQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alcalzone/release-script-core": "3.7.0", - "alcalzone-shared": "^4.0.1", - "axios": "^1.6.2", - "fs-extra": "^10.1.0", - "semver": "^7.5.2" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@alcalzone/release-script-plugin-iobroker/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@alcalzone/release-script-plugin-lerna": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-lerna/-/release-script-plugin-lerna-3.7.0.tgz", - "integrity": "sha512-2afbpmOl8SF7WkqMP/mdU6Db8BjNIKUJVqfVQrkqruaAQnWn7DHCO8jrLnWhIN6BIF+1txj5vfOhWI7OtQy33A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alcalzone/release-script-core": "3.7.0", - "fs-extra": "^10.1.0", - "semver": "^7.5.2" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@alcalzone/release-script-plugin-lerna/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@alcalzone/release-script-plugin-license": { - "version": "3.5.9", - "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-license/-/release-script-plugin-license-3.5.9.tgz", - "integrity": "sha512-Wa+RN968zYK0ZNkkaIRfD3Ru2ndWLD5e+VNbah4krtoeHqvQDiOPlfcWM0McU8q3ud+AMPwhYEwR1mh2lwi0gg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alcalzone/release-script-core": "3.5.9", - "fs-extra": "^10.1.0", - "tiny-glob": "^0.2.9" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@alcalzone/release-script-plugin-license/node_modules/@alcalzone/release-script-core": { - "version": "3.5.9", - "resolved": "https://registry.npmjs.org/@alcalzone/release-script-core/-/release-script-core-3.5.9.tgz", - "integrity": "sha512-rRxosfZMtpDcIm+sPTdwP5oVRBLX1WLYImrp0nUhqOPNN/UD5l9TxNVXDhGUsstXhaRXXBYS2BnOQwR308OfyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.1.1" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@alcalzone/release-script-plugin-license/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@alcalzone/release-script-plugin-manual-review": { - "version": "3.5.9", - "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-manual-review/-/release-script-plugin-manual-review-3.5.9.tgz", - "integrity": "sha512-W/7T6lXfnfGo822g2LLU122SDYOk5V7GgPSL4+yr+mRvgAVwiUf4YBnv8C6fyO0/7cSGNYebmuIlRJcGc6sZCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alcalzone/release-script-core": "3.5.9" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@alcalzone/release-script-plugin-manual-review/node_modules/@alcalzone/release-script-core": { - "version": "3.5.9", - "resolved": "https://registry.npmjs.org/@alcalzone/release-script-core/-/release-script-core-3.5.9.tgz", - "integrity": "sha512-rRxosfZMtpDcIm+sPTdwP5oVRBLX1WLYImrp0nUhqOPNN/UD5l9TxNVXDhGUsstXhaRXXBYS2BnOQwR308OfyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.1.1" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@alcalzone/release-script-plugin-package": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-package/-/release-script-plugin-package-3.7.3.tgz", - "integrity": "sha512-5oKSwbvHs9jRhARJ04eQ7xqig3a7NmPJlhtBxAqUM8+0cjs2g/V1xTxM6o8aZ09uRSdq80YGVxJm871SyszAWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alcalzone/pak": "^0.10.1", - "@alcalzone/release-script-core": "3.7.0", - "alcalzone-shared": "^4.0.1", - "fs-extra": "^10.1.0", - "semver": "^7.5.2" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@alcalzone/release-script-plugin-package/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@alcalzone/release-script-plugin-version": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-version/-/release-script-plugin-version-3.7.0.tgz", - "integrity": "sha512-030NGQeB+mglVz/58cx0WO4QiFChaSd/pz35mnOrUc9PbKWRpzisTVOt4IhCV/++YiAVibJO31NMNzvipPdx4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alcalzone/release-script-core": "3.7.0", - "alcalzone-shared": "^4.0.1", - "fs-extra": "^10.1.0", - "semver": "^7.5.2", - "tiny-glob": "^0.2.9" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@alcalzone/release-script-plugin-version/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@alcalzone/release-script/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "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, - "license": "MIT" - }, - "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, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "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, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "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, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "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/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "license": "MIT", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@datalust/winston-seq": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@datalust/winston-seq/-/winston-seq-1.0.2.tgz", - "integrity": "sha512-TxmBkN/26j+8rC/yshm9t29DKSPN69cQuGyvRmufvhPQIU2SnDlQLZmEGsPL3vQYWoBTTgu7+foYs+HmgeOl/g==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "seq-logging": "^1.1.1", - "winston-transport": "^4.4.2" - }, - "peerDependencies": { - "winston": "^3.0.0" - } - }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz", - "integrity": "sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "comment-parser": "1.4.1", - "esquery": "^1.6.0", - "jsdoc-type-pratt-parser": "~4.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "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, - "license": "MIT", - "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, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "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, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@humanwhocodes/config-array": { - "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, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "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, - "license": "BSD-3-Clause" - }, - "node_modules/@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@iobroker/db-base": { - "resolved": "packages/db-base", - "link": true - }, - "node_modules/@iobroker/db-objects-file": { - "resolved": "packages/db-objects-file", - "link": true - }, - "node_modules/@iobroker/db-objects-jsonl": { - "resolved": "packages/db-objects-jsonl", - "link": true - }, - "node_modules/@iobroker/db-objects-redis": { - "resolved": "packages/db-objects-redis", - "link": true - }, - "node_modules/@iobroker/db-states-file": { - "resolved": "packages/db-states-file", - "link": true - }, - "node_modules/@iobroker/db-states-jsonl": { - "resolved": "packages/db-states-jsonl", - "link": true - }, - "node_modules/@iobroker/db-states-redis": { - "resolved": "packages/db-states-redis", - "link": true - }, - "node_modules/@iobroker/js-controller-adapter": { - "resolved": "packages/adapter", - "link": true - }, - "node_modules/@iobroker/js-controller-cli": { - "resolved": "packages/cli", - "link": true - }, - "node_modules/@iobroker/js-controller-common": { - "resolved": "packages/common", - "link": true - }, - "node_modules/@iobroker/js-controller-common-db": { - "resolved": "packages/common-db", - "link": true - }, - "node_modules/@iobroker/plugin-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@iobroker/plugin-base/-/plugin-base-2.0.1.tgz", - "integrity": "sha512-dCcvgNsvjBL5G7vxSJ9awP3W4f6Jj36aPdAKJh4EI6QYOTrlIKoct12VZPVF07Cu+PzKDTJbadHqd/SF2hs+Ow==", - "license": "MIT" - }, - "node_modules/@iobroker/plugin-sentry": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@iobroker/plugin-sentry/-/plugin-sentry-2.0.4.tgz", - "integrity": "sha512-cA36YYgInBVux3R/byn7D8lx8b4VIT+r5ZWNWFFa69XFAydLh3piq27veUSG07F8lDLuUZrMYCfAKliCbiwZ/Q==", - "license": "MIT", - "dependencies": { - "@iobroker/plugin-base": "^2.0.1", - "@sentry/integrations": "^7.55.2", - "@sentry/node": "^7.55.2", - "source-map-support": "^0.5.21" - } - }, - "node_modules/@iobroker/types": { - "resolved": "packages/types-public", - "link": true - }, - "node_modules/@iobroker/types-dev": { - "resolved": "packages/types-dev", - "link": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "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.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" - } - }, - "node_modules/@lerna/child-process": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-7.4.2.tgz", - "integrity": "sha512-je+kkrfcvPcwL5Tg8JRENRqlbzjdlZXyaR88UcnCdNW0AJ1jX9IfHRys1X7AwSroU2ug8ESNC+suoBw1vX833Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "execa": "^5.0.0", - "strong-log-transformer": "^2.1.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@lerna/create": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-7.4.2.tgz", - "integrity": "sha512-1wplFbQ52K8E/unnqB0Tq39Z4e+NEoNrpovEnl6GpsTUrC6WDp8+w0Le2uCBV0hXyemxChduCkLz4/y1H1wTeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@lerna/child-process": "7.4.2", - "@npmcli/run-script": "6.0.2", - "@nx/devkit": ">=16.5.1 < 17", - "@octokit/plugin-enterprise-rest": "6.0.1", - "@octokit/rest": "19.0.11", - "byte-size": "8.1.1", - "chalk": "4.1.0", - "clone-deep": "4.0.1", - "cmd-shim": "6.0.1", - "columnify": "1.6.0", - "conventional-changelog-core": "5.0.1", - "conventional-recommended-bump": "7.0.1", - "cosmiconfig": "^8.2.0", - "dedent": "0.7.0", - "execa": "5.0.0", - "fs-extra": "^11.1.1", - "get-stream": "6.0.0", - "git-url-parse": "13.1.0", - "glob-parent": "5.1.2", - "globby": "11.1.0", - "graceful-fs": "4.2.11", - "has-unicode": "2.0.1", - "ini": "^1.3.8", - "init-package-json": "5.0.0", - "inquirer": "^8.2.4", - "is-ci": "3.0.1", - "is-stream": "2.0.0", - "js-yaml": "4.1.0", - "libnpmpublish": "7.3.0", - "load-json-file": "6.2.0", - "lodash": "^4.17.21", - "make-dir": "4.0.0", - "minimatch": "3.0.5", - "multimatch": "5.0.0", - "node-fetch": "2.6.7", - "npm-package-arg": "8.1.1", - "npm-packlist": "5.1.1", - "npm-registry-fetch": "^14.0.5", - "npmlog": "^6.0.2", - "nx": ">=16.5.1 < 17", - "p-map": "4.0.0", - "p-map-series": "2.1.0", - "p-queue": "6.6.2", - "p-reduce": "^2.1.0", - "pacote": "^15.2.0", - "pify": "5.0.0", - "read-cmd-shim": "4.0.0", - "read-package-json": "6.0.4", - "resolve-from": "5.0.0", - "rimraf": "^4.4.1", - "semver": "^7.3.4", - "signal-exit": "3.0.7", - "slash": "^3.0.0", - "ssri": "^9.0.1", - "strong-log-transformer": "2.1.0", - "tar": "6.1.11", - "temp-dir": "1.0.0", - "upath": "2.0.1", - "uuid": "^9.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "5.0.0", - "write-file-atomic": "5.0.1", - "write-pkg": "4.0.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@lerna/create/node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/create/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@lerna/create/node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@lerna/create/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, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/@lerna/create/node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/@lerna/create/node_modules/get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/create/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@lerna/create/node_modules/glob/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/create/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/create/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@lerna/create/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/create/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/create/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/create/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@lerna/create/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@microsoft/api-extractor": { - "version": "7.47.7", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.47.7.tgz", - "integrity": "sha512-fNiD3G55ZJGhPOBPMKD/enozj8yxJSYyVJWxRWdcUtw842rvthDHJgUWq9gXQTensFlMHv2wGuCjjivPv53j0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@microsoft/api-extractor-model": "7.29.6", - "@microsoft/tsdoc": "~0.15.0", - "@microsoft/tsdoc-config": "~0.17.0", - "@rushstack/node-core-library": "5.7.0", - "@rushstack/rig-package": "0.5.3", - "@rushstack/terminal": "0.14.0", - "@rushstack/ts-command-line": "4.22.6", - "lodash": "~4.17.15", - "minimatch": "~3.0.3", - "resolve": "~1.22.1", - "semver": "~7.5.4", - "source-map": "~0.6.1", - "typescript": "5.4.2" - }, - "bin": { - "api-extractor": "bin/api-extractor" - } - }, - "node_modules/@microsoft/api-extractor-model": { - "version": "7.29.6", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.29.6.tgz", - "integrity": "sha512-gC0KGtrZvxzf/Rt9oMYD2dHvtN/1KPEYsrQPyMKhLHnlVuO/f4AFN3E4toqZzD2pt4LhkKoYmL2H9tX3yCOyRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@microsoft/tsdoc": "~0.15.0", - "@microsoft/tsdoc-config": "~0.17.0", - "@rushstack/node-core-library": "5.7.0" - } - }, - "node_modules/@microsoft/api-extractor/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@microsoft/api-extractor/node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@microsoft/tsdoc": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz", - "integrity": "sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@microsoft/tsdoc-config": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.17.0.tgz", - "integrity": "sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@microsoft/tsdoc": "0.15.0", - "ajv": "~8.12.0", - "jju": "~1.4.0", - "resolve": "~1.22.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/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, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", - "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents/node_modules/npm-bundled": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", - "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", - "dev": true, - "license": "ISC", - "dependencies": { - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@nrwl/devkit": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.10.0.tgz", - "integrity": "sha512-fRloARtsDQoQgQ7HKEy0RJiusg/HSygnmg4gX/0n/Z+SUS+4KoZzvHjXc6T5ZdEiSjvLypJ+HBM8dQzIcVACPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nx/devkit": "16.10.0" - } - }, - "node_modules/@nrwl/tao": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.10.0.tgz", - "integrity": "sha512-QNAanpINbr+Pod6e1xNgFbzK1x5wmZl+jMocgiEFXZ67KHvmbD6MAQQr0MMz+GPhIu7EE4QCTLTyCEMlAG+K5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "nx": "16.10.0", - "tslib": "^2.3.0" - }, - "bin": { - "tao": "index.js" - } - }, - "node_modules/@nx/devkit": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.10.0.tgz", - "integrity": "sha512-IvKQqRJFDDiaj33SPfGd3ckNHhHi6ceEoqCbAP4UuMXOPPVOX6H0KVk+9tknkPb48B7jWIw6/AgOeWkBxPRO5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nrwl/devkit": "16.10.0", - "ejs": "^3.1.7", - "enquirer": "~2.3.6", - "ignore": "^5.0.4", - "semver": "7.5.3", - "tmp": "~0.2.1", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "nx": ">= 15 <= 17" - } - }, - "node_modules/@nx/devkit/node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/@nx/devkit/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@nx/nx-darwin-arm64": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.10.0.tgz", - "integrity": "sha512-YF+MIpeuwFkyvM5OwgY/rTNRpgVAI/YiR0yTYCZR+X3AAvP775IVlusNgQ3oedTBRUzyRnI4Tknj1WniENFsvQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-darwin-x64": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.10.0.tgz", - "integrity": "sha512-ypi6YxwXgb0kg2ixKXE3pwf5myVNUgWf1CsV5OzVccCM8NzheMO51KDXTDmEpXdzUsfT0AkO1sk5GZeCjhVONg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-freebsd-x64": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.10.0.tgz", - "integrity": "sha512-UeEYFDmdbbDkTQamqvtU8ibgu5jQLgFF1ruNb/U4Ywvwutw2d4ruOMl2e0u9hiNja9NFFAnDbvzrDcMo7jYqYw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.10.0.tgz", - "integrity": "sha512-WV3XUC2DB6/+bz1sx+d1Ai9q2Cdr+kTZRN50SOkfmZUQyEBaF6DRYpx/a4ahhxH3ktpNfyY8Maa9OEYxGCBkQA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.10.0.tgz", - "integrity": "sha512-aWIkOUw995V3ItfpAi5FuxQ+1e9EWLS1cjWM1jmeuo+5WtaKToJn5itgQOkvSlPz+HSLgM3VfXMvOFALNk125g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm64-musl": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.10.0.tgz", - "integrity": "sha512-uO6Gg+irqpVcCKMcEPIQcTFZ+tDI02AZkqkP7koQAjniLEappd8DnUBSQdcn53T086pHpdc264X/ZEpXFfrKWQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-x64-gnu": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.10.0.tgz", - "integrity": "sha512-134PW/u/arNFAQKpqMJniC7irbChMPz+W+qtyKPAUXE0XFKPa7c1GtlI/wK2dvP9qJDZ6bKf0KtA0U/m2HMUOA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-x64-musl": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.10.0.tgz", - "integrity": "sha512-q8sINYLdIJxK/iUx9vRk5jWAWb/2O0PAbOJFwv4qkxBv4rLoN7y+otgCZ5v0xfx/zztFgk/oNY4lg5xYjIso2Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.10.0.tgz", - "integrity": "sha512-moJkL9kcqxUdJSRpG7dET3UeLIciwrfP08mzBQ12ewo8K8FzxU8ZUsTIVVdNrwt01CXOdXoweGfdQLjJ4qTURA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-win32-x64-msvc": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.10.0.tgz", - "integrity": "sha512-5iV2NKZnzxJwZZ4DM5JVbRG/nkhAbzEskKaLBB82PmYGKzaDHuMHP1lcPoD/rtYMlowZgNA/RQndfKvPBPwmXA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@octokit/auth-token": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", - "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", - "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/graphql": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", - "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", - "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/tsconfig": "^1.0.2", - "@octokit/types": "^9.2.3" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=4" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", - "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^10.0.0" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", - "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/rest": { - "version": "19.0.11", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz", - "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/core": "^4.2.1", - "@octokit/plugin-paginate-rest": "^6.1.2", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^7.1.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/tsconfig": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", - "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@rushstack/node-core-library": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.7.0.tgz", - "integrity": "sha512-Ff9Cz/YlWu9ce4dmqNBZpA45AEya04XaBFIjV7xTVeEf+y/kTjEasmozqFELXlNG4ROdevss75JrrZ5WgufDkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "~8.13.0", - "ajv-draft-04": "~1.0.0", - "ajv-formats": "~3.0.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.22.1", - "semver": "~7.5.4" - }, - "peerDependencies": { - "@types/node": "*" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@rushstack/node-core-library/node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@rushstack/node-core-library/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@rushstack/rig-package": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.3.tgz", - "integrity": "sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve": "~1.22.1", - "strip-json-comments": "~3.1.1" - } - }, - "node_modules/@rushstack/terminal": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.14.0.tgz", - "integrity": "sha512-juTKMAMpTIJKudeFkG5slD8Z/LHwNwGZLtU441l/u82XdTBfsP+LbGKJLCNwP5se+DMCT55GB8x9p6+C4UL7jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rushstack/node-core-library": "5.7.0", - "supports-color": "~8.1.1" - }, - "peerDependencies": { - "@types/node": "*" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@rushstack/ts-command-line": { - "version": "4.22.6", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.22.6.tgz", - "integrity": "sha512-QSRqHT/IfoC5nk9zn6+fgyqOPXHME0BfchII9EUPR19pocsNp/xSbeBCbD3PIR2Lg+Q5qk7OFqk1VhWPMdKHJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rushstack/terminal": "0.14.0", - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "string-argv": "~0.3.1" - } - }, - "node_modules/@sentry-internal/tracing": { - "version": "7.119.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.119.0.tgz", - "integrity": "sha512-oKdFJnn+56f0DHUADlL8o9l8jTib3VDLbWQBVkjD9EprxfaCwt2m8L5ACRBdQ8hmpxCEo4I8/6traZ7qAdBUqA==", - "license": "MIT", - "dependencies": { - "@sentry/core": "7.119.0", - "@sentry/types": "7.119.0", - "@sentry/utils": "7.119.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/core": { - "version": "7.119.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.119.0.tgz", - "integrity": "sha512-CS2kUv9rAJJEjiRat6wle3JATHypB0SyD7pt4cpX5y0dN5dZ1JrF57oLHRMnga9fxRivydHz7tMTuBhSSwhzjw==", - "license": "MIT", - "dependencies": { - "@sentry/types": "7.119.0", - "@sentry/utils": "7.119.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/integrations": { - "version": "7.119.0", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.119.0.tgz", - "integrity": "sha512-OHShvtsRW0A+ZL/ZbMnMqDEtJddPasndjq+1aQXw40mN+zeP7At/V1yPZyFaURy86iX7Ucxw5BtmzuNy7hLyTA==", - "license": "MIT", - "dependencies": { - "@sentry/core": "7.119.0", - "@sentry/types": "7.119.0", - "@sentry/utils": "7.119.0", - "localforage": "^1.8.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/node": { - "version": "7.119.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.119.0.tgz", - "integrity": "sha512-9PFzN8xS6U0oZCflpVxS2SSIsHkCaj7qYBlsvHj4CTGWfao9ImwrU6+smy4qoG6oxwPfoVb5pOOMb4WpWOvXcQ==", - "license": "MIT", - "dependencies": { - "@sentry-internal/tracing": "7.119.0", - "@sentry/core": "7.119.0", - "@sentry/integrations": "7.119.0", - "@sentry/types": "7.119.0", - "@sentry/utils": "7.119.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/types": { - "version": "7.119.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.119.0.tgz", - "integrity": "sha512-27qQbutDBPKGbuJHROxhIWc1i0HJaGLA90tjMu11wt0E4UNxXRX+UQl4Twu68v4EV3CPvQcEpQfgsViYcXmq+w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/utils": { - "version": "7.119.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.119.0.tgz", - "integrity": "sha512-ZwyXexWn2ZIe2bBoYnXJVPc2esCSbKpdc6+0WJa8eutXfHq3FRKg4ohkfCBpfxljQGEfP1+kfin945lA21Ka+A==", - "license": "MIT", - "dependencies": { - "@sentry/types": "7.119.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sigstore/bundle": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", - "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.2.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", - "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", - "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^1.1.0", - "@sigstore/protobuf-specs": "^0.2.0", - "make-fetch-happen": "^11.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign/node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign/node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sigstore/sign/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@sigstore/sign/node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign/node_modules/cacache/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@sigstore/sign/node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@sigstore/sign/node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign/node_modules/fs-minipass/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@sigstore/sign/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@sigstore/sign/node_modules/glob/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@sigstore/sign/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, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@sigstore/sign/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/@sigstore/sign/node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/@sigstore/sign/node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@sigstore/sign/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@sigstore/sign/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign/node_modules/ssri/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@sigstore/sign/node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign/node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", - "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.2.0", - "tuf-js": "^1.1.7" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/commons/node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@sinonjs/samsam": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", - "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^2.0.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" - } - }, - "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/samsam/node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", - "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tsconfig/node10": { - "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, - "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, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "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/@tsconfig/node18": { - "version": "18.2.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.4.tgz", - "integrity": "sha512-5xxU8vVs9/FNcvm3gE07fPbn9tl6tqGGWA9tSlwsUEkBxtRnTsNmwrV8gasZ9F/EobaSv9+nu8AxUKccw77JpQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsd/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-WMFNVstwWGyDuZP2LGPRZ+kPHxZLmhO+2ormstDvnXiyoBPtW1qq9XhhrkI4NVtxgs+2ZiUTl9AG7nNIRq/uCg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@tufjs/models/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@types/argparse": { - "version": "1.0.38", - "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", - "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/chai": { - "version": "4.3.19", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.19.tgz", - "integrity": "sha512-2hHHvQBVE2FiSK4eN0Br6snX9MtolHaTo/batnLjlGRhoQzlCL61iVpxoqO7SfFyOw+P/pwv+0zNHzKoGWz9Cw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", - "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/event-stream": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/event-stream/-/event-stream-4.0.5.tgz", - "integrity": "sha512-pQ/RR/iuBW8K8WmwYaaC1nkZH0cHonNAIw6ktG8BCNrNuqNeERfBzNIAOq6Z7tvLzpjcMV02SZ5pxAekAYQpWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/fs-extra": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", - "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/jsonfile": "*", - "@types/node": "*" - } - }, - "node_modules/@types/glossy": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@types/glossy/-/glossy-0.1.3.tgz", - "integrity": "sha512-CrdAR+ZgRf0MQnDAW4tUm2LpPmfC6sAWlrBwcX0O2oUKyZvseb6wlHZ0alo++DyaLckxqM4CUa+EfzyITJM7mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ioredis": { - "version": "4.28.10", - "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.28.10.tgz", - "integrity": "sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/jsonfile": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", - "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jsonwebtoken": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", - "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mime-types": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", - "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mocha": { - "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, - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "18.19.49", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.49.tgz", - "integrity": "sha512-ALCeIR6n0nQ7j0FUF1ycOhrp6+XutJWqEu/vtdEqXFUQwkBfgUA5cEg3ZNmjWGF/ZYA/FcF9QMkL55Ar0O6UrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node-schedule": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/node-schedule/-/node-schedule-2.1.7.tgz", - "integrity": "sha512-G7Z3R9H7r3TowoH6D2pkzUHPhcJrDF4Jz1JOQ80AX0K2DWTHoN9VC94XzFAPNMdbW9TBzMZ3LjpFi7RYdbxtXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/pidusage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/pidusage/-/pidusage-2.0.5.tgz", - "integrity": "sha512-MIiyZI4/MK9UGUXWt0jJcCZhVw7YdhBuTOuqP/BjuLDLZ2PmmViMIQgZiWxtaMicQfAz/kMrZ5T7PKxFSkTeUA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prompt": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@types/prompt/-/prompt-1.1.8.tgz", - "integrity": "sha512-CF39wIJrSUJ291/M3rXyjQ7gWZfY8qyGw/zraQmFyq72CaJXRWBeQ2BS5FueFRGy38JhaBM08+Nlk/qcqSm72w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/revalidator": "*" - } - }, - "node_modules/@types/readline-sync": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@types/readline-sync/-/readline-sync-1.4.8.tgz", - "integrity": "sha512-BL7xOf0yKLA6baAX6MMOnYkoflUyj/c7y3pqMRfU0va7XlwHAOTOIo4x55P/qLfMsuaYdJJKubToLqRVmRtRZA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/revalidator": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@types/revalidator/-/revalidator-0.3.12.tgz", - "integrity": "sha512-DsA2jHfz73JaIROVoMDd/x7nVWXBmEdDSoXB4yQlDzv/NCBkFY2fMHkyE6DGrvooLDAFe5QI6l9Wq0TgdopMtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/sinon": { - "version": "10.0.20", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.20.tgz", - "integrity": "sha512-2APKKruFNCAZgx3daAyACGzWuJ028VVCUDk6o2rw/Z4PXT0ogwdV4KUegW0MwVs0Zu59auPXbbuBJHF12Sx1Eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "node_modules/@types/sinon-chai": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.12.tgz", - "integrity": "sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", - "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/tar": { - "version": "6.1.13", - "resolved": "https://registry.npmjs.org/@types/tar/-/tar-6.1.13.tgz", - "integrity": "sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "minipass": "^4.0.0" - } - }, - "node_modules/@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "license": "MIT" - }, - "node_modules/@types/winston-syslog": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@types/winston-syslog/-/winston-syslog-2.4.3.tgz", - "integrity": "sha512-z9mO5hxDls4lSTth76sddIETonCMLguppeudk1YxBz4Y/OmdRkeKMfrOTfH74T9gN5WllLnF8XbHdiM8K6EL7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/glossy": "*", - "@types/node": "*", - "winston": "^3.0.0", - "winston-transport": "^4.3.0" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "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, - "license": "ISC" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14.15.0" - } - }, - "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@zkochan/js-yaml": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@zkochan/js-yaml/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "license": "ISC" - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "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" - } - }, - "node_modules/add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dev": true, - "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/aggregate-error/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-draft-04": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^8.5.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/alcalzone-shared": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/alcalzone-shared/-/alcalzone-shared-4.0.8.tgz", - "integrity": "sha512-Rr0efCjNL9lw7miDvU8exL87Y42ehsLU2jUGNQUphhnlvxnTMrHeApWgoOSGZvsE2PhxC3KO7Z+VpQ/IbuV3aA==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">=12" - } - }, - "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, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true, - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/arrify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", - "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true, - "license": "ISC" - }, - "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtins": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", - "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/byte-size": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", - "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.17" - } - }, - "node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/cacache/node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacache/node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cacache/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, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/cacache/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacache/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", - "engines": { - "node": "*" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001655", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz", - "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-as-promised": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", - "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", - "dev": true, - "license": "WTFPL", - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "license": "MIT" - }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/clean-regexp/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, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clean-stack/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cmd-shim": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz", - "integrity": "sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/color/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==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/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==", - "license": "MIT" - }, - "node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "license": "MIT", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "node_modules/columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "engines": [ - "node >= 6.0" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true, - "license": "ISC" - }, - "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, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz", - "integrity": "sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^6.0.0", - "conventional-commits-parser": "^4.0.0", - "dateformat": "^3.0.3", - "get-pkg-repo": "^4.2.1", - "git-raw-commits": "^3.0.0", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^5.0.0", - "normalize-package-data": "^3.0.3", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-changelog-core/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-core/node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/conventional-changelog-preset-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz", - "integrity": "sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-changelog-writer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", - "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "conventional-commits-filter": "^3.0.0", - "dateformat": "^3.0.3", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "meow": "^8.1.2", - "semver": "^7.0.0", - "split": "^1.0.1" - }, - "bin": { - "conventional-changelog-writer": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-changelog-writer/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/conventional-changelog-writer/node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-changelog-writer/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-changelog-writer/node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-writer/node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-writer/node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-writer/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-commits-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", - "integrity": "sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-commits-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", - "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.3.5", - "meow": "^8.1.2", - "split2": "^3.2.2" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-commits-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/conventional-commits-parser/node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-commits-parser/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-commits-parser/node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-commits-parser/node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-commits-parser/node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-commits-parser/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-recommended-bump": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz", - "integrity": "sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^3.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "git-raw-commits": "^3.0.0", - "git-semver-tags": "^5.0.0", - "meow": "^8.1.2" - }, - "bin": { - "conventional-recommended-bump": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-recommended-bump/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/conventional-recommended-bump/node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-recommended-bump/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-recommended-bump/node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-recommended-bump/node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-recommended-bump/node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-recommended-bump/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cp-file": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-9.1.0.tgz", - "integrity": "sha512-3scnzFj/94eb7y4wyXRWwvzLFaQp87yyfTnChIjlfYrVqp5lVO3E2hIJMeQIltUT0K2ZAB3An1qXcBmwGyvuwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "nested-error-stacks": "^2.0.0", - "p-event": "^4.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cpy": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cpy/-/cpy-9.0.1.tgz", - "integrity": "sha512-D9U0DR5FjTCN3oMTcFGktanHnAG5l020yvOCR1zKILmAyPP7I/9pl6NFgRbDcmSENtbK1sQLBz1p9HIOlroiNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "arrify": "^3.0.0", - "cp-file": "^9.1.0", - "globby": "^13.1.1", - "junk": "^4.0.0", - "micromatch": "^4.0.4", - "nested-error-stacks": "^2.1.0", - "p-filter": "^3.0.0", - "p-map": "^5.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cpy-cli": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/cpy-cli/-/cpy-cli-4.2.0.tgz", - "integrity": "sha512-b04b+cbdr29CdpREPKw/itrfjO43Ty0Aj7wRM6M6LoE4GJxZJCk9Xp+Eu1IqztkKh3LxIBt1tDplENsa6KYprg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cpy": "^9.0.0", - "meow": "^10.1.2" - }, - "bin": { - "cpy": "cli.js" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cpy/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cpy/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "license": "MIT" - }, - "node_modules/cron-parser": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", - "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", - "license": "MIT", - "dependencies": { - "luxon": "^3.2.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==", - "engines": { - "node": ">=0.4.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decache": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", - "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", - "license": "MIT", - "dependencies": { - "callsite": "^1.0.0" - } - }, - "node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "license": "MIT", - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-clone": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/deep-clone/-/deep-clone-3.0.3.tgz", - "integrity": "sha512-6jtXIlCBAwr3GP/7Il52clbIFIKAxg/pnNkL4/sE6+Oqb10MXMtm9LDZV2IAuwdaKV9VBm8hlxAFk9r6pF8XRw==", - "license": "MIT" - }, - "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/diskusage": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/diskusage/-/diskusage-1.2.0.tgz", - "integrity": "sha512-2u3OG3xuf5MFyzc4MctNRUKjjwK+UkovRYdD2ed/NZNZPrt0lqHnLKxGhlFVvAb4/oufIgQG3nWgwmeTbHOvXA==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "es6-promise": "^4.2.8", - "nan": "^2.18.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.2.tgz", - "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", - "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", - "dev": true, - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "license": "MIT" - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "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, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "dev": true, - "license": "MIT" - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "license": "MIT", - "optional": true - }, - "node_modules/esbuild": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", - "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.18", - "@esbuild/linux-loong64": "0.15.18", - "esbuild-android-64": "0.15.18", - "esbuild-android-arm64": "0.15.18", - "esbuild-darwin-64": "0.15.18", - "esbuild-darwin-arm64": "0.15.18", - "esbuild-freebsd-64": "0.15.18", - "esbuild-freebsd-arm64": "0.15.18", - "esbuild-linux-32": "0.15.18", - "esbuild-linux-64": "0.15.18", - "esbuild-linux-arm": "0.15.18", - "esbuild-linux-arm64": "0.15.18", - "esbuild-linux-mips64le": "0.15.18", - "esbuild-linux-ppc64le": "0.15.18", - "esbuild-linux-riscv64": "0.15.18", - "esbuild-linux-s390x": "0.15.18", - "esbuild-netbsd-64": "0.15.18", - "esbuild-openbsd-64": "0.15.18", - "esbuild-sunos-64": "0.15.18", - "esbuild-windows-32": "0.15.18", - "esbuild-windows-64": "0.15.18", - "esbuild-windows-arm64": "0.15.18" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", - "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", - "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", - "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", - "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", - "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", - "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", - "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", - "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", - "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", - "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", - "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", - "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", - "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", - "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", - "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", - "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", - "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", - "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", - "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", - "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@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", - "@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.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-formatter-pretty": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-4.1.0.tgz", - "integrity": "sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "^7.2.13", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "eslint-rule-docs": "^1.1.5", - "log-symbols": "^4.0.0", - "plur": "^4.0.0", - "string-width": "^4.2.0", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-formatter-pretty/node_modules/@types/eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/eslint-plugin-jsdoc": { - "version": "48.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.11.0.tgz", - "integrity": "sha512-d12JHJDPNo7IFwTOAItCeJY1hcqoIxE0lHA8infQByLilQ9xkqrRa6laWCnsuCrf+8rUnvxXY1XuTbibRBNylA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@es-joy/jsdoccomment": "~0.46.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", - "debug": "^4.3.5", - "escape-string-regexp": "^4.0.0", - "espree": "^10.1.0", - "esquery": "^1.6.0", - "parse-imports": "^2.1.1", - "semver": "^7.6.3", - "spdx-expression-parse": "^4.0.0", - "synckit": "^0.9.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/espree": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", - "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.12.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-unicorn": { - "version": "52.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-52.0.0.tgz", - "integrity": "sha512-1Yzm7/m+0R4djH0tjDjfVei/ju2w3AzUGjG6q8JnuNIL5xIwsflyCooW5sfBvQp2pMYQFSWWCFONsjCax1EHng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "@eslint-community/eslint-utils": "^4.4.0", - "@eslint/eslintrc": "^2.1.4", - "ci-info": "^4.0.0", - "clean-regexp": "^1.0.0", - "core-js-compat": "^3.34.0", - "esquery": "^1.5.0", - "indent-string": "^4.0.0", - "is-builtin-module": "^3.2.1", - "jsesc": "^3.0.2", - "pluralize": "^8.0.0", - "read-pkg-up": "^7.0.1", - "regexp-tree": "^0.1.27", - "regjsparser": "^0.10.0", - "semver": "^7.5.4", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" - }, - "peerDependencies": { - "eslint": ">=8.56.0" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/ci-info": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", - "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint-rule-docs": { - "version": "1.1.235", - "resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.235.tgz", - "integrity": "sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "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, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", - "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", - "engines": { - "node": "> 0.1.90" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "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, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "license": "MIT" - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/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, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-stream-rotator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz", - "integrity": "sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==", - "license": "MIT", - "dependencies": { - "moment": "^2.29.1" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "license": "MIT", - "optional": true - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "license": "MIT" - }, - "node_modules/follow-redirects": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.8.tgz", - "integrity": "sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/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, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "license": "MIT" - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "get-pkg-repo": "src/cli.js" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-pkg-repo/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, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/get-pkg-repo/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/get-pkg-repo/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", - "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "dargs": "^7.0.0", - "meow": "^8.1.2", - "split2": "^3.2.2" - }, - "bin": { - "git-raw-commits": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/git-raw-commits/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/git-raw-commits/node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits/node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/git-remote-origin-url/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/git-semver-tags": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", - "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", - "dev": true, - "license": "MIT", - "dependencies": { - "meow": "^8.1.2", - "semver": "^7.0.0" - }, - "bin": { - "git-semver-tags": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/git-semver-tags/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/git-semver-tags/node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-semver-tags/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-semver-tags/node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/git-semver-tags/node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-semver-tags/node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/git-semver-tags/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", - "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^8.1.0" - } - }, - "node_modules/git-url-parse": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz", - "integrity": "sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "git-up": "^7.0.0" - } - }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", - "dev": true, - "license": "BSD", - "dependencies": { - "ini": "^1.3.2" - } - }, - "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, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true, - "license": "MIT" - }, - "node_modules/glossy": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/glossy/-/glossy-0.1.7.tgz", - "integrity": "sha512-mTCC51QFadK75MvAhrL5nPVIP291NjML1guo10Sa7Yj04tJU4V++Vgm780NIddg9etQD9D8FM67hFGqM8EE2HQ==", - "optional": true, - "engines": { - "node": ">= 0.2.5" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "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", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minimatch": "^5.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ignore-walk/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true, - "license": "ISC" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/init-package-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-5.0.0.tgz", - "integrity": "sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^10.0.0", - "promzard": "^1.0.0", - "read": "^2.0.0", - "read-package-json": "^6.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/init-package-json/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/init-package-json/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, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/init-package-json/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/iobroker.js-controller": { - "resolved": "packages/controller", - "link": true - }, - "node_modules/ioredis": { - "version": "4.28.5", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.28.5.tgz", - "integrity": "sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==", - "license": "MIT", - "dependencies": { - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.1", - "denque": "^1.1.0", - "lodash.defaults": "^4.2.0", - "lodash.flatten": "^4.4.0", - "lodash.isarguments": "^3.1.0", - "p-map": "^2.1.0", - "redis-commands": "1.7.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ioredis" - } - }, - "node_modules/ioredis/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ip-address/node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/irregular-plurals": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", - "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "license": "MIT", - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "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, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "protocols": "^2.0.1" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "license": "MIT" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jju": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/js-yaml/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", - "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "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, - "license": "MIT" - }, - "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", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "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, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "license": "ISC" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "license": "MIT", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "license": "(MIT OR GPL-3.0-or-later)", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/jszip/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/junk": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", - "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/just-extend": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", - "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "license": "MIT", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "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, - "license": "MIT", - "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", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "license": "MIT" - }, - "node_modules/lerna": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-7.4.2.tgz", - "integrity": "sha512-gxavfzHfJ4JL30OvMunmlm4Anw7d7Tq6tdVHzUukLdS9nWnxCN/QB21qR+VJYp5tcyXogHKbdUEGh6qmeyzxSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@lerna/child-process": "7.4.2", - "@lerna/create": "7.4.2", - "@npmcli/run-script": "6.0.2", - "@nx/devkit": ">=16.5.1 < 17", - "@octokit/plugin-enterprise-rest": "6.0.1", - "@octokit/rest": "19.0.11", - "byte-size": "8.1.1", - "chalk": "4.1.0", - "clone-deep": "4.0.1", - "cmd-shim": "6.0.1", - "columnify": "1.6.0", - "conventional-changelog-angular": "7.0.0", - "conventional-changelog-core": "5.0.1", - "conventional-recommended-bump": "7.0.1", - "cosmiconfig": "^8.2.0", - "dedent": "0.7.0", - "envinfo": "7.8.1", - "execa": "5.0.0", - "fs-extra": "^11.1.1", - "get-port": "5.1.1", - "get-stream": "6.0.0", - "git-url-parse": "13.1.0", - "glob-parent": "5.1.2", - "globby": "11.1.0", - "graceful-fs": "4.2.11", - "has-unicode": "2.0.1", - "import-local": "3.1.0", - "ini": "^1.3.8", - "init-package-json": "5.0.0", - "inquirer": "^8.2.4", - "is-ci": "3.0.1", - "is-stream": "2.0.0", - "jest-diff": ">=29.4.3 < 30", - "js-yaml": "4.1.0", - "libnpmaccess": "7.0.2", - "libnpmpublish": "7.3.0", - "load-json-file": "6.2.0", - "lodash": "^4.17.21", - "make-dir": "4.0.0", - "minimatch": "3.0.5", - "multimatch": "5.0.0", - "node-fetch": "2.6.7", - "npm-package-arg": "8.1.1", - "npm-packlist": "5.1.1", - "npm-registry-fetch": "^14.0.5", - "npmlog": "^6.0.2", - "nx": ">=16.5.1 < 17", - "p-map": "4.0.0", - "p-map-series": "2.1.0", - "p-pipe": "3.1.0", - "p-queue": "6.6.2", - "p-reduce": "2.1.0", - "p-waterfall": "2.1.1", - "pacote": "^15.2.0", - "pify": "5.0.0", - "read-cmd-shim": "4.0.0", - "read-package-json": "6.0.4", - "resolve-from": "5.0.0", - "rimraf": "^4.4.1", - "semver": "^7.3.8", - "signal-exit": "3.0.7", - "slash": "3.0.0", - "ssri": "^9.0.1", - "strong-log-transformer": "2.1.0", - "tar": "6.1.11", - "temp-dir": "1.0.0", - "typescript": ">=3 < 6", - "upath": "2.0.1", - "uuid": "^9.0.0", - "validate-npm-package-license": "3.0.4", - "validate-npm-package-name": "5.0.0", - "write-file-atomic": "5.0.1", - "write-pkg": "4.0.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4" - }, - "bin": { - "lerna": "dist/cli.js" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/lerna/node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lerna/node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lerna/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, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/lerna/node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lerna/node_modules/get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lerna/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/lerna/node_modules/glob/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/lerna/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lerna/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/lerna/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lerna/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/lerna/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libnpmaccess": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-7.0.2.tgz", - "integrity": "sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^10.1.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/libnpmaccess/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/libnpmaccess/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, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/libnpmaccess/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/libnpmpublish": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-7.3.0.tgz", - "integrity": "sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg==", - "dev": true, - "license": "ISC", - "dependencies": { - "ci-info": "^3.6.1", - "normalize-package-data": "^5.0.0", - "npm-package-arg": "^10.1.0", - "npm-registry-fetch": "^14.0.3", - "proc-log": "^3.0.0", - "semver": "^7.3.7", - "sigstore": "^1.4.0", - "ssri": "^10.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/libnpmpublish/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/libnpmpublish/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, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/libnpmpublish/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/libnpmpublish/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, - "license": "BSD-2-Clause", - "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/libnpmpublish/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/libnpmpublish/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "license": "MIT", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/lines-and-columns": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/load-json-file/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/loadavg-windows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/loadavg-windows/-/loadavg-windows-1.1.1.tgz", - "integrity": "sha512-ncSyH121LuN6OENPSohTAS2W85J3NYVIfjsVcK4spViQbHlQUXhGKd8VYhrqWyjtwwSTw4g3rrDraNoSJWRLgw==", - "license": "MIT", - "dependencies": { - "weak-daemon": "1.0.3" - } - }, - "node_modules/localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "license": "Apache-2.0", - "dependencies": { - "lie": "3.1.1" - } - }, - "node_modules/localforage/node_modules/lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "license": "MIT", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "license": "MIT" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "license": "MIT" - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "license": "MIT" - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "license": "MIT" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "license": "MIT" - }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/logform": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", - "integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", - "license": "MIT", - "dependencies": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/logform/node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/long-timeout": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", - "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==", - "license": "MIT" - }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/luxon": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", - "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" - }, - "node_modules/make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/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, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", - "license": "MIT" - }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minimist-options/node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-fetch/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.2.tgz", - "integrity": "sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", - "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", - "dev": true, - "license": "MIT", - "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.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/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, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/mocha/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, - "node_modules/multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/multimatch/node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "license": "ISC" - }, - "node_modules/mylas": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/mylas/-/mylas-2.1.13.tgz", - "integrity": "sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/raouldeheer" - } - }, - "node_modules/nan": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", - "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", - "license": "MIT", - "optional": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" - }, - "node_modules/nested-error-stacks": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", - "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", - "dev": true, - "license": "MIT" - }, - "node_modules/nise": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", - "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/text-encoding": "^0.7.2", - "just-extend": "^6.2.0", - "path-to-regexp": "^6.2.1" - } - }, - "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.3.1.tgz", - "integrity": "sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", - "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", - "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", - "dev": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "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, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/node-machine-id": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", - "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-schedule": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz", - "integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==", - "license": "MIT", - "dependencies": { - "cron-parser": "^4.2.0", - "long-timeout": "0.1.1", - "sorted-array-functions": "^1.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/node.extend": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-2.0.3.tgz", - "integrity": "sha512-xwADg/okH48PvBmRZyoX8i8GJaKuJ1CqlqotlZOhUio8egD1P5trJupHKBzcPjSF9ifK2gPcEICRBnkfPqQXZw==", - "license": "(MIT OR GPL-2.0)", - "dependencies": { - "hasown": "^2.0.0", - "is": "^3.3.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-install-checks": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", - "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true, - "license": "ISC" - }, - "node_modules/npm-package-arg": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", - "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^3.0.6", - "semver": "^7.0.0", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-package-arg/node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/npm-package-arg/node_modules/hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "license": "ISC", - "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/npm-packlist": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", - "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz", - "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest/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, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-registry-fetch/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/cacache/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/npm-registry-fetch/node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm-registry-fetch/node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/fs-minipass/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/npm-registry-fetch/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm-registry-fetch/node_modules/glob/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/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, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-registry-fetch/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/ssri/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/npm-registry-fetch/node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/nx": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/nx/-/nx-16.10.0.tgz", - "integrity": "sha512-gZl4iCC0Hx0Qe1VWmO4Bkeul2nttuXdPpfnlcDKSACGu3ZIo+uySqwOF8yBAxSTIf8xe2JRhgzJN1aFkuezEBg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@nrwl/tao": "16.10.0", - "@parcel/watcher": "2.0.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.0-rc.46", - "@zkochan/js-yaml": "0.0.6", - "axios": "^1.0.0", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^8.0.1", - "dotenv": "~16.3.1", - "dotenv-expand": "~10.0.0", - "enquirer": "~2.3.6", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^11.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "jest-diff": "^29.4.1", - "js-yaml": "4.1.0", - "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", - "minimatch": "3.0.5", - "node-machine-id": "1.1.12", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.5.3", - "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "nx": "bin/nx.js" - }, - "optionalDependencies": { - "@nx/nx-darwin-arm64": "16.10.0", - "@nx/nx-darwin-x64": "16.10.0", - "@nx/nx-freebsd-x64": "16.10.0", - "@nx/nx-linux-arm-gnueabihf": "16.10.0", - "@nx/nx-linux-arm64-gnu": "16.10.0", - "@nx/nx-linux-arm64-musl": "16.10.0", - "@nx/nx-linux-x64-gnu": "16.10.0", - "@nx/nx-linux-x64-musl": "16.10.0", - "@nx/nx-win32-arm64-msvc": "16.10.0", - "@nx/nx-win32-x64-msvc": "16.10.0" - }, - "peerDependencies": { - "@swc-node/register": "^1.6.7", - "@swc/core": "^1.3.85" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/nx/node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/nx/node_modules/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nx/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true, - "license": "MIT" - }, - "node_modules/nx/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nx/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/nx/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "license": "MIT", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-timeout": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", - "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-map": "^5.1.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-waterfall": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-reduce": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/pacote": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pacote/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/pacote/node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/cacache/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/pacote/node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pacote/node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/fs-minipass/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/pacote/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/pacote/node_modules/glob/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/pacote/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/ignore-walk": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", - "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", - "dev": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/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, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/pacote/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/pacote/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/pacote/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^6.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pacote/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/ssri/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/pacote/node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "license": "(MIT AND Zlib)" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-imports": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.1.tgz", - "integrity": "sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "es-module-lexer": "^1.5.3", - "slashes": "^3.0.12" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-json/node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/parse-path": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", - "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", - "dev": true, - "license": "MIT", - "dependencies": { - "protocols": "^2.0.0" - } - }, - "node_modules/parse-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", - "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse-path": "^7.0.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/path-to-regexp": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", - "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "license": [ - "MIT", - "Apache2" - ], - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidusage": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-3.0.2.tgz", - "integrity": "sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/plimit-lit": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/plimit-lit/-/plimit-lit-1.6.1.tgz", - "integrity": "sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "queue-lit": "^1.5.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/plur": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", - "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "irregular-plurals": "^3.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/promisify-child-process": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/promisify-child-process/-/promisify-child-process-4.1.2.tgz", - "integrity": "sha512-APnkIgmaHNJpkAn7k+CrJSi9WMuff5ctYFbD0CO2XIPkM8yO7d/ShouU2clywbpHV/DUsyc4bpJCsNgddNtx4g==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/prompt": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.3.0.tgz", - "integrity": "sha512-ZkaRWtaLBZl7KKAKndKYUL8WqNT+cQHKRZnT4RYYms48jQkFw3rrBL+/N5K/KtdEveHkxs982MX2BkDKub2ZMg==", - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "async": "3.2.3", - "read": "1.0.x", - "revalidator": "0.1.x", - "winston": "2.x" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/prompt/node_modules/async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", - "license": "MIT" - }, - "node_modules/prompt/node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "license": "ISC", - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/prompt/node_modules/winston": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.7.tgz", - "integrity": "sha512-vLB4BqzCKDnnZH9PHGoS2ycawueX4HLqENXQitvFHczhgW2vFpSOn31LZtVr1KU8YTw7DS4tM+cqyovxo8taVg==", - "license": "MIT", - "dependencies": { - "async": "^2.6.4", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/prompt/node_modules/winston/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/promzard": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.2.tgz", - "integrity": "sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "read": "^3.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/promzard/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/promzard/node_modules/read": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz", - "integrity": "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==", - "dev": true, - "license": "ISC", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-lit": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/queue-lit/-/queue-lit-1.5.2.tgz", - "integrity": "sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/read": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read/-/read-2.1.0.tgz", - "integrity": "sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "mute-stream": "~1.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-cmd-shim": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", - "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", - "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/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, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/read-package-json/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/read-package-json/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, - "license": "BSD-2-Clause", - "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/read-package-json/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/read-pkg-up/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/read-pkg/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/read/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readline": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", - "license": "BSD" - }, - "node_modules/readline-sync": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", - "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/redent/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/redent/node_modules/strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/redis-commands": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", - "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==", - "license": "MIT" - }, - "node_modules/redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", - "license": "MIT", - "dependencies": { - "redis-errors": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regexp-tree": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", - "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", - "dev": true, - "license": "MIT", - "bin": { - "regexp-tree": "bin/regexp-tree" - } - }, - "node_modules/regjsparser": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz", - "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/respjs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/respjs/-/respjs-4.2.0.tgz", - "integrity": "sha512-/W219Wpyo0m6bVN9z/rqhe0ek6nJ7Tus9WhbWpA8aJI8FxtMrQw1u8RStxOswTyUrW/NXaKXuaNfKZFKYbwXkg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/revalidator": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "integrity": "sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg==", - "license": "Apache 2.0", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "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, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-stable-stringify": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/seq-logging": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/seq-logging/-/seq-logging-1.1.2.tgz", - "integrity": "sha512-9n7bCIHiMdBene104oSEa2917OcNBw+uee2v+we4AQxmjqt/aeQkWy1296IvGsogbj5fK6wuDNhVhm/DYmauVA==", - "license": "Apache-2.0", - "optional": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true, - "license": "ISC" - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "license": "MIT" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shiki": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", - "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/sigstore": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", - "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^1.1.0", - "@sigstore/protobuf-specs": "^0.2.0", - "@sigstore/sign": "^1.0.0", - "@sigstore/tuf": "^1.0.3", - "make-fetch-happen": "^11.0.1" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sigstore/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/sigstore/node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/node_modules/cacache/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sigstore/node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/sigstore/node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/node_modules/fs-minipass/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sigstore/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sigstore/node_modules/glob/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sigstore/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, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/sigstore/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sigstore/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/sigstore/node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/sigstore/node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sigstore/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sigstore/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/node_modules/ssri/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sigstore/node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT" - }, - "node_modules/sinon": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.2.0.tgz", - "integrity": "sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw==", - "deprecated": "16.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^10.3.0", - "@sinonjs/samsam": "^8.0.0", - "diff": "^5.1.0", - "nise": "^5.1.4", - "supports-color": "^7.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "node_modules/sinon-chai": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", - "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", - "dev": true, - "license": "(BSD-2-Clause OR WTFPL)", - "peerDependencies": { - "chai": "^4.0.0", - "sinon": ">=4.0.0" - } - }, - "node_modules/sinon/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slashes": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", - "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==", - "dev": true, - "license": "ISC" - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sorted-array-functions": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", - "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==", - "license": "MIT" - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-correct/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", - "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.20", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", - "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "license": "ISC", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ssri/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/standard-as-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", - "license": "MIT" - }, - "node_modules/stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", - "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - }, - "bin": { - "sl-log-transformer": "bin/sl-log-transformer.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/synckit": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", - "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "license": "MIT" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/trim-newlines": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "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, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-json-schema-generator": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-json-schema-generator/-/ts-json-schema-generator-1.2.0.tgz", - "integrity": "sha512-tUMeO3ZvA12d3HHh7T/AK8W5hmUhDRNtqWRHSMN3ZRbUFt+UmV0oX8k1RK4SA+a+BKNHpmW2v06MS49e8Fi3Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.11", - "commander": "^9.4.1", - "glob": "^8.0.3", - "json5": "^2.2.1", - "normalize-path": "^3.0.0", - "safe-stable-stringify": "^2.4.1", - "typescript": "~4.9.3" - }, - "bin": { - "ts-json-schema-generator": "bin/ts-json-schema-generator" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ts-json-schema-generator/node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ts-node": { - "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", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "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/tsc-alias": { - "version": "1.8.10", - "resolved": "https://registry.npmjs.org/tsc-alias/-/tsc-alias-1.8.10.tgz", - "integrity": "sha512-Ibv4KAWfFkFdKJxnWfVtdOmB0Zi1RJVxcbPGiCDsFpCQSsmpWyuzHG3rQyI5YkobWwxFPEyQfu1hdo4qLG2zPw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.3", - "commander": "^9.0.0", - "globby": "^11.0.4", - "mylas": "^2.1.9", - "normalize-path": "^3.0.0", - "plimit-lit": "^1.2.6" - }, - "bin": { - "tsc-alias": "dist/bin/index.js" - } - }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tsd": { - "version": "0.24.1", - "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.24.1.tgz", - "integrity": "sha512-sD+s81/2aM4RRhimCDttd4xpBNbUFWnoMSHk/o8kC8Ek23jljeRNWjsxFJmOmYLuLTN9swRt1b6iXfUXTcTiIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tsd/typescript": "~4.8.3", - "eslint-formatter-pretty": "^4.1.0", - "globby": "^11.0.1", - "meow": "^9.0.0", - "path-exists": "^4.0.0", - "read-pkg-up": "^7.0.0" - }, - "bin": { - "tsd": "dist/cli.js" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/tsd/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tsd/node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tsd/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tsd/node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tsd/node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tsd/node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tsd/node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tsd/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true, - "license": "0BSD" - }, - "node_modules/tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tuf-js/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/tuf-js/node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/cacache/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/tuf-js/node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tuf-js/node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/fs-minipass/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/tuf-js/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tuf-js/node_modules/glob/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/tuf-js/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, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/tuf-js/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tuf-js/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/tuf-js/node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/tuf-js/node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/tuf-js/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tuf-js/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/ssri/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/tuf-js/node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/typedoc": { - "version": "0.25.13", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz", - "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.3", - "shiki": "^0.14.7" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 16" - }, - "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" - } - }, - "node_modules/typedoc-plugin-markdown": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.17.1.tgz", - "integrity": "sha512-QzdU3fj0Kzw2XSdoL15ExLASt2WPqD7FbLeaqwT70+XjKyTshBnUlQA5nNREO1C2P8Uen0CDjsBLMsCQ+zd0lw==", - "dev": true, - "license": "MIT", - "dependencies": { - "handlebars": "^4.7.7" - }, - "peerDependencies": { - "typedoc": ">=0.24.0" - } - }, - "node_modules/typedoc-plugin-missing-exports": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-2.3.0.tgz", - "integrity": "sha512-iI9ITNNLlbsLCBBeYDyu0Qqp3GN/9AGyWNKg8bctRXuZEPT7G1L+0+MNWG9MsHcf/BFmNbXL0nQ8mC/tXRicog==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "typedoc": "0.24.x || 0.25.x" - } - }, - "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/typedoc/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true, - "license": "MIT" - }, - "node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unix-dgram": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/unix-dgram/-/unix-dgram-2.0.6.tgz", - "integrity": "sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg==", - "hasInstallScript": true, - "license": "ISC", - "optional": true, - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.16.0" - }, - "engines": { - "node": ">=0.10.48" - } - }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-browserslist-db/node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "dev": true, - "license": "ISC" - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/weak-daemon": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/weak-daemon/-/weak-daemon-1.0.3.tgz", - "integrity": "sha512-9OLYp5qQSxpnTIyuA1zJ7at3DV2DSBcbdXduC/3QFPeYjF30Lh1nfBrG+VLf4QUvZPz2lXFPu08oIRzWQfucVQ==", - "license": "MIT", - "engines": { - "node": ">=4.8.7" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/winston": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.14.2.tgz", - "integrity": "sha512-CO8cdpBB2yqzEf8v895L+GNKYJiEq8eKlHU38af3snQBQ+sdAIUepjMSguOIJC7ICbzm0ZI+Af2If4vIJrtmOg==", - "license": "MIT", - "dependencies": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.6.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.7.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-daily-rotate-file": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-5.0.0.tgz", - "integrity": "sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==", - "license": "MIT", - "dependencies": { - "file-stream-rotator": "^0.6.1", - "object-hash": "^3.0.0", - "triple-beam": "^1.4.1", - "winston-transport": "^4.7.0" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "winston": "^3" - } - }, - "node_modules/winston-seq-updated": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/winston-seq-updated/-/winston-seq-updated-1.0.4.tgz", - "integrity": "sha512-PBcD6PHdN/6XqtFIeW/EnlVFD3hFulZsdSbDyVd/xp0MjHpTPAfBBhmSDUf72E+LQxSS952ctmI6XG1cS3nkTg==", - "license": "MIT", - "optional": true, - "dependencies": { - "seq-logging": "0.4.6", - "winston-transport": "^4.3.0" - } - }, - "node_modules/winston-seq-updated/node_modules/seq-logging": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/seq-logging/-/seq-logging-0.4.6.tgz", - "integrity": "sha512-cCkhK86q+PfLeC21eaOWBcXyPUROuRq/e9EaJIT1BkmEdTHjvIgViDn7Tgw+tdzFhezvn7buDfoXWD8xPtQfeg==", - "license": "Apache-2.0", - "optional": true - }, - "node_modules/winston-syslog": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/winston-syslog/-/winston-syslog-2.7.1.tgz", - "integrity": "sha512-MrU5gSwXgEbHwz5wFhn1rZtSCbRcP1PEB8zU49tgsfjQ63EjIVAkQpXmMocdbTLnTJ2cW3gLW6gmoOOOhyJZgg==", - "license": "MIT", - "optional": true, - "dependencies": { - "glossy": "^0.1.7", - "triple-beam": "^1.3.0", - "winston-transport": "^4.5.0" - }, - "engines": { - "node": ">= 8" - }, - "optionalDependencies": { - "unix-dgram": "2.0.6" - }, - "peerDependencies": { - "winston": "^3.8.2" - } - }, - "node_modules/winston-transport": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.1.tgz", - "integrity": "sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==", - "license": "MIT", - "dependencies": { - "logform": "^2.6.1", - "readable-stream": "^3.6.2", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston/node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/write-file-atomic/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, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-json-file/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-json-file/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/write-json-file/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/write-json-file/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", - "dev": true, - "license": "MIT", - "dependencies": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/write-pkg/node_modules/type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=6" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/adapter": { - "name": "@iobroker/js-controller-adapter", - "version": "6.0.12-alpha.0-20240922-1ea0ace13", - "license": "MIT", - "dependencies": { - "@alcalzone/pak": "^0.8.1", - "@iobroker/db-objects-file": "file:../db-objects-file", - "@iobroker/db-objects-jsonl": "file:../db-objects-jsonl", - "@iobroker/db-objects-redis": "file:../db-objects-redis", - "@iobroker/db-states-file": "file:../db-states-file", - "@iobroker/db-states-jsonl": "file:../db-states-jsonl", - "@iobroker/db-states-redis": "file:../db-states-redis", - "@iobroker/js-controller-common": "file:../common", - "@iobroker/js-controller-common-db": "file:../common-db", - "@iobroker/plugin-base": "~2.0.1", - "deep-clone": "^3.0.3", - "fs-extra": "^11.1.0", - "jsonwebtoken": "^9.0.0", - "node-schedule": "^2.1.0", - "node.extend": "^2.0.2", - "pidusage": "^3.0.2", - "readline": "^1.3.0", - "semver": "^7.5.2", - "yargs": "^17.7.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/adapter/node_modules/@alcalzone/pak": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@alcalzone/pak/-/pak-0.8.1.tgz", - "integrity": "sha512-sPdxNxdXLH96kbyWLdIljVSIY2N6/qnPqkq5AlWvuizjGQUwHIUtWZHLss9XNDV/hY7YkgdIb9ILHbMTnRBxVQ==", - "license": "MIT", - "dependencies": { - "axios": "^0.26.0", - "execa": "^5.0.0", - "fs-extra": "^10.0.1" - } - }, - "packages/adapter/node_modules/@alcalzone/pak/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "packages/adapter/node_modules/axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.8" - } - }, - "packages/cli": { - "name": "@iobroker/js-controller-cli", - "version": "6.0.12-alpha.0-20240922-1ea0ace13", - "license": "MIT", - "dependencies": { - "@iobroker/js-controller-common": "file:../common", - "@iobroker/js-controller-common-db": "file:../common-db", - "@iobroker/plugin-base": "~2.0.1", - "axios": "^1.7.4", - "chokidar": "^3.5.3", - "debug": "^4.3.4", - "deep-clone": "^3.0.3", - "event-stream": "^4.0.1", - "fs-extra": "^11.1.0", - "mime-types": "^2.1.35", - "readline-sync": "^1.4.10", - "semver": "^7.5.2", - "yargs": "^17.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/common": { - "name": "@iobroker/js-controller-common", - "version": "6.0.12-alpha.0-20240922-1ea0ace13", - "license": "MIT", - "dependencies": { - "@iobroker/db-objects-file": "file:../db-objects-file", - "@iobroker/db-objects-jsonl": "file:../db-objects-jsonl", - "@iobroker/db-objects-redis": "file:../db-objects-redis", - "@iobroker/db-states-file": "file:../db-states-file", - "@iobroker/db-states-jsonl": "file:../db-states-jsonl", - "@iobroker/db-states-redis": "file:../db-states-redis", - "@iobroker/js-controller-common-db": "file:../common-db", - "fs-extra": "^11.1.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "optionalDependencies": { - "winston-seq-updated": "^1.0.4", - "winston-syslog": "^2.6.0" - } - }, - "packages/common-db": { - "name": "@iobroker/js-controller-common-db", - "version": "6.0.12-alpha.0-20240922-1ea0ace13", - "license": "MIT", - "dependencies": { - "@alcalzone/pak": "^0.8.1", - "axios": "^1.7.4", - "ci-info": "^3.8.0", - "deep-clone": "^3.0.3", - "event-stream": "^4.0.1", - "fs-extra": "^11.1.0", - "jsonwebtoken": "^9.0.0", - "node-forge": "^1.3.0", - "node.extend": "^2.0.2", - "promisify-child-process": "^4.1.2", - "readline": "^1.3.0", - "semver": "^7.5.2", - "triple-beam": "^1.3.0", - "winston": "^3.7.2", - "winston-daily-rotate-file": "^5.0.0", - "winston-transport": "^4.5.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "@datalust/winston-seq": "^1.0.0", - "diskusage": "^1.1.3", - "winston-syslog": "^2.6.0" - } - }, - "packages/common-db/node_modules/@alcalzone/pak": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@alcalzone/pak/-/pak-0.8.1.tgz", - "integrity": "sha512-sPdxNxdXLH96kbyWLdIljVSIY2N6/qnPqkq5AlWvuizjGQUwHIUtWZHLss9XNDV/hY7YkgdIb9ILHbMTnRBxVQ==", - "license": "MIT", - "dependencies": { - "axios": "^0.26.0", - "execa": "^5.0.0", - "fs-extra": "^10.0.1" - } - }, - "packages/common-db/node_modules/@alcalzone/pak/node_modules/axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.8" - } - }, - "packages/common-db/node_modules/@alcalzone/pak/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "packages/controller": { - "name": "iobroker.js-controller", - "version": "6.0.12-alpha.0-20240922-1ea0ace13", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@alcalzone/esbuild-register": "^2.5.1-1", - "@iobroker/db-objects-file": "file:../db-objects-file", - "@iobroker/db-objects-jsonl": "file:../db-objects-jsonl", - "@iobroker/db-objects-redis": "file:../db-objects-redis", - "@iobroker/db-states-file": "file:../db-states-file", - "@iobroker/db-states-jsonl": "file:../db-states-jsonl", - "@iobroker/db-states-redis": "file:../db-states-redis", - "@iobroker/js-controller-adapter": "file:../adapter", - "@iobroker/js-controller-cli": "file:../cli", - "@iobroker/js-controller-common": "file:../common", - "@iobroker/js-controller-common-db": "file:../common-db", - "@iobroker/plugin-base": "~2.0.1", - "@iobroker/plugin-sentry": "~2.0.4", - "axios": "^1.7.4", - "cron-parser": "^4.9.0", - "debug": "^4.3.4", - "decache": "^4.6.1", - "deep-clone": "^3.0.3", - "fs-extra": "^11.1.0", - "jsonwebtoken": "^9.0.0", - "jszip": "^3.10.1", - "loadavg-windows": "^1.1.1", - "node-schedule": "^2.1.1", - "pidusage": "^3.0.2", - "promisify-child-process": "^4.1.1", - "prompt": "^1.2.2", - "readline-sync": "^1.4.10", - "semver": "^7.5.2", - "tar": "^6.2.1" - }, - "bin": { - "iobroker": "iobroker.js" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/controller/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "packages/controller/node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "packages/db-base": { - "name": "@iobroker/db-base", - "version": "6.0.12-alpha.0-20240922-1ea0ace13", - "license": "MIT", - "dependencies": { - "@iobroker/js-controller-common-db": "file:../common-db", - "deep-clone": "^3.0.3", - "fs-extra": "^11.1.0", - "respjs": "^4.2.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/db-objects-file": { - "name": "@iobroker/db-objects-file", - "version": "6.0.12-alpha.0-20240922-1ea0ace13", - "license": "Apache 2.0", - "dependencies": { - "@iobroker/db-base": "file:../db-base", - "@iobroker/db-objects-redis": "file:../db-objects-redis", - "deep-clone": "^3.0.3", - "fs-extra": "^11.1.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "packages/db-objects-jsonl": { - "name": "@iobroker/db-objects-jsonl", - "version": "6.0.12-alpha.0-20240922-1ea0ace13", - "license": "Apache 2.0", - "dependencies": { - "@alcalzone/jsonl-db": "~3.1.1", - "@iobroker/db-base": "file:../db-base", - "@iobroker/db-objects-file": "file:../db-objects-file", - "@iobroker/db-objects-redis": "file:../db-objects-redis", - "deep-clone": "^3.0.3", - "fs-extra": "^11.1.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "packages/db-objects-redis": { - "name": "@iobroker/db-objects-redis", - "version": "6.0.12-alpha.0-20240922-1ea0ace13", - "license": "Apache 2.0", - "dependencies": { - "@iobroker/db-base": "file:../db-base", - "deep-clone": "^3.0.3", - "ioredis": "^4.28.2", - "mime-types": "^2.1.35", - "node.extend": "^2.0.2", - "semver": "^7.5.2" - }, - "engines": { - "node": ">=16.4.0" - } - }, - "packages/db-states-file": { - "name": "@iobroker/db-states-file", - "version": "6.0.12-alpha.0-20240922-1ea0ace13", - "license": "MIT", - "dependencies": { - "@iobroker/db-base": "file:../db-base", - "@iobroker/db-states-redis": "file:../db-states-redis" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "packages/db-states-jsonl": { - "name": "@iobroker/db-states-jsonl", - "version": "6.0.12-alpha.0-20240922-1ea0ace13", - "license": "MIT", - "dependencies": { - "@alcalzone/jsonl-db": "~3.1.1", - "@iobroker/db-base": "file:../db-base", - "@iobroker/db-states-file": "file:../db-states-file", - "@iobroker/db-states-redis": "file:../db-states-redis" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "packages/db-states-redis": { - "name": "@iobroker/db-states-redis", - "version": "6.0.12-alpha.0-20240922-1ea0ace13", - "license": "MIT", - "dependencies": { - "@iobroker/db-base": "file:../db-base", - "ioredis": "^4.28.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "packages/types-dev": { - "name": "@iobroker/types-dev", - "version": "6.0.12-alpha.0-20240922-1ea0ace13", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - } - }, - "packages/types-public": { - "name": "@iobroker/types", - "version": "6.0.12-alpha.0-20240922-1ea0ace13", - "license": "MIT", - "devDependencies": { - "tsd": "^0.24.1" - }, - "engines": { - "node": ">=12.0.0" - } + "name": "iobroker.js-controller-mono", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "iobroker.js-controller-mono", + "hasInstallScript": true, + "workspaces": [ + "packages/*" + ], + "dependencies": { + "@iobroker/db-base": "file:packages/db-base", + "@iobroker/db-objects-file": "file:packages/db-objects-file", + "@iobroker/db-objects-jsonl": "file:packages/db-objects-jsonl", + "@iobroker/db-objects-redis": "file:packages/db-objects-redis", + "@iobroker/db-states-file": "file:packages/db-states-file", + "@iobroker/db-states-jsonl": "file:packages/db-states-jsonl", + "@iobroker/db-states-redis": "file:packages/db-states-redis", + "@iobroker/js-controller-adapter": "file:packages/adapter", + "@iobroker/js-controller-cli": "file:packages/cli", + "@iobroker/js-controller-common": "file:packages/common", + "@iobroker/js-controller-common-db": "file:packages/common-db", + "iobroker.js-controller": "file:packages/controller" + }, + "devDependencies": { + "@alcalzone/esm2cjs": "^1.1.2", + "@alcalzone/pak": "^0.11.0", + "@alcalzone/release-script": "~3.8.0", + "@alcalzone/release-script-plugin-iobroker": "~3.7.0", + "@alcalzone/release-script-plugin-lerna": "~3.7.0", + "@alcalzone/release-script-plugin-license": "~3.5.0", + "@alcalzone/release-script-plugin-manual-review": "~3.5.9", + "@iobroker/eslint-config": "^0.1.6", + "@iobroker/types": "file:packages/types-public", + "@iobroker/types-dev": "file:packages/types-dev", + "@microsoft/api-extractor": "^7.43.0", + "@tsconfig/node18": "^18.2.2", + "@types/chai": "^4.3.3", + "@types/chai-as-promised": "^7.1.5", + "@types/debug": "^4.1.12", + "@types/event-stream": "^4.0.0", + "@types/fs-extra": "^11.0.1", + "@types/ioredis": "^4.28.10", + "@types/jsonwebtoken": "^8.5.9", + "@types/mime-types": "^2.1.1", + "@types/mocha": "^10.0.6", + "@types/node": "^18.19.31", + "@types/node-forge": "^1.3.0", + "@types/node-schedule": "^2.1.0", + "@types/pidusage": "^2.0.2", + "@types/prompt": "^1.1.5", + "@types/readline-sync": "^1.4.4", + "@types/semver": "^7.3.10", + "@types/sinon": "^10.0.13", + "@types/sinon-chai": "^3.2.9", + "@types/tar": "^6.1.3", + "@types/triple-beam": "^1.3.5", + "@types/winston-syslog": "^2.4.0", + "@types/yargs": "^17.0.8", + "chai": "^4.3.4", + "chai-as-promised": "^7.1.1", + "cpy-cli": "^4.2.0", + "fs-extra": "^11.1.0", + "lerna": "^7.1.4", + "mocha": "^10.4.0", + "prettier": "^3.0.1", + "semver": "^7.5.2", + "sinon": "^15.0.0", + "sinon-chai": "^3.7.0", + "ts-json-schema-generator": "~1.2.0", + "ts-node": "^10.9.2", + "tsc-alias": "^1.8.8", + "typedoc": "^0.25.12", + "typedoc-plugin-markdown": "^3.17.1", + "typedoc-plugin-missing-exports": "^2.2.0", + "typescript": "~5.4.2" + } + }, + "node_modules/@alcalzone/esbuild-register": { + "version": "2.5.1-1", + "resolved": "https://registry.npmjs.org/@alcalzone/esbuild-register/-/esbuild-register-2.5.1-1.tgz", + "integrity": "sha512-u19/K/ZaiWQhYIQZeF2FImUeJDiMD4i2h7qPdU0HVFCxoQynye59N4oy6EvjxeXaxLnGkppcb5KKeiYD4cT1iQ==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.11.5", + "jsonc-parser": "^3.0.0" + } + }, + "node_modules/@alcalzone/esbuild-register/node_modules/esbuild": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", + "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + } + }, + "node_modules/@alcalzone/esm2cjs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@alcalzone/esm2cjs/-/esm2cjs-1.1.2.tgz", + "integrity": "sha512-rxl3YvaWp+4RlTLKrs8xjP4ZXA07m0mQTywQMRWmhUhfeqOnymEOwT6WKbR71LJUy0grgbe5T/SCsF6aYoqbig==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.15.5", + "fs-extra": "^10.1.0", + "tiny-glob": "^0.2.9", + "yargs": "^17.5.1" + }, + "bin": { + "esm2cjs": "bin/esm2cjs.js" + } + }, + "node_modules/@alcalzone/esm2cjs/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@alcalzone/jsonl-db": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@alcalzone/jsonl-db/-/jsonl-db-3.1.1.tgz", + "integrity": "sha512-1ezCM6Od1vW3uT+ALLkAg0vN+MZtib18k1A+JPvLTm55tb4Lj9PsF4x3o9mBI102/nRAI3FpkEzLJAeZlkXdDA==", + "license": "MIT", + "dependencies": { + "@alcalzone/proper-lockfile": "^4.1.3-0", + "alcalzone-shared": "^4.0.8", + "fs-extra": "^10.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@alcalzone/jsonl-db/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@alcalzone/pak": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@alcalzone/pak/-/pak-0.11.0.tgz", + "integrity": "sha512-S6s2Xug8VJ04Xgam7kV+dUydVB2gJmTem+Kr7oxneeXndWddgoQxphQNI9WqgpsifTkonC9wiAbj3qkMFlNeAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "^1.6.2", + "execa": "~5.0.1", + "fs-extra": "^10.1.0", + "semver": "^7.3.7", + "tiny-glob": "^0.2.9" + } + }, + "node_modules/@alcalzone/pak/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@alcalzone/proper-lockfile": { + "version": "4.1.3-0", + "resolved": "https://registry.npmjs.org/@alcalzone/proper-lockfile/-/proper-lockfile-4.1.3-0.tgz", + "integrity": "sha512-8mlX3l5Xc+pYyiK9G156NyMosNuvvukL+TtNMqw7ti2zgVpz+WqPMPb2J1WU8I03Jbm4cXF+Q0D53hWvQqLQ0Q==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/@alcalzone/release-script": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script/-/release-script-3.8.0.tgz", + "integrity": "sha512-9H3imn8o9n3Ekpkie9TMgPeJfgT6WmklCMtOZ1wuwvMw/obNA0Ao1ZZ8CJfHk1YNjiLGmWn0kQFEGTqz4DoD7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alcalzone/release-script-core": "3.7.0", + "@alcalzone/release-script-plugin-changelog": "3.7.0", + "@alcalzone/release-script-plugin-exec": "3.7.0", + "@alcalzone/release-script-plugin-git": "3.8.0", + "@alcalzone/release-script-plugin-package": "3.7.3", + "@alcalzone/release-script-plugin-version": "3.7.0", + "alcalzone-shared": "^4.0.1", + "axios": "^1.6.2", + "enquirer": "^2.3.6", + "fs-extra": "^10.1.0", + "picocolors": "1.0.0", + "semver": "^7.5.2", + "source-map-support": "^0.5.21", + "yargs": "^17.4.1" + }, + "bin": { + "release-script": "bin/release.js" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-core": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-core/-/release-script-core-3.7.0.tgz", + "integrity": "sha512-4np4dBziwX/aNRhS/gpK8bwa0wpLe7oomzJ7YTUXf5bUtV/UTpN2a9tm5Bp7ElnisKj6N3AqHl4lVXRo4L9hYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.1.1" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-core/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@alcalzone/release-script-plugin-changelog": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-changelog/-/release-script-plugin-changelog-3.7.0.tgz", + "integrity": "sha512-AlLOIjIPP42uBmvcdYkfijYDzolyY6JmfbTmdxQDBLyrgYXnuUr2GaKxbpeWSbvcAuUhNvHCAyI6LI90X3OTEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alcalzone/release-script-core": "3.7.0", + "alcalzone-shared": "^4.0.1", + "fs-extra": "^10.1.0" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-changelog/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@alcalzone/release-script-plugin-exec": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-exec/-/release-script-plugin-exec-3.7.0.tgz", + "integrity": "sha512-ZhlKGhxa71mLyYB1/ojzik2RKcSAeIjuwKzlWRd6oUvKoZPe7eAjLYneXx5viQC6tvDJE4dvN1NlkFGWsSlZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alcalzone/release-script-core": "3.7.0", + "alcalzone-shared": "^4.0.1" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-git": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-git/-/release-script-plugin-git-3.8.0.tgz", + "integrity": "sha512-rI9EqSmvMWaNZ5xxOUBZjD4WOv1Enl+/ZxhUoTROq+K/9RYYHQaAXilGWNvnz2DYr14Q+Yx/fs54GXgAVf0scg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alcalzone/release-script-core": "3.7.0", + "fs-extra": "^10.1.0" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-git/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@alcalzone/release-script-plugin-iobroker": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-iobroker/-/release-script-plugin-iobroker-3.7.2.tgz", + "integrity": "sha512-ezXFyxx2irq7my3BmlBUrzT+QHNsldR9MQYkXs7uyH6lXSkudmqq5EiDW9WckT0Cj9YqIUzoOJhhnZA9M+XTvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alcalzone/release-script-core": "3.7.0", + "alcalzone-shared": "^4.0.1", + "axios": "^1.6.2", + "fs-extra": "^10.1.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-iobroker/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@alcalzone/release-script-plugin-lerna": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-lerna/-/release-script-plugin-lerna-3.7.0.tgz", + "integrity": "sha512-2afbpmOl8SF7WkqMP/mdU6Db8BjNIKUJVqfVQrkqruaAQnWn7DHCO8jrLnWhIN6BIF+1txj5vfOhWI7OtQy33A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alcalzone/release-script-core": "3.7.0", + "fs-extra": "^10.1.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-lerna/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@alcalzone/release-script-plugin-license": { + "version": "3.5.9", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-license/-/release-script-plugin-license-3.5.9.tgz", + "integrity": "sha512-Wa+RN968zYK0ZNkkaIRfD3Ru2ndWLD5e+VNbah4krtoeHqvQDiOPlfcWM0McU8q3ud+AMPwhYEwR1mh2lwi0gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alcalzone/release-script-core": "3.5.9", + "fs-extra": "^10.1.0", + "tiny-glob": "^0.2.9" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-license/node_modules/@alcalzone/release-script-core": { + "version": "3.5.9", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-core/-/release-script-core-3.5.9.tgz", + "integrity": "sha512-rRxosfZMtpDcIm+sPTdwP5oVRBLX1WLYImrp0nUhqOPNN/UD5l9TxNVXDhGUsstXhaRXXBYS2BnOQwR308OfyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.1.1" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-license/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@alcalzone/release-script-plugin-license/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@alcalzone/release-script-plugin-manual-review": { + "version": "3.5.9", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-manual-review/-/release-script-plugin-manual-review-3.5.9.tgz", + "integrity": "sha512-W/7T6lXfnfGo822g2LLU122SDYOk5V7GgPSL4+yr+mRvgAVwiUf4YBnv8C6fyO0/7cSGNYebmuIlRJcGc6sZCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alcalzone/release-script-core": "3.5.9" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-manual-review/node_modules/@alcalzone/release-script-core": { + "version": "3.5.9", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-core/-/release-script-core-3.5.9.tgz", + "integrity": "sha512-rRxosfZMtpDcIm+sPTdwP5oVRBLX1WLYImrp0nUhqOPNN/UD5l9TxNVXDhGUsstXhaRXXBYS2BnOQwR308OfyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.1.1" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-manual-review/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@alcalzone/release-script-plugin-package": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-package/-/release-script-plugin-package-3.7.3.tgz", + "integrity": "sha512-5oKSwbvHs9jRhARJ04eQ7xqig3a7NmPJlhtBxAqUM8+0cjs2g/V1xTxM6o8aZ09uRSdq80YGVxJm871SyszAWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alcalzone/pak": "^0.10.1", + "@alcalzone/release-script-core": "3.7.0", + "alcalzone-shared": "^4.0.1", + "fs-extra": "^10.1.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-package/node_modules/@alcalzone/pak": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@alcalzone/pak/-/pak-0.10.2.tgz", + "integrity": "sha512-v+kM7HlfIVNLDlGBcbZvrG3yVK3rPLH5kIoGRJbCcoHwpUqQbfEMzXAy1ZrfP+zbI5phHw2PhgrXZr3z6nh7Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "^1.6.2", + "execa": "~5.0.1", + "fs-extra": "^10.1.0", + "semver": "^7.3.7", + "tiny-glob": "^0.2.9" + } + }, + "node_modules/@alcalzone/release-script-plugin-package/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@alcalzone/release-script-plugin-version": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-version/-/release-script-plugin-version-3.7.0.tgz", + "integrity": "sha512-030NGQeB+mglVz/58cx0WO4QiFChaSd/pz35mnOrUc9PbKWRpzisTVOt4IhCV/++YiAVibJO31NMNzvipPdx4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alcalzone/release-script-core": "3.7.0", + "alcalzone-shared": "^4.0.1", + "fs-extra": "^10.1.0", + "semver": "^7.5.2", + "tiny-glob": "^0.2.9" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@alcalzone/release-script-plugin-version/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@alcalzone/release-script/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "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/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "license": "MIT", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@datalust/winston-seq": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@datalust/winston-seq/-/winston-seq-1.0.2.tgz", + "integrity": "sha512-TxmBkN/26j+8rC/yshm9t29DKSPN69cQuGyvRmufvhPQIU2SnDlQLZmEGsPL3vQYWoBTTgu7+foYs+HmgeOl/g==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "seq-logging": "^1.1.1", + "winston-transport": "^4.4.2" + }, + "peerDependencies": { + "winston": "^3.0.0" + } + }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.48.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.48.0.tgz", + "integrity": "sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "comment-parser": "1.4.1", + "esquery": "^1.6.0", + "jsdoc-type-pratt-parser": "~4.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "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, + "license": "MIT", + "peer": 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.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.0.tgz", + "integrity": "sha512-LPkkenkDqyzTFauZLLAPhIb48fj6drrfMvRGSL9tS3AcZBSVTllemLSNyCvHNNL2t797S/6DJNSIwRwXgMO/eQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", + "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@iobroker/db-base": { + "resolved": "packages/db-base", + "link": true + }, + "node_modules/@iobroker/db-objects-file": { + "resolved": "packages/db-objects-file", + "link": true + }, + "node_modules/@iobroker/db-objects-jsonl": { + "resolved": "packages/db-objects-jsonl", + "link": true + }, + "node_modules/@iobroker/db-objects-redis": { + "resolved": "packages/db-objects-redis", + "link": true + }, + "node_modules/@iobroker/db-states-file": { + "resolved": "packages/db-states-file", + "link": true + }, + "node_modules/@iobroker/db-states-jsonl": { + "resolved": "packages/db-states-jsonl", + "link": true + }, + "node_modules/@iobroker/db-states-redis": { + "resolved": "packages/db-states-redis", + "link": true + }, + "node_modules/@iobroker/eslint-config": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@iobroker/eslint-config/-/eslint-config-0.1.6.tgz", + "integrity": "sha512-7t3bllV/pD64flqUE96ndPmb3GRlc+gLkLTRT9UEUmHRDFjgalMVbPXNoB+ka129NieMo5HcD23XGuRJQ5VCQg==", + "dev": true, + "peerDependencies": { + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.10.0", + "@typescript-eslint/eslint-plugin": "^8.4.0", + "@typescript-eslint/parser": "^8.4.0", + "eslint": ">=9.10.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-jsdoc": "^50.2.2", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react": "^7.36.0", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-unicorn": "^55.0.0", + "globals": "^15.9.0", + "prettier": "^3.3.3", + "typescript-eslint": "^8.5.0" + } + }, + "node_modules/@iobroker/js-controller-adapter": { + "resolved": "packages/adapter", + "link": true + }, + "node_modules/@iobroker/js-controller-cli": { + "resolved": "packages/cli", + "link": true + }, + "node_modules/@iobroker/js-controller-common": { + "resolved": "packages/common", + "link": true + }, + "node_modules/@iobroker/js-controller-common-db": { + "resolved": "packages/common-db", + "link": true + }, + "node_modules/@iobroker/plugin-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@iobroker/plugin-base/-/plugin-base-2.0.1.tgz", + "integrity": "sha512-dCcvgNsvjBL5G7vxSJ9awP3W4f6Jj36aPdAKJh4EI6QYOTrlIKoct12VZPVF07Cu+PzKDTJbadHqd/SF2hs+Ow==", + "license": "MIT" + }, + "node_modules/@iobroker/plugin-sentry": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@iobroker/plugin-sentry/-/plugin-sentry-2.0.4.tgz", + "integrity": "sha512-cA36YYgInBVux3R/byn7D8lx8b4VIT+r5ZWNWFFa69XFAydLh3piq27veUSG07F8lDLuUZrMYCfAKliCbiwZ/Q==", + "license": "MIT", + "dependencies": { + "@iobroker/plugin-base": "^2.0.1", + "@sentry/integrations": "^7.55.2", + "@sentry/node": "^7.55.2", + "source-map-support": "^0.5.21" + } + }, + "node_modules/@iobroker/types": { + "resolved": "packages/types-public", + "link": true + }, + "node_modules/@iobroker/types-dev": { + "resolved": "packages/types-dev", + "link": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "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.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" + } + }, + "node_modules/@lerna/child-process": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-7.4.2.tgz", + "integrity": "sha512-je+kkrfcvPcwL5Tg8JRENRqlbzjdlZXyaR88UcnCdNW0AJ1jX9IfHRys1X7AwSroU2ug8ESNC+suoBw1vX833Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "execa": "^5.0.0", + "strong-log-transformer": "^2.1.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@lerna/create": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-7.4.2.tgz", + "integrity": "sha512-1wplFbQ52K8E/unnqB0Tq39Z4e+NEoNrpovEnl6GpsTUrC6WDp8+w0Le2uCBV0hXyemxChduCkLz4/y1H1wTeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "7.4.2", + "@npmcli/run-script": "6.0.2", + "@nx/devkit": ">=16.5.1 < 17", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "19.0.11", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "clone-deep": "4.0.1", + "cmd-shim": "6.0.1", + "columnify": "1.6.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "^8.2.0", + "dedent": "0.7.0", + "execa": "5.0.0", + "fs-extra": "^11.1.1", + "get-stream": "6.0.0", + "git-url-parse": "13.1.0", + "glob-parent": "5.1.2", + "globby": "11.1.0", + "graceful-fs": "4.2.11", + "has-unicode": "2.0.1", + "ini": "^1.3.8", + "init-package-json": "5.0.0", + "inquirer": "^8.2.4", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "js-yaml": "4.1.0", + "libnpmpublish": "7.3.0", + "load-json-file": "6.2.0", + "lodash": "^4.17.21", + "make-dir": "4.0.0", + "minimatch": "3.0.5", + "multimatch": "5.0.0", + "node-fetch": "2.6.7", + "npm-package-arg": "8.1.1", + "npm-packlist": "5.1.1", + "npm-registry-fetch": "^14.0.5", + "npmlog": "^6.0.2", + "nx": ">=16.5.1 < 17", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-queue": "6.6.2", + "p-reduce": "^2.1.0", + "pacote": "^15.2.0", + "pify": "5.0.0", + "read-cmd-shim": "4.0.0", + "read-package-json": "6.0.4", + "resolve-from": "5.0.0", + "rimraf": "^4.4.1", + "semver": "^7.3.4", + "signal-exit": "3.0.7", + "slash": "^3.0.0", + "ssri": "^9.0.1", + "strong-log-transformer": "2.1.0", + "tar": "6.1.11", + "temp-dir": "1.0.0", + "upath": "2.0.1", + "uuid": "^9.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "5.0.0", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@lerna/create/node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@lerna/create/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@lerna/create/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, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/@lerna/create/node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@lerna/create/node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@lerna/create/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@lerna/create/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@lerna/create/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@microsoft/api-extractor": { + "version": "7.47.9", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.47.9.tgz", + "integrity": "sha512-TTq30M1rikVsO5wZVToQT/dGyJY7UXJmjiRtkHPLb74Prx3Etw8+bX7Bv7iLuby6ysb7fuu1NFWqma+csym8Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/api-extractor-model": "7.29.8", + "@microsoft/tsdoc": "~0.15.0", + "@microsoft/tsdoc-config": "~0.17.0", + "@rushstack/node-core-library": "5.9.0", + "@rushstack/rig-package": "0.5.3", + "@rushstack/terminal": "0.14.2", + "@rushstack/ts-command-line": "4.22.8", + "lodash": "~4.17.15", + "minimatch": "~3.0.3", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "source-map": "~0.6.1", + "typescript": "5.4.2" + }, + "bin": { + "api-extractor": "bin/api-extractor" + } + }, + "node_modules/@microsoft/api-extractor-model": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.29.8.tgz", + "integrity": "sha512-t3Z/xcO6TRbMcnKGVMs4uMzv/gd5j0NhMiJIGjD4cJMeFJ1Hf8wnLSx37vxlRlL0GWlGJhnFgxvnaL6JlS+73g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "~0.15.0", + "@microsoft/tsdoc-config": "~0.17.0", + "@rushstack/node-core-library": "5.9.0" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/typescript": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz", + "integrity": "sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.17.0.tgz", + "integrity": "sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "0.15.0", + "ajv": "~8.12.0", + "jju": "~1.4.0", + "resolve": "~1.22.2" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@microsoft/tsdoc-config/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, + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/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, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents/node_modules/npm-bundled": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file/node_modules/glob": { + "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, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "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, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@nrwl/devkit": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.10.0.tgz", + "integrity": "sha512-fRloARtsDQoQgQ7HKEy0RJiusg/HSygnmg4gX/0n/Z+SUS+4KoZzvHjXc6T5ZdEiSjvLypJ+HBM8dQzIcVACPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/devkit": "16.10.0" + } + }, + "node_modules/@nrwl/tao": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.10.0.tgz", + "integrity": "sha512-QNAanpINbr+Pod6e1xNgFbzK1x5wmZl+jMocgiEFXZ67KHvmbD6MAQQr0MMz+GPhIu7EE4QCTLTyCEMlAG+K5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "nx": "16.10.0", + "tslib": "^2.3.0" + }, + "bin": { + "tao": "index.js" + } + }, + "node_modules/@nx/devkit": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.10.0.tgz", + "integrity": "sha512-IvKQqRJFDDiaj33SPfGd3ckNHhHi6ceEoqCbAP4UuMXOPPVOX6H0KVk+9tknkPb48B7jWIw6/AgOeWkBxPRO5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nrwl/devkit": "16.10.0", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "semver": "7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 15 <= 17" + } + }, + "node_modules/@nx/devkit/node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@nx/devkit/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nx/nx-darwin-arm64": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.10.0.tgz", + "integrity": "sha512-YF+MIpeuwFkyvM5OwgY/rTNRpgVAI/YiR0yTYCZR+X3AAvP775IVlusNgQ3oedTBRUzyRnI4Tknj1WniENFsvQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-darwin-x64": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.10.0.tgz", + "integrity": "sha512-ypi6YxwXgb0kg2ixKXE3pwf5myVNUgWf1CsV5OzVccCM8NzheMO51KDXTDmEpXdzUsfT0AkO1sk5GZeCjhVONg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-freebsd-x64": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.10.0.tgz", + "integrity": "sha512-UeEYFDmdbbDkTQamqvtU8ibgu5jQLgFF1ruNb/U4Ywvwutw2d4ruOMl2e0u9hiNja9NFFAnDbvzrDcMo7jYqYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.10.0.tgz", + "integrity": "sha512-WV3XUC2DB6/+bz1sx+d1Ai9q2Cdr+kTZRN50SOkfmZUQyEBaF6DRYpx/a4ahhxH3ktpNfyY8Maa9OEYxGCBkQA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.10.0.tgz", + "integrity": "sha512-aWIkOUw995V3ItfpAi5FuxQ+1e9EWLS1cjWM1jmeuo+5WtaKToJn5itgQOkvSlPz+HSLgM3VfXMvOFALNk125g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.10.0.tgz", + "integrity": "sha512-uO6Gg+irqpVcCKMcEPIQcTFZ+tDI02AZkqkP7koQAjniLEappd8DnUBSQdcn53T086pHpdc264X/ZEpXFfrKWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.10.0.tgz", + "integrity": "sha512-134PW/u/arNFAQKpqMJniC7irbChMPz+W+qtyKPAUXE0XFKPa7c1GtlI/wK2dvP9qJDZ6bKf0KtA0U/m2HMUOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.10.0.tgz", + "integrity": "sha512-q8sINYLdIJxK/iUx9vRk5jWAWb/2O0PAbOJFwv4qkxBv4rLoN7y+otgCZ5v0xfx/zztFgk/oNY4lg5xYjIso2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.10.0.tgz", + "integrity": "sha512-moJkL9kcqxUdJSRpG7dET3UeLIciwrfP08mzBQ12ewo8K8FzxU8ZUsTIVVdNrwt01CXOdXoweGfdQLjJ4qTURA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.10.0.tgz", + "integrity": "sha512-5iV2NKZnzxJwZZ4DM5JVbRG/nkhAbzEskKaLBB82PmYGKzaDHuMHP1lcPoD/rtYMlowZgNA/RQndfKvPBPwmXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@octokit/auth-token": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", + "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", + "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/graphql": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", + "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "18.1.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", + "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", + "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/tsconfig": "^1.0.2", + "@octokit/types": "^9.2.3" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=4" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", + "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^10.0.0" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", + "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/rest": { + "version": "19.0.11", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz", + "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/core": "^4.2.1", + "@octokit/plugin-paginate-rest": "^6.1.2", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^7.1.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/tsconfig": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", + "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@rushstack/node-core-library": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.9.0.tgz", + "integrity": "sha512-MMsshEWkTbXqxqFxD4gcIUWQOCeBChlGczdZbHfqmNZQFLHB3yWxDFSMHFUdu2/OB9NUk7Awn5qRL+rws4HQNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "~8.13.0", + "ajv-draft-04": "~1.0.0", + "ajv-formats": "~3.0.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/node-core-library/node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@rushstack/node-core-library/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@rushstack/node-core-library/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, + "license": "MIT" + }, + "node_modules/@rushstack/node-core-library/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@rushstack/rig-package": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.3.tgz", + "integrity": "sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "~1.22.1", + "strip-json-comments": "~3.1.1" + } + }, + "node_modules/@rushstack/terminal": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.14.2.tgz", + "integrity": "sha512-2fC1wqu1VCExKC0/L+0noVcFQEXEnoBOtCIex1TOjBzEDWcw8KzJjjj7aTP6mLxepG0XIyn9OufeFb6SFsa+sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rushstack/node-core-library": "5.9.0", + "supports-color": "~8.1.1" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/ts-command-line": { + "version": "4.22.8", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.22.8.tgz", + "integrity": "sha512-XbFjOoV7qZHJnSuFUHv0pKaFA4ixyCuki+xMjsMfDwfvQjs5MYG0IK5COal3tRnG7KCDe2l/G+9LrzYE/RJhgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rushstack/terminal": "0.14.2", + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "string-argv": "~0.3.1" + } + }, + "node_modules/@sentry-internal/tracing": { + "version": "7.119.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.119.0.tgz", + "integrity": "sha512-oKdFJnn+56f0DHUADlL8o9l8jTib3VDLbWQBVkjD9EprxfaCwt2m8L5ACRBdQ8hmpxCEo4I8/6traZ7qAdBUqA==", + "license": "MIT", + "dependencies": { + "@sentry/core": "7.119.0", + "@sentry/types": "7.119.0", + "@sentry/utils": "7.119.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/core": { + "version": "7.119.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.119.0.tgz", + "integrity": "sha512-CS2kUv9rAJJEjiRat6wle3JATHypB0SyD7pt4cpX5y0dN5dZ1JrF57oLHRMnga9fxRivydHz7tMTuBhSSwhzjw==", + "license": "MIT", + "dependencies": { + "@sentry/types": "7.119.0", + "@sentry/utils": "7.119.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/integrations": { + "version": "7.119.0", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.119.0.tgz", + "integrity": "sha512-OHShvtsRW0A+ZL/ZbMnMqDEtJddPasndjq+1aQXw40mN+zeP7At/V1yPZyFaURy86iX7Ucxw5BtmzuNy7hLyTA==", + "license": "MIT", + "dependencies": { + "@sentry/core": "7.119.0", + "@sentry/types": "7.119.0", + "@sentry/utils": "7.119.0", + "localforage": "^1.8.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node": { + "version": "7.119.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.119.0.tgz", + "integrity": "sha512-9PFzN8xS6U0oZCflpVxS2SSIsHkCaj7qYBlsvHj4CTGWfao9ImwrU6+smy4qoG6oxwPfoVb5pOOMb4WpWOvXcQ==", + "license": "MIT", + "dependencies": { + "@sentry-internal/tracing": "7.119.0", + "@sentry/core": "7.119.0", + "@sentry/integrations": "7.119.0", + "@sentry/types": "7.119.0", + "@sentry/utils": "7.119.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/types": { + "version": "7.119.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.119.0.tgz", + "integrity": "sha512-27qQbutDBPKGbuJHROxhIWc1i0HJaGLA90tjMu11wt0E4UNxXRX+UQl4Twu68v4EV3CPvQcEpQfgsViYcXmq+w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils": { + "version": "7.119.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.119.0.tgz", + "integrity": "sha512-ZwyXexWn2ZIe2bBoYnXJVPc2esCSbKpdc6+0WJa8eutXfHq3FRKg4ohkfCBpfxljQGEfP1+kfin945lA21Ka+A==", + "license": "MIT", + "dependencies": { + "@sentry/types": "7.119.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sigstore/bundle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sigstore/sign/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/sign/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sigstore/sign/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/sign/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@sigstore/sign/node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/sign/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, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/sign/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sigstore/sign/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/sign/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/commons/node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "lodash.get": "^4.4.2", + "type-detect": "^4.1.0" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "dev": true, + "license": "(Unlicense OR Apache-2.0)" + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tsconfig/node10": { + "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, + "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, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "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/@tsconfig/node18": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.4.tgz", + "integrity": "sha512-5xxU8vVs9/FNcvm3gE07fPbn9tl6tqGGWA9tSlwsUEkBxtRnTsNmwrV8gasZ9F/EobaSv9+nu8AxUKccw77JpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsd/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-saiCxzHRhUrRxQV2JhH580aQUZiKQUXI38FcAcikcfOomAil4G4lxT0RfrrKywoAYP/rqAdYXYmNRLppcd+hQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "4.3.19", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.19.tgz", + "integrity": "sha512-2hHHvQBVE2FiSK4eN0Br6snX9MtolHaTo/batnLjlGRhoQzlCL61iVpxoqO7SfFyOw+P/pwv+0zNHzKoGWz9Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", + "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/event-stream": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/event-stream/-/event-stream-4.0.5.tgz", + "integrity": "sha512-pQ/RR/iuBW8K8WmwYaaC1nkZH0cHonNAIw6ktG8BCNrNuqNeERfBzNIAOq6Z7tvLzpjcMV02SZ5pxAekAYQpWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", + "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, + "node_modules/@types/glossy": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@types/glossy/-/glossy-0.1.3.tgz", + "integrity": "sha512-CrdAR+ZgRf0MQnDAW4tUm2LpPmfC6sAWlrBwcX0O2oUKyZvseb6wlHZ0alo++DyaLckxqM4CUa+EfzyITJM7mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ioredis": { + "version": "4.28.10", + "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.28.10.tgz", + "integrity": "sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsonfile": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", + "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jsonwebtoken": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", + "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mime-types": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", + "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mocha": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.8.tgz", + "integrity": "sha512-HfMcUmy9hTMJh66VNcmeC9iVErIZJli2bszuXc6julh5YGuRb/W5OnkHjwLNYdFlMis0sY3If5SEAp+PktdJjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "18.19.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.50.tgz", + "integrity": "sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node-schedule": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/node-schedule/-/node-schedule-2.1.7.tgz", + "integrity": "sha512-G7Z3R9H7r3TowoH6D2pkzUHPhcJrDF4Jz1JOQ80AX0K2DWTHoN9VC94XzFAPNMdbW9TBzMZ3LjpFi7RYdbxtXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/pidusage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/pidusage/-/pidusage-2.0.5.tgz", + "integrity": "sha512-MIiyZI4/MK9UGUXWt0jJcCZhVw7YdhBuTOuqP/BjuLDLZ2PmmViMIQgZiWxtaMicQfAz/kMrZ5T7PKxFSkTeUA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prompt": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@types/prompt/-/prompt-1.1.9.tgz", + "integrity": "sha512-Yl0hzOWGDNCo2JHA8s7g7e9higzonlP/MssTMAIAwYmA7GugrB5WZ1DmrfrpJyJY8Y5UHFr8uaXDlxiyHt2jbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/revalidator": "*" + } + }, + "node_modules/@types/readline-sync": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@types/readline-sync/-/readline-sync-1.4.8.tgz", + "integrity": "sha512-BL7xOf0yKLA6baAX6MMOnYkoflUyj/c7y3pqMRfU0va7XlwHAOTOIo4x55P/qLfMsuaYdJJKubToLqRVmRtRZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/revalidator": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@types/revalidator/-/revalidator-0.3.12.tgz", + "integrity": "sha512-DsA2jHfz73JaIROVoMDd/x7nVWXBmEdDSoXB4yQlDzv/NCBkFY2fMHkyE6DGrvooLDAFe5QI6l9Wq0TgdopMtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sinon": { + "version": "10.0.20", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.20.tgz", + "integrity": "sha512-2APKKruFNCAZgx3daAyACGzWuJ028VVCUDk6o2rw/Z4PXT0ogwdV4KUegW0MwVs0Zu59auPXbbuBJHF12Sx1Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "node_modules/@types/sinon-chai": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.12.tgz", + "integrity": "sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", + "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tar": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/@types/tar/-/tar-6.1.13.tgz", + "integrity": "sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "minipass": "^4.0.0" + } + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@types/winston-syslog": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@types/winston-syslog/-/winston-syslog-2.4.3.tgz", + "integrity": "sha512-z9mO5hxDls4lSTth76sddIETonCMLguppeudk1YxBz4Y/OmdRkeKMfrOTfH74T9gN5WllLnF8XbHdiM8K6EL7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/glossy": "*", + "@types/node": "*", + "winston": "^3.0.0", + "winston-transport": "^4.3.0" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.6.0.tgz", + "integrity": "sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.6.0", + "@typescript-eslint/type-utils": "8.6.0", + "@typescript-eslint/utils": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.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/parser": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.6.0.tgz", + "integrity": "sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.6.0", + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/typescript-estree": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.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/scope-manager": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.6.0.tgz", + "integrity": "sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.0" + }, + "engines": { + "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": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.6.0.tgz", + "integrity": "sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.6.0", + "@typescript-eslint/utils": "8.6.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/@typescript-eslint/types": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.6.0.tgz", + "integrity": "sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.6.0.tgz", + "integrity": "sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.0", + "debug": "^4.3.4", + "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": "^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/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, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz", + "integrity": "sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.6.0", + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/typescript-estree": "8.6.0" + }, + "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" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.6.0.tgz", + "integrity": "sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/types": "8.6.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + } + }, + "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@zkochan/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dev": true, + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/aggregate-error/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/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, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/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, + "license": "MIT" + }, + "node_modules/alcalzone-shared": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/alcalzone-shared/-/alcalzone-shared-4.0.8.tgz", + "integrity": "sha512-Rr0efCjNL9lw7miDvU8exL87Y42ehsLU2jUGNQUphhnlvxnTMrHeApWgoOSGZvsE2PhxC3KO7Z+VpQ/IbuV3aA==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">=12" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-buffer-byte-length": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "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": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "peer": 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.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, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "license": "MIT", + "peer": 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": "3.0.0", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", + "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/byte-size": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", + "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cacache/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, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacache/node_modules/rimraf": { + "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, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/rimraf/node_modules/glob": { + "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, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "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" + } + }, + "node_modules/callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001663", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz", + "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0", + "peer": true + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", + "dev": true, + "license": "WTFPL", + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", + "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clean-regexp/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, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clean-stack/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cmd-shim": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz", + "integrity": "sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/color/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==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/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==", + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "license": "MIT", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true, + "license": "ISC" + }, + "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, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz", + "integrity": "sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^6.0.0", + "conventional-commits-parser": "^4.0.0", + "dateformat": "^3.0.3", + "get-pkg-repo": "^4.2.1", + "git-raw-commits": "^3.0.0", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^5.0.0", + "normalize-package-data": "^3.0.3", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-changelog-core/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz", + "integrity": "sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", + "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-filter": "^3.0.0", + "dateformat": "^3.0.3", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "meow": "^8.1.2", + "semver": "^7.0.0", + "split": "^1.0.1" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-changelog-writer/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/conventional-changelog-writer/node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conventional-changelog-writer/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conventional-changelog-writer/node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/conventional-changelog-writer/node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/conventional-changelog-writer/node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/conventional-changelog-writer/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conventional-commits-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", + "integrity": "sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-commits-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", + "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.3.5", + "meow": "^8.1.2", + "split2": "^3.2.2" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-commits-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/conventional-commits-parser/node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conventional-commits-parser/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conventional-commits-parser/node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/conventional-commits-parser/node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/conventional-commits-parser/node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/conventional-commits-parser/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conventional-recommended-bump": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz", + "integrity": "sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^3.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "git-raw-commits": "^3.0.0", + "git-semver-tags": "^5.0.0", + "meow": "^8.1.2" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/conventional-recommended-bump/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/conventional-recommended-bump/node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conventional-recommended-bump/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conventional-recommended-bump/node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/conventional-recommended-bump/node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/conventional-recommended-bump/node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/conventional-recommended-bump/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-js-compat": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cp-file": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-9.1.0.tgz", + "integrity": "sha512-3scnzFj/94eb7y4wyXRWwvzLFaQp87yyfTnChIjlfYrVqp5lVO3E2hIJMeQIltUT0K2ZAB3An1qXcBmwGyvuwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "nested-error-stacks": "^2.0.0", + "p-event": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cpy": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-9.0.1.tgz", + "integrity": "sha512-D9U0DR5FjTCN3oMTcFGktanHnAG5l020yvOCR1zKILmAyPP7I/9pl6NFgRbDcmSENtbK1sQLBz1p9HIOlroiNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^3.0.0", + "cp-file": "^9.1.0", + "globby": "^13.1.1", + "junk": "^4.0.0", + "micromatch": "^4.0.4", + "nested-error-stacks": "^2.1.0", + "p-filter": "^3.0.0", + "p-map": "^5.3.0" + }, + "engines": { + "node": "^12.20.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cpy-cli": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/cpy-cli/-/cpy-cli-4.2.0.tgz", + "integrity": "sha512-b04b+cbdr29CdpREPKw/itrfjO43Ty0Aj7wRM6M6LoE4GJxZJCk9Xp+Eu1IqztkKh3LxIBt1tDplENsa6KYprg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cpy": "^9.0.0", + "meow": "^10.1.2" + }, + "bin": { + "cpy": "cli.js" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "license": "MIT" + }, + "node_modules/cron-parser": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", + "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "license": "MIT", + "dependencies": { + "luxon": "^3.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==", + "engines": { + "node": ">=0.4.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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, + "license": "MIT", + "peer": 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, + "license": "MIT", + "peer": 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, + "license": "MIT", + "peer": 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": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decache": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", + "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", + "license": "MIT", + "dependencies": { + "callsite": "^1.0.0" + } + }, + "node_modules/decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-clone": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/deep-clone/-/deep-clone-3.0.3.tgz", + "integrity": "sha512-6jtXIlCBAwr3GP/7Il52clbIFIKAxg/pnNkL4/sE6+Oqb10MXMtm9LDZV2IAuwdaKV9VBm8hlxAFk9r6pF8XRw==", + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "license": "MIT", + "peer": 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-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/diskusage": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/diskusage/-/diskusage-1.2.0.tgz", + "integrity": "sha512-2u3OG3xuf5MFyzc4MctNRUKjjwK+UkovRYdD2ed/NZNZPrt0lqHnLKxGhlFVvAb4/oufIgQG3nWgwmeTbHOvXA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es6-promise": "^4.2.8", + "nan": "^2.18.0" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.2.tgz", + "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.27", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.27.tgz", + "integrity": "sha512-o37j1vZqCoEgBuWWXLHQgTN/KDKe7zwpiY5CPeq2RvUqOyJw9xnrULzZAEVQ5p4h+zjMk7hgtOoPdnLxr7m/jw==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "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, + "license": "MIT", + "peer": 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.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "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.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, + "license": "MIT", + "peer": 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, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "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.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, + "license": "MIT", + "peer": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "license": "MIT", + "optional": true + }, + "node_modules/esbuild": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", + "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.18", + "@esbuild/linux-loong64": "0.15.18", + "esbuild-android-64": "0.15.18", + "esbuild-android-arm64": "0.15.18", + "esbuild-darwin-64": "0.15.18", + "esbuild-darwin-arm64": "0.15.18", + "esbuild-freebsd-64": "0.15.18", + "esbuild-freebsd-arm64": "0.15.18", + "esbuild-linux-32": "0.15.18", + "esbuild-linux-64": "0.15.18", + "esbuild-linux-arm": "0.15.18", + "esbuild-linux-arm64": "0.15.18", + "esbuild-linux-mips64le": "0.15.18", + "esbuild-linux-ppc64le": "0.15.18", + "esbuild-linux-riscv64": "0.15.18", + "esbuild-linux-s390x": "0.15.18", + "esbuild-netbsd-64": "0.15.18", + "esbuild-openbsd-64": "0.15.18", + "esbuild-sunos-64": "0.15.18", + "esbuild-windows-32": "0.15.18", + "esbuild-windows-64": "0.15.18", + "esbuild-windows-arm64": "0.15.18" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", + "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", + "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", + "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", + "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", + "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", + "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", + "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", + "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", + "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", + "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", + "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", + "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", + "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", + "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", + "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", + "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", + "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", + "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", + "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", + "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.0.tgz", + "integrity": "sha512-yVS6XODx+tMFMDFcG4+Hlh+qG7RM6cCJXtQhCKLSsr3XkLvWggHjCqjfh0XsPPnt1c56oaT6PMgW9XWQQjdHXA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.11.0", + "@eslint/plugin-kit": "^0.2.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-formatter-pretty": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-4.1.0.tgz", + "integrity": "sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "^7.2.13", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "eslint-rule-docs": "^1.1.5", + "log-symbols": "^4.0.0", + "plur": "^4.0.0", + "string-width": "^4.2.0", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-formatter-pretty/node_modules/@types/eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "50.2.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.2.4.tgz", + "integrity": "sha512-020jA+dXaXdb+TML3ZJBvpPmzwbNROjnYuTYi/g6A5QEmEjhptz4oPJDKkOGMIByNxsPpdTLzSU1HYVqebOX1w==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@es-joy/jsdoccomment": "~0.48.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.3.6", + "escape-string-regexp": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.6.0", + "parse-imports": "^2.1.1", + "semver": "^7.6.3", + "spdx-expression-parse": "^4.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.36.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz", + "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.1.0-rc-fb9a90fa48-20240614", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0-rc-fb9a90fa48-20240614.tgz", + "integrity": "sha512-xsiRwaDNF5wWNC4ZHLut+x/YcAxksUd9Rizt7LaEn3bV8VyYRpXnRJQlLOfYaVy9esk4DFP4zPPnoNVjq5Gc0w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-unicorn": { + "version": "55.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-55.0.0.tgz", + "integrity": "sha512-n3AKiVpY2/uDcGrS3+QsYDkjPfaOrNrsfQxU9nt5nitd9KuvVXrfAvgCO9DYPSfap+Gqjw9EOrXIsBp5tlHZjA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.5", + "@eslint-community/eslint-utils": "^4.4.0", + "ci-info": "^4.0.0", + "clean-regexp": "^1.0.0", + "core-js-compat": "^3.37.0", + "esquery": "^1.5.0", + "globals": "^15.7.0", + "indent-string": "^4.0.0", + "is-builtin-module": "^3.2.1", + "jsesc": "^3.0.2", + "pluralize": "^8.0.0", + "read-pkg-up": "^7.0.1", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.10.0", + "semver": "^7.6.1", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=18.18" + }, + "funding": { + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=8.56.0" + } + }, + "node_modules/eslint-rule-docs": { + "version": "1.1.235", + "resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.235.tgz", + "integrity": "sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-scope": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "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, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.1.tgz", + "integrity": "sha512-4hFTjFbFzQa3aCLobpbPJR/U+VoL1wdV5ozOWjeet0AWDeYr9UFGM1eUFWHX+VtOWFq4p0xXUXfW1YxUaP4fpw==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "engines": { + "node": "> 0.1.90" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, + "node_modules/fast-glob": { + "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, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT", + "peer": 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, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/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, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/file-stream-rotator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz", + "integrity": "sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==", + "license": "MIT", + "dependencies": { + "moment": "^2.29.1" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT", + "optional": true + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/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, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "license": "MIT" + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "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" + } + }, + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-pkg-repo/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, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/get-pkg-repo/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/git-raw-commits": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", + "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dargs": "^7.0.0", + "meow": "^8.1.2", + "split2": "^3.2.2" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/git-raw-commits/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/git-raw-commits/node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/git-raw-commits/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/git-raw-commits/node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/git-raw-commits/node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/git-raw-commits/node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/git-raw-commits/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-semver-tags": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", + "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "meow": "^8.1.2", + "semver": "^7.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/git-semver-tags/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/git-semver-tags/node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/git-semver-tags/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/git-semver-tags/node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/git-semver-tags/node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/git-semver-tags/node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/git-semver-tags/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/git-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", + "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^8.1.0" + } + }, + "node_modules/git-url-parse": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz", + "integrity": "sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "git-up": "^7.0.0" + } + }, + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", + "dev": true, + "license": "BSD", + "dependencies": { + "ini": "^1.3.2" + } + }, + "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, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globals": { + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/glossy": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/glossy/-/glossy-0.1.7.tgz", + "integrity": "sha512-mTCC51QFadK75MvAhrL5nPVIP291NjML1guo10Sa7Yj04tJU4V++Vgm780NIddg9etQD9D8FM67hFGqM8EE2HQ==", + "optional": true, + "engines": { + "node": ">= 0.2.5" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "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, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "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", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^5.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ignore-walk/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true, + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/init-package-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-5.0.0.tgz", + "integrity": "sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^10.0.0", + "promzard": "^1.0.0", + "read": "^2.0.0", + "read-package-json": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/init-package-json/node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/init-package-json/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, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/init-package-json/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/internal-slot": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/iobroker.js-controller": { + "resolved": "packages/controller", + "link": true + }, + "node_modules/ioredis": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.28.5.tgz", + "integrity": "sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==", + "license": "MIT", + "dependencies": { + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.1", + "denque": "^1.1.0", + "lodash.defaults": "^4.2.0", + "lodash.flatten": "^4.4.0", + "lodash.isarguments": "^3.1.0", + "p-map": "^2.1.0", + "redis-commands": "1.7.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "node_modules/ioredis/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/irregular-plurals": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", + "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", + "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/is-array-buffer": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "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, + "license": "MIT", + "dependencies": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ssh": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", + "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "protocols": "^2.0.1" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "license": "MIT", + "peer": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT" + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", + "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "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, + "license": "MIT", + "peer": 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", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/junk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", + "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/just-extend": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "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, + "license": "MIT", + "peer": 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", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" + }, + "node_modules/lerna": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-7.4.2.tgz", + "integrity": "sha512-gxavfzHfJ4JL30OvMunmlm4Anw7d7Tq6tdVHzUukLdS9nWnxCN/QB21qR+VJYp5tcyXogHKbdUEGh6qmeyzxSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "7.4.2", + "@lerna/create": "7.4.2", + "@npmcli/run-script": "6.0.2", + "@nx/devkit": ">=16.5.1 < 17", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "19.0.11", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "clone-deep": "4.0.1", + "cmd-shim": "6.0.1", + "columnify": "1.6.0", + "conventional-changelog-angular": "7.0.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "^8.2.0", + "dedent": "0.7.0", + "envinfo": "7.8.1", + "execa": "5.0.0", + "fs-extra": "^11.1.1", + "get-port": "5.1.1", + "get-stream": "6.0.0", + "git-url-parse": "13.1.0", + "glob-parent": "5.1.2", + "globby": "11.1.0", + "graceful-fs": "4.2.11", + "has-unicode": "2.0.1", + "import-local": "3.1.0", + "ini": "^1.3.8", + "init-package-json": "5.0.0", + "inquirer": "^8.2.4", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "jest-diff": ">=29.4.3 < 30", + "js-yaml": "4.1.0", + "libnpmaccess": "7.0.2", + "libnpmpublish": "7.3.0", + "load-json-file": "6.2.0", + "lodash": "^4.17.21", + "make-dir": "4.0.0", + "minimatch": "3.0.5", + "multimatch": "5.0.0", + "node-fetch": "2.6.7", + "npm-package-arg": "8.1.1", + "npm-packlist": "5.1.1", + "npm-registry-fetch": "^14.0.5", + "npmlog": "^6.0.2", + "nx": ">=16.5.1 < 17", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-pipe": "3.1.0", + "p-queue": "6.6.2", + "p-reduce": "2.1.0", + "p-waterfall": "2.1.1", + "pacote": "^15.2.0", + "pify": "5.0.0", + "read-cmd-shim": "4.0.0", + "read-package-json": "6.0.4", + "resolve-from": "5.0.0", + "rimraf": "^4.4.1", + "semver": "^7.3.8", + "signal-exit": "3.0.7", + "slash": "3.0.0", + "ssri": "^9.0.1", + "strong-log-transformer": "2.1.0", + "tar": "6.1.11", + "temp-dir": "1.0.0", + "typescript": ">=3 < 6", + "upath": "2.0.1", + "uuid": "^9.0.0", + "validate-npm-package-license": "3.0.4", + "validate-npm-package-name": "5.0.0", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4" + }, + "bin": { + "lerna": "dist/cli.js" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/lerna/node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lerna/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lerna/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, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/lerna/node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lerna/node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/lerna/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/lerna/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lerna/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libnpmaccess": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-7.0.2.tgz", + "integrity": "sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/libnpmaccess/node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/libnpmaccess/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, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/libnpmaccess/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/libnpmpublish": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-7.3.0.tgz", + "integrity": "sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg==", + "dev": true, + "license": "ISC", + "dependencies": { + "ci-info": "^3.6.1", + "normalize-package-data": "^5.0.0", + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3", + "proc-log": "^3.0.0", + "semver": "^7.3.7", + "sigstore": "^1.4.0", + "ssri": "^10.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/libnpmpublish/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/libnpmpublish/node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/libnpmpublish/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, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/libnpmpublish/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/libnpmpublish/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, + "license": "BSD-2-Clause", + "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/libnpmpublish/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/libnpmpublish/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lines-and-columns": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/loadavg-windows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/loadavg-windows/-/loadavg-windows-1.1.1.tgz", + "integrity": "sha512-ncSyH121LuN6OENPSohTAS2W85J3NYVIfjsVcK4spViQbHlQUXhGKd8VYhrqWyjtwwSTw4g3rrDraNoSJWRLgw==", + "license": "MIT", + "dependencies": { + "weak-daemon": "1.0.3" + } + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "license": "Apache-2.0", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/localforage/node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/logform": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", + "integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/long-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", + "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/luxon": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", + "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/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, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", + "license": "MIT" + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/meow": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.2.tgz", + "integrity": "sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", + "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", + "dev": true, + "license": "MIT", + "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.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/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, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/multimatch/node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" + }, + "node_modules/mylas": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/mylas/-/mylas-2.1.13.tgz", + "integrity": "sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/raouldeheer" + } + }, + "node_modules/nan": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", + "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", + "license": "MIT", + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nested-error-stacks": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", + "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nise": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", + "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/text-encoding": "^0.7.2", + "just-extend": "^6.2.0", + "path-to-regexp": "^6.2.1" + } + }, + "node_modules/nise/node_modules/@sinonjs/fake-timers": { + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.3.1.tgz", + "integrity": "sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", + "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "dev": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "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, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/rimraf": { + "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, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/node-schedule": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz", + "integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==", + "license": "MIT", + "dependencies": { + "cron-parser": "^4.2.0", + "long-timeout": "0.1.1", + "sorted-array-functions": "^1.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/node.extend": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-2.0.3.tgz", + "integrity": "sha512-xwADg/okH48PvBmRZyoX8i8GJaKuJ1CqlqotlZOhUio8egD1P5trJupHKBzcPjSF9ifK2gPcEICRBnkfPqQXZw==", + "license": "(MIT OR GPL-2.0)", + "dependencies": { + "hasown": "^2.0.0", + "is": "^3.3.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true, + "license": "ISC" + }, + "node_modules/npm-package-arg": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", + "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^3.0.6", + "semver": "^7.0.0", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, + "license": "ISC", + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/npm-packlist": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", + "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^1.1.2", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz", + "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest/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, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-registry-fetch/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm-registry-fetch/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-registry-fetch/node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/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, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-registry-fetch/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nx": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/nx/-/nx-16.10.0.tgz", + "integrity": "sha512-gZl4iCC0Hx0Qe1VWmO4Bkeul2nttuXdPpfnlcDKSACGu3ZIo+uySqwOF8yBAxSTIf8xe2JRhgzJN1aFkuezEBg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@nrwl/tao": "16.10.0", + "@parcel/watcher": "2.0.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.0-rc.46", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.0.0", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.3.1", + "dotenv-expand": "~10.0.0", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^11.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "lines-and-columns": "~2.0.3", + "minimatch": "3.0.5", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.5.3", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "16.10.0", + "@nx/nx-darwin-x64": "16.10.0", + "@nx/nx-freebsd-x64": "16.10.0", + "@nx/nx-linux-arm-gnueabihf": "16.10.0", + "@nx/nx-linux-arm64-gnu": "16.10.0", + "@nx/nx-linux-arm64-musl": "16.10.0", + "@nx/nx-linux-x64-gnu": "16.10.0", + "@nx/nx-linux-x64-musl": "16.10.0", + "@nx/nx-win32-arm64-msvc": "16.10.0", + "@nx/nx-win32-x64-msvc": "16.10.0" + }, + "peerDependencies": { + "@swc-node/register": "^1.6.7", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/nx/node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nx/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "license": "MIT", + "peer": 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.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "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" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-timeout": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", + "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-map": "^5.1.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-waterfall": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pacote/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/pacote/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pacote/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pacote/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pacote/node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pacote/node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/ignore-walk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/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, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/pacote/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pacote/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/pacote/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pacote/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pacote/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-imports": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz", + "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==", + "dev": true, + "license": "Apache-2.0 AND MIT", + "peer": true, + "dependencies": { + "es-module-lexer": "^1.5.3", + "slashes": "^3.0.12" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-path": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", + "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", + "dev": true, + "license": "MIT", + "dependencies": { + "protocols": "^2.0.0" + } + }, + "node_modules/parse-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", + "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-path": "^7.0.0" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "license": [ + "MIT", + "Apache2" + ], + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidusage": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-3.0.2.tgz", + "integrity": "sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/plimit-lit": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/plimit-lit/-/plimit-lit-1.6.1.tgz", + "integrity": "sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "queue-lit": "^1.5.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/plur": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", + "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "irregular-plurals": "^3.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "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, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promisify-child-process": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/promisify-child-process/-/promisify-child-process-4.1.2.tgz", + "integrity": "sha512-APnkIgmaHNJpkAn7k+CrJSi9WMuff5ctYFbD0CO2XIPkM8yO7d/ShouU2clywbpHV/DUsyc4bpJCsNgddNtx4g==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/prompt": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.3.0.tgz", + "integrity": "sha512-ZkaRWtaLBZl7KKAKndKYUL8WqNT+cQHKRZnT4RYYms48jQkFw3rrBL+/N5K/KtdEveHkxs982MX2BkDKub2ZMg==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "async": "3.2.3", + "read": "1.0.x", + "revalidator": "0.1.x", + "winston": "2.x" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/prompt/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==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/prompt/node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "license": "MIT" + }, + "node_modules/prompt/node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "license": "ISC", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/prompt/node_modules/winston": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.7.tgz", + "integrity": "sha512-vLB4BqzCKDnnZH9PHGoS2ycawueX4HLqENXQitvFHczhgW2vFpSOn31LZtVr1KU8YTw7DS4tM+cqyovxo8taVg==", + "license": "MIT", + "dependencies": { + "async": "^2.6.4", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "stack-trace": "0.0.x" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/prompt/node_modules/winston/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/promzard": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.2.tgz", + "integrity": "sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "read": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/promzard/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/promzard/node_modules/read": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz", + "integrity": "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==", + "dev": true, + "license": "ISC", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/protocols": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", + "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-lit": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/queue-lit/-/queue-lit-1.5.2.tgz", + "integrity": "sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/read": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read/-/read-2.1.0.tgz", + "integrity": "sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-cmd-shim": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", + "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/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, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/read-package-json/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/read-package-json/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, + "license": "BSD-2-Clause", + "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/read-package-json/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg/node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/read/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", + "license": "BSD" + }, + "node_modules/readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/redent/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/redent/node_modules/strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/redis-commands": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", + "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==", + "license": "MIT" + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "license": "MIT", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/regexp.prototype.flags": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regjsparser": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz", + "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/respjs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/respjs/-/respjs-4.2.0.tgz", + "integrity": "sha512-/W219Wpyo0m6bVN9z/rqhe0ek6nJ7Tus9WhbWpA8aJI8FxtMrQw1u8RStxOswTyUrW/NXaKXuaNfKZFKYbwXkg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/revalidator": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "integrity": "sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg==", + "license": "Apache 2.0", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "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, + "license": "MIT", + "peer": 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-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "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" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/seq-logging": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/seq-logging/-/seq-logging-1.1.2.tgz", + "integrity": "sha512-9n7bCIHiMdBene104oSEa2917OcNBw+uee2v+we4AQxmjqt/aeQkWy1296IvGsogbj5fK6wuDNhVhm/DYmauVA==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "license": "ISC" + }, + "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, + "license": "MIT", + "peer": 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, + "license": "MIT", + "peer": 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/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", + "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, + "node_modules/side-channel": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "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" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sigstore": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", + "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", + "@sigstore/tuf": "^1.0.3", + "make-fetch-happen": "^11.0.1" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sigstore/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sigstore/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sigstore/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/sigstore/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sigstore/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore/node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sigstore/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, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/sigstore/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sigstore/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sigstore/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sigstore/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/sinon": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.2.0.tgz", + "integrity": "sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw==", + "deprecated": "16.1.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^10.3.0", + "@sinonjs/samsam": "^8.0.0", + "diff": "^5.1.0", + "nise": "^5.1.4", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/sinon-chai": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", + "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", + "dev": true, + "license": "(BSD-2-Clause OR WTFPL)", + "peerDependencies": { + "chai": "^4.0.0", + "sinon": ">=4.0.0" + } + }, + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slashes": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", + "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sorted-array-functions": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", + "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "license": "ISC", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", + "license": "MIT" + }, + "node_modules/stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "license": "MIT", + "peer": 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", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "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.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "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" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/trim-newlines": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "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, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-json-schema-generator": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-json-schema-generator/-/ts-json-schema-generator-1.2.0.tgz", + "integrity": "sha512-tUMeO3ZvA12d3HHh7T/AK8W5hmUhDRNtqWRHSMN3ZRbUFt+UmV0oX8k1RK4SA+a+BKNHpmW2v06MS49e8Fi3Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.11", + "commander": "^9.4.1", + "glob": "^8.0.3", + "json5": "^2.2.1", + "normalize-path": "^3.0.0", + "safe-stable-stringify": "^2.4.1", + "typescript": "~4.9.3" + }, + "bin": { + "ts-json-schema-generator": "bin/ts-json-schema-generator" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ts-json-schema-generator/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ts-node": { + "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", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "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/tsc-alias": { + "version": "1.8.10", + "resolved": "https://registry.npmjs.org/tsc-alias/-/tsc-alias-1.8.10.tgz", + "integrity": "sha512-Ibv4KAWfFkFdKJxnWfVtdOmB0Zi1RJVxcbPGiCDsFpCQSsmpWyuzHG3rQyI5YkobWwxFPEyQfu1hdo4qLG2zPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.3", + "commander": "^9.0.0", + "globby": "^11.0.4", + "mylas": "^2.1.9", + "normalize-path": "^3.0.0", + "plimit-lit": "^1.2.6" + }, + "bin": { + "tsc-alias": "dist/bin/index.js" + } + }, + "node_modules/tsc-alias/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tsc-alias/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tsd": { + "version": "0.31.2", + "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.31.2.tgz", + "integrity": "sha512-VplBAQwvYrHzVihtzXiUVXu5bGcr7uH1juQZ1lmKgkuGNGT+FechUCqmx9/zk7wibcqR2xaNEwCkDyKh+VVZnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tsd/typescript": "~5.4.3", + "eslint-formatter-pretty": "^4.1.0", + "globby": "^11.0.1", + "jest-diff": "^29.0.3", + "meow": "^9.0.0", + "path-exists": "^4.0.0", + "read-pkg-up": "^7.0.0" + }, + "bin": { + "tsd": "dist/cli.js" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/tsd/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tsd/node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tsd/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tsd/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tsd/node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tsd/node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tsd/node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsd/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tsd/node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tsd/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tuf-js/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/tuf-js/node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tuf-js/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tuf-js/node_modules/glob/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/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, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tuf-js/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tuf-js/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "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, + "license": "MIT", + "peer": 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, + "license": "MIT", + "peer": 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, + "license": "MIT", + "peer": 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.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, + "license": "MIT", + "peer": 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", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/typedoc": { + "version": "0.25.13", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz", + "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.7" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.17.1.tgz", + "integrity": "sha512-QzdU3fj0Kzw2XSdoL15ExLASt2WPqD7FbLeaqwT70+XjKyTshBnUlQA5nNREO1C2P8Uen0CDjsBLMsCQ+zd0lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.24.0" + } + }, + "node_modules/typedoc-plugin-missing-exports": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-2.3.0.tgz", + "integrity": "sha512-iI9ITNNLlbsLCBBeYDyu0Qqp3GN/9AGyWNKg8bctRXuZEPT7G1L+0+MNWG9MsHcf/BFmNbXL0nQ8mC/tXRicog==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typedoc": "0.24.x || 0.25.x" + } + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.6.0.tgz", + "integrity": "sha512-eEhhlxCEpCd4helh3AO1hk0UP2MvbRi9CtIAJTVPQjuSXOOO2jsEacNi4UdcJzZJbeuVg1gMhtZ8UYb+NFYPrA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.6.0", + "@typescript-eslint/parser": "8.6.0", + "@typescript-eslint/utils": "8.6.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/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unix-dgram": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/unix-dgram/-/unix-dgram-2.0.6.tgz", + "integrity": "sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg==", + "hasInstallScript": true, + "license": "ISC", + "optional": true, + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.16.0" + }, + "engines": { + "node": ">=0.10.48" + } + }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-browserslist-db/node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/weak-daemon": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/weak-daemon/-/weak-daemon-1.0.3.tgz", + "integrity": "sha512-9OLYp5qQSxpnTIyuA1zJ7at3DV2DSBcbdXduC/3QFPeYjF30Lh1nfBrG+VLf4QUvZPz2lXFPu08oIRzWQfucVQ==", + "license": "MIT", + "engines": { + "node": ">=4.8.7" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "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, + "license": "MIT", + "peer": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/winston": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.14.2.tgz", + "integrity": "sha512-CO8cdpBB2yqzEf8v895L+GNKYJiEq8eKlHU38af3snQBQ+sdAIUepjMSguOIJC7ICbzm0ZI+Af2If4vIJrtmOg==", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.6.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.7.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-daily-rotate-file": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-5.0.0.tgz", + "integrity": "sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==", + "license": "MIT", + "dependencies": { + "file-stream-rotator": "^0.6.1", + "object-hash": "^3.0.0", + "triple-beam": "^1.4.1", + "winston-transport": "^4.7.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "winston": "^3" + } + }, + "node_modules/winston-seq-updated": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/winston-seq-updated/-/winston-seq-updated-1.0.4.tgz", + "integrity": "sha512-PBcD6PHdN/6XqtFIeW/EnlVFD3hFulZsdSbDyVd/xp0MjHpTPAfBBhmSDUf72E+LQxSS952ctmI6XG1cS3nkTg==", + "license": "MIT", + "optional": true, + "dependencies": { + "seq-logging": "0.4.6", + "winston-transport": "^4.3.0" + } + }, + "node_modules/winston-seq-updated/node_modules/seq-logging": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/seq-logging/-/seq-logging-0.4.6.tgz", + "integrity": "sha512-cCkhK86q+PfLeC21eaOWBcXyPUROuRq/e9EaJIT1BkmEdTHjvIgViDn7Tgw+tdzFhezvn7buDfoXWD8xPtQfeg==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/winston-syslog": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/winston-syslog/-/winston-syslog-2.7.1.tgz", + "integrity": "sha512-MrU5gSwXgEbHwz5wFhn1rZtSCbRcP1PEB8zU49tgsfjQ63EjIVAkQpXmMocdbTLnTJ2cW3gLW6gmoOOOhyJZgg==", + "license": "MIT", + "optional": true, + "dependencies": { + "glossy": "^0.1.7", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, + "engines": { + "node": ">= 8" + }, + "optionalDependencies": { + "unix-dgram": "2.0.6" + }, + "peerDependencies": { + "winston": "^3.8.2" + } + }, + "node_modules/winston-transport": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.1.tgz", + "integrity": "sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==", + "license": "MIT", + "dependencies": { + "logform": "^2.6.1", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/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, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/write-json-file/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/write-json-file/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/write-pkg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=6" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/adapter": { + "name": "@iobroker/js-controller-adapter", + "version": "6.0.12-alpha.0-20240922-1ea0ace13", + "license": "MIT", + "dependencies": { + "@alcalzone/pak": "^0.8.1", + "@iobroker/db-objects-file": "file:../db-objects-file", + "@iobroker/db-objects-jsonl": "file:../db-objects-jsonl", + "@iobroker/db-objects-redis": "file:../db-objects-redis", + "@iobroker/db-states-file": "file:../db-states-file", + "@iobroker/db-states-jsonl": "file:../db-states-jsonl", + "@iobroker/db-states-redis": "file:../db-states-redis", + "@iobroker/js-controller-common": "file:../common", + "@iobroker/js-controller-common-db": "file:../common-db", + "@iobroker/plugin-base": "~2.0.1", + "deep-clone": "^3.0.3", + "fs-extra": "^11.1.0", + "jsonwebtoken": "^9.0.0", + "node-schedule": "^2.1.0", + "node.extend": "^2.0.2", + "pidusage": "^3.0.2", + "readline": "^1.3.0", + "semver": "^7.5.2", + "yargs": "^17.7.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "packages/adapter/node_modules/@alcalzone/pak": { + "version": "0.8.1", + "license": "MIT", + "dependencies": { + "axios": "^0.26.0", + "execa": "^5.0.0", + "fs-extra": "^10.0.1" + } + }, + "packages/adapter/node_modules/@alcalzone/pak/node_modules/fs-extra": { + "version": "10.1.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "packages/adapter/node_modules/axios": { + "version": "0.26.1", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.8" + } + }, + "packages/cli": { + "name": "@iobroker/js-controller-cli", + "version": "6.0.12-alpha.0-20240922-1ea0ace13", + "license": "MIT", + "dependencies": { + "@iobroker/js-controller-common": "file:../common", + "@iobroker/js-controller-common-db": "file:../common-db", + "@iobroker/plugin-base": "~2.0.1", + "axios": "^1.7.4", + "chokidar": "^3.5.3", + "debug": "^4.3.4", + "deep-clone": "^3.0.3", + "event-stream": "^4.0.1", + "fs-extra": "^11.1.0", + "mime-types": "^2.1.35", + "promisify-child-process": "^4.1.1", + "readline-sync": "^1.4.10", + "semver": "^7.5.2", + "yargs": "^17.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "packages/common": { + "name": "@iobroker/js-controller-common", + "version": "6.0.12-alpha.0-20240922-1ea0ace13", + "license": "MIT", + "dependencies": { + "@iobroker/db-objects-file": "file:../db-objects-file", + "@iobroker/db-objects-jsonl": "file:../db-objects-jsonl", + "@iobroker/db-objects-redis": "file:../db-objects-redis", + "@iobroker/db-states-file": "file:../db-states-file", + "@iobroker/db-states-jsonl": "file:../db-states-jsonl", + "@iobroker/db-states-redis": "file:../db-states-redis", + "@iobroker/js-controller-common-db": "file:../common-db", + "fs-extra": "^11.1.0", + "jszip": "^3.10.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "optionalDependencies": { + "winston-seq-updated": "^1.0.4", + "winston-syslog": "^2.6.0" + } + }, + "packages/common-db": { + "name": "@iobroker/js-controller-common-db", + "version": "6.0.12-alpha.0-20240922-1ea0ace13", + "license": "MIT", + "dependencies": { + "@alcalzone/pak": "^0.8.1", + "axios": "^1.7.4", + "ci-info": "^3.8.0", + "deep-clone": "^3.0.3", + "event-stream": "^4.0.1", + "fs-extra": "^11.1.0", + "jsonwebtoken": "^9.0.0", + "node-forge": "^1.3.0", + "node.extend": "^2.0.2", + "promisify-child-process": "^4.1.2", + "readline": "^1.3.0", + "semver": "^7.5.2", + "triple-beam": "^1.3.0", + "winston": "^3.7.2", + "winston-daily-rotate-file": "^5.0.0", + "winston-transport": "^4.5.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@datalust/winston-seq": "^1.0.0", + "diskusage": "^1.1.3", + "winston-syslog": "^2.6.0" + } + }, + "packages/common-db/node_modules/@alcalzone/pak": { + "version": "0.8.1", + "license": "MIT", + "dependencies": { + "axios": "^0.26.0", + "execa": "^5.0.0", + "fs-extra": "^10.0.1" + } + }, + "packages/common-db/node_modules/@alcalzone/pak/node_modules/axios": { + "version": "0.26.1", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.8" + } + }, + "packages/common-db/node_modules/@alcalzone/pak/node_modules/fs-extra": { + "version": "10.1.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "packages/common-db/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/controller": { + "name": "iobroker.js-controller", + "version": "6.0.12-alpha.0-20240922-1ea0ace13", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@alcalzone/esbuild-register": "^2.5.1-1", + "@iobroker/db-objects-file": "file:../db-objects-file", + "@iobroker/db-objects-jsonl": "file:../db-objects-jsonl", + "@iobroker/db-objects-redis": "file:../db-objects-redis", + "@iobroker/db-states-file": "file:../db-states-file", + "@iobroker/db-states-jsonl": "file:../db-states-jsonl", + "@iobroker/db-states-redis": "file:../db-states-redis", + "@iobroker/js-controller-adapter": "file:../adapter", + "@iobroker/js-controller-cli": "file:../cli", + "@iobroker/js-controller-common": "file:../common", + "@iobroker/js-controller-common-db": "file:../common-db", + "@iobroker/plugin-base": "~2.0.1", + "@iobroker/plugin-sentry": "~2.0.4", + "axios": "^1.7.4", + "cron-parser": "^4.9.0", + "debug": "^4.3.4", + "decache": "^4.6.1", + "deep-clone": "^3.0.3", + "fs-extra": "^11.1.0", + "jsonwebtoken": "^9.0.0", + "loadavg-windows": "^1.1.1", + "node-schedule": "^2.1.1", + "pidusage": "^3.0.2", + "promisify-child-process": "^4.1.1", + "prompt": "^1.2.2", + "readline-sync": "^1.4.10", + "semver": "^7.5.2", + "tar": "^6.2.1" + }, + "bin": { + "iobroker": "iobroker.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "packages/controller/node_modules/minipass": { + "version": "5.0.0", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "packages/controller/node_modules/tar": { + "version": "6.2.1", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/db-base": { + "name": "@iobroker/db-base", + "version": "6.0.12-alpha.0-20240922-1ea0ace13", + "license": "MIT", + "dependencies": { + "@iobroker/js-controller-common-db": "file:../common-db", + "deep-clone": "^3.0.3", + "fs-extra": "^11.1.0", + "respjs": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "packages/db-objects-file": { + "name": "@iobroker/db-objects-file", + "version": "6.0.12-alpha.0-20240922-1ea0ace13", + "license": "Apache 2.0", + "dependencies": { + "@iobroker/db-base": "file:../db-base", + "@iobroker/db-objects-redis": "file:../db-objects-redis", + "deep-clone": "^3.0.3", + "fs-extra": "^11.1.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "packages/db-objects-jsonl": { + "name": "@iobroker/db-objects-jsonl", + "version": "6.0.12-alpha.0-20240922-1ea0ace13", + "license": "Apache 2.0", + "dependencies": { + "@alcalzone/jsonl-db": "~3.1.1", + "@iobroker/db-base": "file:../db-base", + "@iobroker/db-objects-file": "file:../db-objects-file", + "@iobroker/db-objects-redis": "file:../db-objects-redis", + "deep-clone": "^3.0.3", + "fs-extra": "^11.1.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "packages/db-objects-redis": { + "name": "@iobroker/db-objects-redis", + "version": "6.0.12-alpha.0-20240922-1ea0ace13", + "license": "Apache 2.0", + "dependencies": { + "@iobroker/db-base": "file:../db-base", + "deep-clone": "^3.0.3", + "ioredis": "^4.28.2", + "mime-types": "^2.1.35", + "node.extend": "^2.0.2", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=16.4.0" + } + }, + "packages/db-states-file": { + "name": "@iobroker/db-states-file", + "version": "6.0.12-alpha.0-20240922-1ea0ace13", + "license": "MIT", + "dependencies": { + "@iobroker/db-base": "file:../db-base", + "@iobroker/db-states-redis": "file:../db-states-redis" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "packages/db-states-jsonl": { + "name": "@iobroker/db-states-jsonl", + "version": "6.0.12-alpha.0-20240922-1ea0ace13", + "license": "MIT", + "dependencies": { + "@alcalzone/jsonl-db": "~3.1.1", + "@iobroker/db-base": "file:../db-base", + "@iobroker/db-states-file": "file:../db-states-file", + "@iobroker/db-states-redis": "file:../db-states-redis" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "packages/db-states-redis": { + "name": "@iobroker/db-states-redis", + "version": "6.0.12-alpha.0-20240922-1ea0ace13", + "license": "MIT", + "dependencies": { + "@iobroker/db-base": "file:../db-base", + "ioredis": "^4.28.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "packages/types-dev": { + "name": "@iobroker/types-dev", + "version": "6.0.12-alpha.0-20240922-1ea0ace13", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } + }, + "packages/types-public": { + "name": "@iobroker/types", + "version": "6.0.12-alpha.0-20240922-1ea0ace13", + "license": "MIT", + "devDependencies": { + "tsd": "^0.31.2" + }, + "engines": { + "node": ">=12.0.0" + } } + } } diff --git a/package.json b/package.json index 8163c85c7b..6a39eedc46 100644 --- a/package.json +++ b/package.json @@ -20,11 +20,13 @@ }, "devDependencies": { "@alcalzone/esm2cjs": "^1.1.2", + "@alcalzone/pak": "^0.11.0", "@alcalzone/release-script": "~3.8.0", "@alcalzone/release-script-plugin-iobroker": "~3.7.0", "@alcalzone/release-script-plugin-lerna": "~3.7.0", "@alcalzone/release-script-plugin-license": "~3.5.0", "@alcalzone/release-script-plugin-manual-review": "~3.5.9", + "@iobroker/eslint-config": "^0.1.6", "@iobroker/types": "file:packages/types-public", "@iobroker/types-dev": "file:packages/types-dev", "@microsoft/api-extractor": "^7.43.0", @@ -51,16 +53,9 @@ "@types/triple-beam": "^1.3.5", "@types/winston-syslog": "^2.4.0", "@types/yargs": "^17.0.8", - "@typescript-eslint/eslint-plugin": "^6.18.1", - "@typescript-eslint/parser": "^6.18.1", "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "cpy-cli": "^4.2.0", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-jsdoc": "^48.2.7", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-unicorn": "^52.0.0", "fs-extra": "^11.1.0", "lerna": "^7.1.4", "mocha": "^10.4.0", diff --git a/packages/adapter/src/lib/_Types.ts b/packages/adapter/src/lib/_Types.ts index 49d9e1708c..9910e996c0 100644 --- a/packages/adapter/src/lib/_Types.ts +++ b/packages/adapter/src/lib/_Types.ts @@ -1,5 +1,12 @@ export interface AdapterOptions { - subscribesChange?: (subs: Record) => void; + subscribesChange?: ( + subs: Record< + string, + { + regex: RegExp; + } + >, + ) => void; /** If the adapter collects logs from all adapters (experts only). Default: false */ logTransporter?: boolean; /** if true, the date format from system.config */ @@ -61,7 +68,6 @@ type MessageUnsubscribeReason = 'client' | 'disconnect'; export type ClientUnsubscribeReason = MessageUnsubscribeReason | 'clientSubscribeError'; type UserInterfaceClientUnsubscribeReason = ClientUnsubscribeReason | 'timeout'; -// eslint-disable-next-line @typescript-eslint/ban-types type Invoice = 'free' | (string & {}); export interface SuitableLicense { @@ -135,7 +141,7 @@ export interface UserInterfaceSubscribeInfo { } export type UserInterfaceClientSubscribeHandler = ( - subscribeInfo: UserInterfaceSubscribeInfo + subscribeInfo: UserInterfaceSubscribeInfo, ) => UserInterfaceClientSubscribeReturnType | Promise; export interface UserInterfaceClientSubscribeReturnType { @@ -166,7 +172,7 @@ export type UserInterfaceUnsubscribeInfo = UserInterfaceUnsubscribeInfoBaseObjec ); export type UserInterfaceClientUnsubscribeHandler = ( - unsubscribeInfo: UserInterfaceUnsubscribeInfo + unsubscribeInfo: UserInterfaceUnsubscribeInfo, ) => void | Promise; export type UserInterfaceClientRemoveMessage = @@ -292,7 +298,10 @@ export interface InternalCheckGroupOptions { callback?: CheckGroupCallback; } -export type CommandsPermissionsEntry = { type: 'object' | 'state' | '' | 'other' | 'file'; operation: string }; +export type CommandsPermissionsEntry = { + type: 'object' | 'state' | '' | 'other' | 'file'; + operation: string; +}; export type CommandsPermissionsObject = { [permission: string]: CommandsPermissionsEntry; }; @@ -320,7 +329,7 @@ export interface InternalCalculatePermissionsOptions { export type GetCertificatesCallback = ( err?: Error | null, certs?: ioBroker.Certificates, - useLetsEncryptCert?: boolean + useLetsEncryptCert?: boolean, ) => void; export type GetCertificatesPromiseReturnType = [cert: ioBroker.Certificates, useLetsEncryptCert?: boolean]; diff --git a/packages/adapter/src/lib/adapter/adapter.ts b/packages/adapter/src/lib/adapter/adapter.ts index 4bc9231eb3..b75cefd8da 100644 --- a/packages/adapter/src/lib/adapter/adapter.ts +++ b/packages/adapter/src/lib/adapter/adapter.ts @@ -15,7 +15,7 @@ import { EXIT_CODES, password, logger, - isInstalledFromNpm + isInstalledFromNpm, } from '@iobroker/js-controller-common'; import { decryptArray, @@ -24,7 +24,7 @@ import { isMessageboxSupported, getAdapterScopedPackageIdentifier, listInstalledNodeModules, - requestModuleNameByUrl + requestModuleNameByUrl, } from '@/lib/adapter/utils.js'; // @ts-expect-error no ts file import extend from 'node.extend'; @@ -57,7 +57,7 @@ import { ACCESS_USER_READ, NO_PROTECT_ADAPTERS, STATE_QUALITY, - type SupportedFeature + type SupportedFeature, } from '@/lib/adapter/constants.js'; import type { PluginHandlerSettings } from '@iobroker/plugin-base/types'; import type { @@ -133,7 +133,7 @@ import type { InternalInstallNodeModuleOptions, StopParameters, InternalStopParameters, - NotificationOptions + NotificationOptions, } from '@/lib/_Types.js'; import { UserInterfaceMessagingController } from '@/lib/adapter/userInterfaceMessagingController.js'; import { SYSTEM_ADAPTER_PREFIX } from '@iobroker/js-controller-common-db/constants'; @@ -141,7 +141,7 @@ import type { CommandResult } from '@alcalzone/pak'; import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); tools.ensureDNSOrder(); /** @@ -166,7 +166,7 @@ export interface AdapterClass { extendObjectAsync( id: string, objPart: ioBroker.PartialObject, - options?: ioBroker.ExtendObjectOptions + options?: ioBroker.ExtendObjectOptions, ): ioBroker.SetObjectPromise; /** Set capabilities of the given executable. Only works on Linux systems. */ setExecutableCapabilities( @@ -174,13 +174,13 @@ export interface AdapterClass { capabilities: string[], modeEffective?: boolean, modePermitted?: boolean, - modeInherited?: boolean + modeInherited?: boolean, ): Promise; /** Extend an object (which might not belong to this adapter) and create it if it might not exist */ extendForeignObjectAsync( id: T, objPart: ioBroker.PartialObject>, - options?: ioBroker.ExtendObjectOptions + options?: ioBroker.ExtendObjectOptions, ): ioBroker.SetObjectPromise; /** Reads an object from the object db */ getObjectAsync(id: string, options?: unknown): ioBroker.GetObjectPromise; @@ -193,12 +193,12 @@ export interface AdapterClass { design: Design, search: Search, params: ioBroker.GetObjectViewParams | null | undefined, - options?: unknown + options?: unknown, ): ioBroker.GetObjectViewPromise>; /** Returns a list of objects with id between params.startkey and params.endkey */ getObjectListAsync( params: ioBroker.GetObjectListParams | null, - options?: { sorted?: boolean } | Record + options?: { sorted?: boolean } | Record, ): ioBroker.GetObjectListPromise; /** Returns the enum tree, filtered by the optional enum name */ getEnumAsync(name: string, options?: unknown): Promise<{ result: Record; requestEnum: string }>; @@ -224,7 +224,7 @@ export interface AdapterClass { setForeignObjectNotExistsAsync( id: T, obj: ioBroker.SettableObject>, - options?: unknown + options?: unknown, ): ioBroker.SetObjectPromise; /** deletes a device, its channels and states */ @@ -234,13 +234,13 @@ export interface AdapterClass { addTo: string, parentDevice: string, channelName: string, - options?: unknown + options?: unknown, ): Promise; deleteChannelFromEnumAsync( enumName: string, parentDevice: string, channelName: string, - options?: unknown + options?: unknown, ): Promise; /** Returns a list of all devices in this adapter instance */ @@ -252,20 +252,20 @@ export interface AdapterClass { parentDevice: string, parentChannel: string, stateName: string, - options?: unknown + options?: unknown, ): Promise; deleteStateFromEnumAsync( enumName: string, parentDevice: string, parentChannel: string, stateName: string, - options?: unknown + options?: unknown, ): Promise; /** Changes access rights of all files in the adapter directory */ chmodFileAsync( adapter: string | null, path: string, - options: { mode: number | string } | Record + options: { mode: number | string } | Record, ): Promise<{ entries: ioBroker.ChownFileResult[]; id: string }>; // TODO: correct types chownFileAsync(...args: any[]): Promise; @@ -317,7 +317,7 @@ export interface AdapterClass { calculatePermissionsAsync( user: string, commandsPermissions: CommandsPermissions, - options?: unknown + options?: unknown, ): Promise; /** Creates or overwrites an object in the object db */ setObjectAsync(id: string, obj: ioBroker.SettableObject, options?: unknown): ioBroker.SetObjectPromise; @@ -325,13 +325,13 @@ export interface AdapterClass { setForeignObjectAsync( id: T, obj: ioBroker.SettableObject>, - options?: unknown + options?: unknown, ): ioBroker.SetObjectPromise; // TODO: correct types getCertificatesAsync( publicName?: string, privateName?: string, - chainedName?: string + chainedName?: string, ): Promise; /** Get all states, channels, devices and folders of this adapter */ getAdapterObjectsAsync(): Promise>; @@ -345,18 +345,18 @@ export interface AdapterClass { setForeignStateChangedAsync( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, - ack?: boolean + ack?: boolean, ): ioBroker.SetStateChangedPromise; setForeignStateChangedAsync( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, - options?: unknown + options?: unknown, ): ioBroker.SetStateChangedPromise; setForeignStateChangedAsync( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, ack: boolean, - options: unknown + options: unknown, ): ioBroker.SetStateChangedPromise; /** @@ -365,18 +365,18 @@ export interface AdapterClass { setStateChangedAsync( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, - ack?: boolean + ack?: boolean, ): ioBroker.SetStateChangedPromise; setStateChangedAsync( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, - options?: unknown + options?: unknown, ): ioBroker.SetStateChangedPromise; setStateChangedAsync( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, ack: boolean, - options: unknown + options: unknown, ): ioBroker.SetStateChangedPromise; /** @@ -386,7 +386,7 @@ export interface AdapterClass { sendToHostAsync( hostName: string, command: string, - message: ioBroker.MessagePayload + message: ioBroker.MessagePayload, ): Promise; /** @@ -397,7 +397,7 @@ export interface AdapterClass { instanceName: string, command: string, message: ioBroker.MessagePayload, - options?: SendToOptions + options?: SendToOptions, ): Promise; /** @@ -414,20 +414,20 @@ export interface AdapterClass { setStateAsync( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, - ack?: boolean + ack?: boolean, ): ioBroker.SetStatePromise; /** @deprecated use `adapter.setState` without callback instead */ setStateAsync( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, - options?: unknown + options?: unknown, ): ioBroker.SetStatePromise; /** @deprecated use `adapter.setState` without callback instead */ setStateAsync( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, ack: boolean, - options: unknown + options: unknown, ): ioBroker.SetStatePromise; /** @@ -436,18 +436,18 @@ export interface AdapterClass { setForeignStateAsync( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, - ack?: boolean + ack?: boolean, ): ioBroker.SetStatePromise; setForeignStateAsync( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, - options?: unknown + options?: unknown, ): ioBroker.SetStatePromise; setForeignStateAsync( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, ack: boolean, - options: unknown + options: unknown, ): ioBroker.SetStatePromise; /** @@ -457,12 +457,12 @@ export interface AdapterClass { pattern: Pattern, type: T, enums?: ioBroker.EnumList | null, - options?: unknown + options?: unknown, ): ioBroker.GetObjectsPromiseTyped; getForeignObjectsAsync( pattern: Pattern, type: T, - options?: unknown + options?: unknown, ): ioBroker.GetObjectsPromiseTyped; getForeignObjectsAsync(pattern: Pattern, options?: unknown): ioBroker.GetObjectsPromise; @@ -476,14 +476,14 @@ export interface AdapterClass { createDeviceAsync( deviceName: string, common: Partial, - native?: Record + native?: Record, ): ioBroker.SetObjectPromise; /** @deprecated use `extendObject` instead */ createDeviceAsync( deviceName: string, common: Partial, native: Record, - options?: unknown + options?: unknown, ): ioBroker.SetObjectPromise; /** @@ -499,14 +499,14 @@ export interface AdapterClass { createChannelAsync( parentDevice: string, channelName: string, - roleOrCommon?: string | Partial + roleOrCommon?: string | Partial, ): ioBroker.SetObjectPromise; /** @deprecated use `extendObject` instead */ createChannelAsync( parentDevice: string, channelName: string, roleOrCommon: string | Partial, - native?: Record + native?: Record, ): ioBroker.SetObjectPromise; /** @deprecated use `extendObject` instead */ createChannelAsync( @@ -514,7 +514,7 @@ export interface AdapterClass { channelName: string, roleOrCommon: string | Partial, native: Record, - options?: unknown + options?: unknown, ): ioBroker.SetObjectPromise; /** @@ -526,7 +526,7 @@ export interface AdapterClass { parentDevice: string, parentChannel: string, stateName: string, - roleOrCommon?: string | Partial + roleOrCommon?: string | Partial, ): ioBroker.SetObjectPromise; /** @deprecated use `extendObject` instead */ createStateAsync( @@ -534,7 +534,7 @@ export interface AdapterClass { parentChannel: string, stateName: string, roleOrCommon: string | Partial, - native?: Record + native?: Record, ): ioBroker.SetObjectPromise; /** @deprecated use `extendObject` instead */ createStateAsync( @@ -543,7 +543,7 @@ export interface AdapterClass { stateName: string, roleOrCommon: string | Partial, native: Record, - options?: unknown + options?: unknown, ): ioBroker.SetObjectPromise; /** @@ -581,7 +581,7 @@ export interface AdapterClass { getChannels( parentDevice: string, options: unknown, - callback: ioBroker.GetObjectsCallback3 + callback: ioBroker.GetObjectsCallback3, ): void; /** @@ -730,7 +730,7 @@ export class AdapterClass extends EventEmitter { private statesConnectedTime?: number; /** Constants for frequent use in adapters */ readonly constants = { - STATE_QUALITY + STATE_QUALITY, } as const; /** Features supported by the running instance */ @@ -777,36 +777,36 @@ export class AdapterClass extends EventEmitter { .options({ loglevel: { describe: 'Define adapter log level', - type: 'string' + type: 'string', }, silent: { describe: 'If is install run', - type: 'boolean' + type: 'boolean', }, install: { describe: 'If is install run', - type: 'boolean' + type: 'boolean', }, logs: { describe: 'If console output desired', - type: 'boolean' + type: 'boolean', }, console: { describe: 'If console output desired', - type: 'boolean' + type: 'boolean', }, force: { describe: 'If force start even if disabled', - type: 'boolean' + type: 'boolean', }, debug: { describe: 'Same as --force combined with --console', - type: 'boolean' + type: 'boolean', }, instance: { describe: 'Instance id, e.g. 0', - type: 'string' - } + type: 'string', + }, }) .parseSync(); @@ -858,7 +858,7 @@ export class AdapterClass extends EventEmitter { : this._options.instance !== undefined ? this._options.instance : this._config.instance || 0, - 10 + 10, ); this.namespace = `${this.name}.${instance}`; @@ -896,7 +896,7 @@ export class AdapterClass extends EventEmitter { this.uiMessagingController = new UserInterfaceMessagingController({ adapter: this, subscribeCallback: this._options.uiClientSubscribe, - unsubscribeCallback: this._options.uiClientUnsubscribe + unsubscribeCallback: this._options.uiClientUnsubscribe, }); // Create dynamic methods @@ -1424,7 +1424,7 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} destroySession not processed because States database not connected` + `${this.namespaceLog} destroySession not processed because States database not connected`, ); return tools.maybeCallbackWithError(options.callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -1434,7 +1434,7 @@ export class AdapterClass extends EventEmitter { private async _getObjectsByArray( keys: string[], - options?: Record | null + options?: Record | null, ): Promise<(ioBroker.AnyObject | null)[]> { try { const res = await this.#objects!.getObjects(keys, options); @@ -1606,16 +1606,15 @@ export class AdapterClass extends EventEmitter { * ... * } * ``` - + * @param featureName the name of the feature to check * @returns true/false if the feature is in the list of supported features */ supportsFeature(featureName: unknown): boolean { if (typeof featureName === 'string') { return this.SUPPORTED_FEATURES.includes(featureName as SupportedFeature); - } else { - return false; } + return false; } // external signature @@ -1623,7 +1622,7 @@ export class AdapterClass extends EventEmitter { user: string, pw: string, options: Record, - callback: CheckPasswordCallback + callback: CheckPasswordCallback, ): Promise; checkPassword(user: string, pw: string, callback: CheckPasswordCallback): Promise; @@ -1693,11 +1692,10 @@ export class AdapterClass extends EventEmitter { this.getForeignObject(user, options, (err, obj) => { if (err || !obj || !obj.common || (!obj.common.enabled && user !== SYSTEM_ADMIN_USER)) { return tools.maybeCallback(callback, false, user); - } else { - password(pw).check(obj.common.password, (err, res) => { - return tools.maybeCallback(callback, !!res, user); - }); } + password(pw).check(obj.common.password, (err, res) => { + return tools.maybeCallback(callback, !!res, user); + }); }); } @@ -1758,7 +1756,7 @@ export class AdapterClass extends EventEmitter { user: string, pw: string, options: Record, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): Promise; setPassword(user: string, pw: string, callback?: ioBroker.ErrorCallback): Promise; @@ -1829,13 +1827,13 @@ export class AdapterClass extends EventEmitter { options.user, { common: { - password: '' - } + password: '', + }, }, options.options || {}, () => { return tools.maybeCallback(options.callback); - } + }, ); } else { password(options.pw).hash(null, null, (err, res) => { @@ -1846,13 +1844,13 @@ export class AdapterClass extends EventEmitter { options.user, { common: { - password: res - } + password: res, + }, }, options.options || {}, () => { return tools.maybeCallbackWithError(options.callback, null); - } + }, ); }); } @@ -1936,9 +1934,8 @@ export class AdapterClass extends EventEmitter { } if (obj.common.members.includes(options.user)) { return tools.maybeCallback(options.callback, true); - } else { - return tools.maybeCallback(options.callback, false); } + return tools.maybeCallback(options.callback, false); }); }); } @@ -1948,12 +1945,12 @@ export class AdapterClass extends EventEmitter { user: string, commandsPermissions: CommandsPermissions, options?: Record, - callback?: CalculatePermissionsCallback + callback?: CalculatePermissionsCallback, ): Promise; calculatePermissions( user: string, commandsPermissions: CommandsPermissions, - callback?: CalculatePermissionsCallback + callback?: CalculatePermissionsCallback, ): Promise; /** @@ -2053,7 +2050,7 @@ export class AdapterClass extends EventEmitter { user: unknown, commandsPermissions: unknown, options: unknown, - callback?: unknown + callback?: unknown, ): Promise { user = user || ''; @@ -2075,7 +2072,7 @@ export class AdapterClass extends EventEmitter { } private async _calculatePermissions( - options: InternalCalculatePermissionsOptions + options: InternalCalculatePermissionsOptions, ): Promise { const { user } = options; let userId: ioBroker.ObjectIDs.User; @@ -2137,21 +2134,21 @@ export class AdapterClass extends EventEmitter { write: true, delete: true, create: true, - list: true + list: true, }, // @ts-expect-error create is missing object: { read: true, write: true, delete: true, - list: true + list: true, }, state: { read: true, write: true, delete: true, create: true, - list: true + list: true, }, user: userId, users: { @@ -2159,14 +2156,14 @@ export class AdapterClass extends EventEmitter { write: true, create: true, delete: true, - list: true + list: true, }, other: { execute: true, http: true, - sendto: true + sendto: true, }, - groups: acl.groups + groups: acl.groups, }; break; } @@ -2286,7 +2283,7 @@ export class AdapterClass extends EventEmitter { } else { // No callback accepted and no Promise returned - force unload this._logger.error( - `${this.namespaceLog} Error in ${id}: The unload method must return a Promise if it does not accept a callback!` + `${this.namespaceLog} Error in ${id}: The unload method must return a Promise if it does not accept a callback!`, ); } } @@ -2334,7 +2331,7 @@ export class AdapterClass extends EventEmitter { // start watcher of this file fs.watch(certFile, (eventType, filename) => { this._logger.warn( - `${this.namespaceLog} New certificate "${filename}" detected. Restart adapter` + `${this.namespaceLog} New certificate "${filename}" detected. Restart adapter`, ); setTimeout(() => this._stop({ isPause: false, isScheduled: true }), 2_000); }); @@ -2351,7 +2348,7 @@ export class AdapterClass extends EventEmitter { publicName?: string, privateName?: string, chainedName?: string, - callback?: GetCertificatesCallback + callback?: GetCertificatesCallback, ): void; /** @@ -2377,7 +2374,7 @@ export class AdapterClass extends EventEmitter { publicName: unknown, privateName: unknown, chainedName: unknown, - callback: unknown + callback: unknown, ): Promise { if (typeof publicName === 'function') { callback = publicName; @@ -2416,14 +2413,14 @@ export class AdapterClass extends EventEmitter { } private async _getCertificates( - options: InternalGetCertificatesOptions + options: InternalGetCertificatesOptions, ): Promise<[cert: ioBroker.Certificates, useLetsEncryptCert?: boolean] | void> { const { publicName, chainedName, privateName, callback } = options; let obj: ioBroker.OtherObject | undefined | null; if (!this.#objects) { this._logger.info( - `${this.namespaceLog} getCertificates not processed because Objects database not connected` + `${this.namespaceLog} getCertificates not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -2445,44 +2442,43 @@ export class AdapterClass extends EventEmitter { (chainedName && !obj.native.certificates[chainedName]) ) { this._logger.error( - `${this.namespaceLog} Cannot configure secure web server, because no certificates found: ${publicName}, ${privateName}, ${chainedName}` + `${this.namespaceLog} Cannot configure secure web server, because no certificates found: ${publicName}, ${privateName}, ${chainedName}`, ); if (publicName === 'defaultPublic' || privateName === 'defaultPrivate') { this._logger.info( - `${this.namespaceLog} Default certificates seem to be configured but missing. You can execute "iobroker cert create" in your shell to create these.` + `${this.namespaceLog} Default certificates seem to be configured but missing. You can execute "iobroker cert create" in your shell to create these.`, ); } return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_NOT_FOUND); - } else { - let ca: string | undefined; - if (chainedName) { - const chained = this._readFileCertificate(obj.native.certificates[chainedName]).split( - '-----END CERTIFICATE-----\r\n' - ); - // it is still a file name, and the file maybe does not exist, but we can omit this error - if (chained.join('').length >= 512) { - const caArr = []; - for (const cert of chained) { - if (cert.replace(/(\r\n|\r|\n)/g, '').trim()) { - caArr.push(`${cert}-----END CERTIFICATE-----\r\n`); - } + } + let ca: string | undefined; + if (chainedName) { + const chained = this._readFileCertificate(obj.native.certificates[chainedName]).split( + '-----END CERTIFICATE-----\r\n', + ); + // it is still a file name, and the file maybe does not exist, but we can omit this error + if (chained.join('').length >= 512) { + const caArr = []; + for (const cert of chained) { + if (cert.replace(/(\r\n|\r|\n)/g, '').trim()) { + caArr.push(`${cert}-----END CERTIFICATE-----\r\n`); } - ca = caArr.join(''); } + ca = caArr.join(''); } - - return tools.maybeCallbackWithError( - callback, - null, - { - key: this._readFileCertificate(obj.native.certificates[privateName]), - cert: this._readFileCertificate(obj.native.certificates[publicName]), - ca - }, - obj.native.letsEncrypt - ); } + + return tools.maybeCallbackWithError( + callback, + null, + { + key: this._readFileCertificate(obj.native.certificates[privateName]), + cert: this._readFileCertificate(obj.native.certificates[publicName]), + ca, + }, + obj.native.letsEncrypt, + ); } /** @@ -2595,9 +2591,8 @@ export class AdapterClass extends EventEmitter { if (typeof value === 'string') { const secret = await this.getSystemSecret(); return tools.maybeCallbackWithError(callback, null, tools.decrypt(secret, value)); - } else { - return tools.maybeCallbackWithError(callback, `Attribute "${attribute}" not found`); } + return tools.maybeCallbackWithError(callback, `Attribute "${attribute}" not found`); } /** @@ -2640,7 +2635,7 @@ export class AdapterClass extends EventEmitter { setTimeout(cb: unknown, timeout: unknown, ...args: unknown[]): ioBroker.Timeout | undefined { if (typeof cb !== 'function') { this._logger.warn( - `${this.namespaceLog} setTimeout expected callback to be of type "function", but got "${typeof cb}"` + `${this.namespaceLog} setTimeout expected callback to be of type "function", but got "${typeof cb}"`, ); return; } @@ -2659,7 +2654,7 @@ export class AdapterClass extends EventEmitter { this._timers.delete(timer); cb(...args); }, - timeout + timeout, ); this._timers.add(timer); @@ -2732,7 +2727,7 @@ export class AdapterClass extends EventEmitter { setInterval(cb: unknown, timeout: unknown, ...args: unknown[]): ioBroker.Interval | undefined { if (typeof cb !== 'function') { this._logger.error( - `${this.namespaceLog} setInterval expected callback to be of type "function", but got "${typeof cb}"` + `${this.namespaceLog} setInterval expected callback to be of type "function", but got "${typeof cb}"`, ); return; } @@ -2775,7 +2770,7 @@ export class AdapterClass extends EventEmitter { id: string, obj: ioBroker.SettableObject, options: unknown, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): Promise; setObject(id: string, obj: ioBroker.SettableObject, callback?: ioBroker.SetObjectCallback): Promise; /** @@ -2839,7 +2834,7 @@ export class AdapterClass extends EventEmitter { this._logger.error( `${ this.namespaceLog - } setForeignObject: type of object parameter expected to be an object, but "${typeof options.obj}" provided` + } setForeignObject: type of object parameter expected to be an object, but "${typeof options.obj}" provided`, ); return tools.maybeCallbackWithError(options.callback, tools.ERRORS.ERROR_NO_OBJECT); } @@ -2856,14 +2851,14 @@ export class AdapterClass extends EventEmitter { if (options.obj.type) { if (!options.obj.native) { this._logger.warn( - `${this.namespaceLog} setObject ${options.id} (type=${options.obj.type}) property native missing!` + `${this.namespaceLog} setObject ${options.id} (type=${options.obj.type}) property native missing!`, ); options.obj.native = {}; } // Check property 'common' if (!options.obj.common) { this._logger.warn( - `${this.namespaceLog} setObject ${options.id} (type=${options.obj.type}) property common missing!` + `${this.namespaceLog} setObject ${options.id} (type=${options.obj.type}) property common missing!`, ); // @ts-expect-error fix later on options.obj.common = {}; @@ -2875,16 +2870,16 @@ export class AdapterClass extends EventEmitter { true, {}, this._defaultObjs[options.obj.common.role], - options.obj.common + options.obj.common, ); } else if (!options.obj.common.role) { this._logger.warn( - `${this.namespaceLog} setObject ${options.id} (type=${options.obj.type}) property common.role missing!` + `${this.namespaceLog} setObject ${options.id} (type=${options.obj.type}) property common.role missing!`, ); } if (!options.obj.common.type) { this._logger.warn( - `${this.namespaceLog} setObject ${options.id} (type=${options.obj.type}) property common.type missing!` + `${this.namespaceLog} setObject ${options.id} (type=${options.obj.type}) property common.type missing!`, ); } if ( @@ -2895,14 +2890,14 @@ export class AdapterClass extends EventEmitter { this._logger.error( `${this.namespaceLog} setObject ${options.id} (type=${ options.obj.type - }) property common.custom is of type ${typeof options.obj.common.custom}, expected object.` + }) property common.custom is of type ${typeof options.obj.common.custom}, expected object.`, ); return tools.maybeCallbackWithError(options.callback, 'common.custom needs to be an object'); } } else if (options.obj.common) { if ('custom' in options.obj.common && options.obj.common.custom !== null) { this._logger.warn( - `${this.namespaceLog} setObject ${options.id} (type=${options.obj.type}) property common.custom must not exist.` + `${this.namespaceLog} setObject ${options.id} (type=${options.obj.type}) property common.custom must not exist.`, ); delete options.obj.common.custom; } @@ -2912,7 +2907,7 @@ export class AdapterClass extends EventEmitter { options.obj.common.name = options.id; // it is a more unimportant warning as debug this._logger.debug( - `${this.namespaceLog} setObject ${options.id} (type=${options.obj.type}) property common.name missing, using id as name` + `${this.namespaceLog} setObject ${options.id} (type=${options.obj.type}) property common.name missing, using id as name`, ); } @@ -2945,7 +2940,7 @@ export class AdapterClass extends EventEmitter { id: string, obj: ioBroker.SettableObject, options?: Record | null, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): Promise | void> { if (!this.#objects) { this._logger.info(`${this.namespaceLog} setObject not processed because Objects database not connected`); @@ -2957,7 +2952,7 @@ export class AdapterClass extends EventEmitter { } catch (e) { await this.reportDeprecation({ deprecationMessage: `Object ${id} is invalid: ${e.message}`, - version: '7.0.0' + version: '7.0.0', }); } @@ -2976,7 +2971,7 @@ export class AdapterClass extends EventEmitter { await this.setForeignStateAsync(id, { val: obj.common.def, q: this.constants.STATE_QUALITY.SUBSTITUTE_INITIAL_VALUE, - ack: true + ack: true, }); } } @@ -2988,7 +2983,7 @@ export class AdapterClass extends EventEmitter { // external signature getAdapterObjects( - callback: (objects: Record) => void + callback: (objects: Record) => void, ): Promise | void>; /** @@ -3010,7 +3005,7 @@ export class AdapterClass extends EventEmitter { } private async _getAdapterObjects( - options: InternalGetAdapterObjectsOptions + options: InternalGetAdapterObjectsOptions, ): Promise | void> { const ret: Record = {}; // Adds result rows to the return object @@ -3029,7 +3024,7 @@ export class AdapterClass extends EventEmitter { const params = { startkey: `${this.namespace}.`, endkey: `${this.namespace}.\u9999`, - include_docs: true + include_docs: true, }; try { @@ -3074,13 +3069,13 @@ export class AdapterClass extends EventEmitter { extendObject( id: string, objPart: ioBroker.PartialObject, - options: ioBroker.ExtendObjectOptions + options: ioBroker.ExtendObjectOptions, ): ioBroker.SetObjectPromise; extendObject( id: string, objPart: ioBroker.PartialObject, options: ioBroker.ExtendObjectOptions, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; /** @@ -3157,7 +3152,7 @@ export class AdapterClass extends EventEmitter { this._logger.error( `${ this.namespaceLog - } extendObject: type of object parameter expected to be an object, but ${typeof obj} provided` + } extendObject: type of object parameter expected to be an object, but ${typeof obj} provided`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_NO_OBJECT); } @@ -3181,7 +3176,7 @@ export class AdapterClass extends EventEmitter { } catch (e) { await this.reportDeprecation({ deprecationMessage: `Object ${options.id} is invalid: ${e.message}`, - version: '7.0.0' + version: '7.0.0', }); } @@ -3259,78 +3254,77 @@ export class AdapterClass extends EventEmitter { // @ts-expect-error TODO we are returning type Object for ease of use to devs, but formally these are AnyObjects, e.g. not guaranteed to have common return this.#objects.setObject(options.id, options.obj, options.options, options.callback); - } else { - options.obj.from = options.obj.from || `system.adapter.${this.namespace}`; - options.obj.user = options.obj.user || (options.options ? options.options.user : '') || SYSTEM_ADMIN_USER; - options.obj.ts = options.obj.ts || Date.now(); + } + options.obj.from = options.obj.from || `system.adapter.${this.namespace}`; + options.obj.user = options.obj.user || (options.options ? options.options.user : '') || SYSTEM_ADMIN_USER; + options.obj.ts = options.obj.ts || Date.now(); + if ( + (options.obj.type && options.obj.type === 'state') || + (!options.obj.type && oldObj && oldObj.type === 'state') + ) { if ( - (options.obj.type && options.obj.type === 'state') || - (!options.obj.type && oldObj && oldObj.type === 'state') + options.obj.common && + 'custom' in options.obj.common && + options.obj.common.custom !== null && + !tools.isObject(options.obj.common.custom) ) { - if ( - options.obj.common && - 'custom' in options.obj.common && - options.obj.common.custom !== null && - !tools.isObject(options.obj.common.custom) - ) { - this._logger.error( - `${this.namespaceLog} extendObject ${options.id} (type=${ - options.obj.type - }) property common.custom is of type ${typeof options.obj.common.custom}, expected object.` - ); - return tools.maybeCallbackWithError(options.callback, 'common.custom needs to be an object'); - } - } else { - if (options.obj.common && 'custom' in options.obj.common && options.obj.common.custom !== null) { - this._logger.warn( - `${this.namespaceLog} setObject ${options.id} (type=${options.obj.type}) property common.custom must not exist.` - ); - delete options.obj.common.custom; - } + this._logger.error( + `${this.namespaceLog} extendObject ${options.id} (type=${ + options.obj.type + }) property common.custom is of type ${typeof options.obj.common.custom}, expected object.`, + ); + return tools.maybeCallbackWithError(options.callback, 'common.custom needs to be an object'); } - - if (!oldObj) { - // if old object is not existing we behave like setObject - return this.setForeignObject(options.id, options.obj, options.options, options.callback); + } else { + if (options.obj.common && 'custom' in options.obj.common && options.obj.common.custom !== null) { + this._logger.warn( + `${this.namespaceLog} setObject ${options.id} (type=${options.obj.type}) property common.custom must not exist.`, + ); + delete options.obj.common.custom; } + } - try { - const cbObj = await this.#objects.extendObjectAsync(options.id, options.obj, options.options || {}); - let defState; - if (options.obj.type === 'state' || oldObj.type === 'state') { - if (options.obj.common && 'def' in options.obj.common && options.obj.common.def !== undefined) { - defState = options.obj.common.def; - } else if (oldObj.common && oldObj.common.def !== undefined) { - defState = oldObj.common.def; - } + if (!oldObj) { + // if old object is not existing we behave like setObject + return this.setForeignObject(options.id, options.obj, options.options, options.callback); + } + + try { + const cbObj = await this.#objects.extendObjectAsync(options.id, options.obj, options.options || {}); + let defState; + if (options.obj.type === 'state' || oldObj.type === 'state') { + if (options.obj.common && 'def' in options.obj.common && options.obj.common.def !== undefined) { + defState = options.obj.common.def; + } else if (oldObj.common && oldObj.common.def !== undefined) { + defState = oldObj.common.def; } + } - if (defState !== undefined) { - let currentStateObj; + if (defState !== undefined) { + let currentStateObj; + try { + currentStateObj = await this.getForeignStateAsync(options.id); + } catch { + // do nothing + } + if (!currentStateObj) { try { - currentStateObj = await this.getForeignStateAsync(options.id); - } catch { - // do nothing - } - if (!currentStateObj) { - try { - await this.setForeignStateAsync(options.id, { - val: defState, - q: this.constants.STATE_QUALITY.SUBSTITUTE_INITIAL_VALUE, - ack: true - }); - } catch (e) { - this._logger.info( - `${this.namespaceLog} Default value for state "${options.id}" could not be set: ${e.message}` - ); - } + await this.setForeignStateAsync(options.id, { + val: defState, + q: this.constants.STATE_QUALITY.SUBSTITUTE_INITIAL_VALUE, + ack: true, + }); + } catch (e) { + this._logger.info( + `${this.namespaceLog} Default value for state "${options.id}" could not be set: ${e.message}`, + ); } } - return tools.maybeCallbackWithError(options.callback, null, cbObj); - } catch (e) { - return tools.maybeCallbackWithError(options.callback, e); } + return tools.maybeCallbackWithError(options.callback, null, cbObj); + } catch (e) { + return tools.maybeCallbackWithError(options.callback, e); } } @@ -3338,13 +3332,13 @@ export class AdapterClass extends EventEmitter { setForeignObject( id: T, obj: ioBroker.SettableObject>, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; setForeignObject( id: T, obj: ioBroker.SettableObject>, options: unknown, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; /** @@ -3384,7 +3378,7 @@ export class AdapterClass extends EventEmitter { this._logger.error( `${ this.namespaceLog - } setForeignObject: type of object parameter expected to be an object, but ${typeof obj} provided` + } setForeignObject: type of object parameter expected to be an object, but ${typeof obj} provided`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_NO_OBJECT); } @@ -3439,13 +3433,13 @@ export class AdapterClass extends EventEmitter { extendForeignObject( id: T, objPart: ioBroker.PartialObject>, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; extendForeignObject( id: T, objPart: ioBroker.PartialObject>, options: ioBroker.ExtendObjectOptions, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; /** @@ -3468,7 +3462,7 @@ export class AdapterClass extends EventEmitter { id: unknown, obj: unknown, options: unknown, - callback?: unknown + callback?: unknown, ): Promise | void> | void { if (typeof options === 'function') { callback = options; @@ -3500,19 +3494,19 @@ export class AdapterClass extends EventEmitter { id: this.fixForbiddenCharsInId(id), obj: obj as ioBroker.SettableObject, callback, - options + options, }); } private async _extendForeignObjectAsync( - _options: InternalSetObjectOptions + _options: InternalSetObjectOptions, ): Promise | void> { const { id, callback, options } = _options; let { obj } = _options; if (!this.#objects) { this._logger.info( - `${this.namespaceLog} extendForeignObject not processed because Objects database not connected` + `${this.namespaceLog} extendForeignObject not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -3563,75 +3557,74 @@ export class AdapterClass extends EventEmitter { // @ts-expect-error TODO we are returning type Object for ease of use to devs, but formally these are AnyObjects, e.g. not guaranteed to have common return this.#objects.setObject(id, obj, options, callback); - } else { - obj.from = obj.from || `system.adapter.${this.namespace}`; - obj.user = obj.user || options?.user || SYSTEM_ADMIN_USER; - obj.ts = obj.ts || Date.now(); + } + obj.from = obj.from || `system.adapter.${this.namespace}`; + obj.user = obj.user || options?.user || SYSTEM_ADMIN_USER; + obj.ts = obj.ts || Date.now(); - if ((obj.type && obj.type === 'state') || (!obj.type && oldObj && oldObj.type === 'state')) { - if ( - obj.common && - 'custom' in obj.common && - obj.common.custom !== null && - !tools.isObject(obj.common.custom) - ) { - this._logger.error( - `${this.namespaceLog} extendObject ${id} (type=${ - obj.type - }) property common.custom is of type ${typeof obj.common.custom}, expected object.` - ); - return tools.maybeCallbackWithError(callback, 'common.custom needs to be an object'); - } - } else { - if (obj.common && 'custom' in obj.common && obj.common.custom !== null) { - this._logger.warn( - `${this.namespaceLog} setObject ${id} (type=${obj.type}) property common.custom must not exist.` - ); - delete obj.common.custom; - } + if ((obj.type && obj.type === 'state') || (!obj.type && oldObj && oldObj.type === 'state')) { + if ( + obj.common && + 'custom' in obj.common && + obj.common.custom !== null && + !tools.isObject(obj.common.custom) + ) { + this._logger.error( + `${this.namespaceLog} extendObject ${id} (type=${ + obj.type + }) property common.custom is of type ${typeof obj.common.custom}, expected object.`, + ); + return tools.maybeCallbackWithError(callback, 'common.custom needs to be an object'); } - - if (!oldObj) { - // if old object is not existing we behave like setObject - return this.setForeignObject(id, obj, options, callback); + } else { + if (obj.common && 'custom' in obj.common && obj.common.custom !== null) { + this._logger.warn( + `${this.namespaceLog} setObject ${id} (type=${obj.type}) property common.custom must not exist.`, + ); + delete obj.common.custom; } + } - try { - const cbObj = await this.#objects!.extendObjectAsync(id, obj, options || {}); - if (cbObj?.value.type === 'state') { - let defState; - if (obj.common && 'def' in obj.common && obj.common.def !== undefined) { - defState = obj.common.def; - } else if (oldObj.common && oldObj.common.def !== undefined) { - defState = oldObj.common.def; + if (!oldObj) { + // if old object is not existing we behave like setObject + return this.setForeignObject(id, obj, options, callback); + } + + try { + const cbObj = await this.#objects.extendObjectAsync(id, obj, options || {}); + if (cbObj?.value.type === 'state') { + let defState; + if (obj.common && 'def' in obj.common && obj.common.def !== undefined) { + defState = obj.common.def; + } else if (oldObj.common && oldObj.common.def !== undefined) { + defState = oldObj.common.def; + } + if (defState !== undefined) { + let currentStateObj; + try { + currentStateObj = await this.getForeignStateAsync(id); + } catch { + // do nothing } - if (defState !== undefined) { - let currentStateObj; + if (!currentStateObj) { try { - currentStateObj = await this.getForeignStateAsync(id); - } catch { - // do nothing - } - if (!currentStateObj) { - try { - await this.setForeignStateAsync(id, { - val: defState, - q: this.constants.STATE_QUALITY.SUBSTITUTE_INITIAL_VALUE, - ack: true - }); - } catch (e) { - this._logger.info( - `${this.namespaceLog} Default value for state "${id}" could not be set: ${e.message}` - ); - } + await this.setForeignStateAsync(id, { + val: defState, + q: this.constants.STATE_QUALITY.SUBSTITUTE_INITIAL_VALUE, + ack: true, + }); + } catch (e) { + this._logger.info( + `${this.namespaceLog} Default value for state "${id}" could not be set: ${e.message}`, + ); } } } - - return tools.maybeCallbackWithError(callback, null, cbObj); - } catch (e) { - return tools.maybeCallbackWithError(callback, e); } + + return tools.maybeCallbackWithError(callback, null, cbObj); + } catch (e) { + return tools.maybeCallbackWithError(callback, e); } } @@ -3644,7 +3637,7 @@ export class AdapterClass extends EventEmitter { * @param id id of the object * @param options optional user context */ - objectExists(id: unknown, options: unknown | null): Promise { + objectExists(id: unknown, options: unknown): Promise { if (!this.#objects) { this._logger.info(`${this.namespaceLog} objectExists not processed because Objects database not connected`); return Promise.resolve(); @@ -3674,7 +3667,7 @@ export class AdapterClass extends EventEmitter { foreignObjectExists(id: unknown, options: unknown): Promise { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} foreignObjectExists not processed because Objects database not connected` + `${this.namespaceLog} foreignObjectExists not processed because Objects database not connected`, ); return Promise.resolve(); } @@ -3737,14 +3730,14 @@ export class AdapterClass extends EventEmitter { design: Design, search: Search, params: ioBroker.GetObjectViewParams | null | undefined, - callback: ioBroker.GetObjectViewCallback> + callback: ioBroker.GetObjectViewCallback>, ): void; getObjectView( design: Design, search: Search, params: ioBroker.GetObjectViewParams | null | undefined, options: unknown, - callback: ioBroker.GetObjectViewCallback> + callback: ioBroker.GetObjectViewCallback>, ): void; /** @@ -3778,7 +3771,7 @@ export class AdapterClass extends EventEmitter { search: unknown, params: unknown, options: unknown, - callback?: unknown + callback?: unknown, ): void | ioBroker.GetObjectViewPromise { if (typeof options === 'function') { callback = options; @@ -3802,7 +3795,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} getObjectView not processed because Objects database not connected` + `${this.namespaceLog} getObjectView not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -3851,12 +3844,12 @@ export class AdapterClass extends EventEmitter { // external signatures getObjectList( params: ioBroker.GetObjectListParams | null, - callback: ioBroker.GetObjectListCallback + callback: ioBroker.GetObjectListCallback, ): void; getObjectList( params: ioBroker.GetObjectListParams | null, options: { sorted?: boolean } | Record, - callback: ioBroker.GetObjectListCallback + callback: ioBroker.GetObjectListCallback, ): void; /** @@ -3898,7 +3891,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} getObjectList not processed because Objects database not connected` + `${this.namespaceLog} getObjectList not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -3978,7 +3971,7 @@ export class AdapterClass extends EventEmitter { 'enum', { startkey: `${_enum}.`, - endkey: `${_enum}.\u9999` + endkey: `${_enum}.\u9999`, }, options, (err, res) => { @@ -3991,7 +3984,7 @@ export class AdapterClass extends EventEmitter { } } return tools.maybeCallbackWithError(callback, err, result, _enum); - } + }, ); } @@ -4045,7 +4038,7 @@ export class AdapterClass extends EventEmitter { getEnums( _enumList: unknown, options?: unknown, - callback?: unknown + callback?: unknown, ): Promise<{ [groupName: string]: Record } | void> { if (typeof _enumList === 'function') { callback = _enumList; @@ -4065,7 +4058,7 @@ export class AdapterClass extends EventEmitter { } private async _getEnums( - _options: InternalGetEnumsOptions + _options: InternalGetEnumsOptions, ): Promise<{ [groupName: string]: Record } | void> { const { options, callback } = _options; let { _enumList } = _options; @@ -4094,8 +4087,8 @@ export class AdapterClass extends EventEmitter { _enums[_enum] = list; } resolve(); - }) - ) + }), + ), ); } @@ -4112,7 +4105,7 @@ export class AdapterClass extends EventEmitter { 'enum', { startkey: 'enum.', - endkey: 'enum.\u9999' + endkey: 'enum.\u9999', }, options, (err, res) => { @@ -4137,7 +4130,7 @@ export class AdapterClass extends EventEmitter { } return tools.maybeCallbackWithError(callback, err, result); - } + }, ); } } @@ -4149,26 +4142,26 @@ export class AdapterClass extends EventEmitter { getForeignObjects( pattern: Pattern, type: T, - callback: ioBroker.GetObjectsCallbackTyped + callback: ioBroker.GetObjectsCallbackTyped, ): void; getForeignObjects( pattern: Pattern, type: T, enums: ioBroker.EnumList, - callback: ioBroker.GetObjectsCallbackTyped + callback: ioBroker.GetObjectsCallbackTyped, ): void; getForeignObjects( pattern: Pattern, type: T, options: unknown, - callback: ioBroker.GetObjectsCallbackTyped + callback: ioBroker.GetObjectsCallbackTyped, ): void; getForeignObjects( pattern: Pattern, type: T, enums: ioBroker.EnumList | null, options: unknown, - callback: ioBroker.GetObjectsCallbackTyped + callback: ioBroker.GetObjectsCallbackTyped, ): void; /** * Get objects by pattern, by specific type and resolve their enums. @@ -4217,7 +4210,7 @@ export class AdapterClass extends EventEmitter { type?: unknown, enums?: unknown, options?: unknown, - callback?: unknown + callback?: unknown, ): Promise | void> { if (typeof options === 'function') { callback = options; @@ -4258,18 +4251,18 @@ export class AdapterClass extends EventEmitter { type, enums: enums as ioBroker.EnumList | undefined, options, - callback + callback, }); } private async _getForeignObjects( - _options: InternalGetObjectsOptions + _options: InternalGetObjectsOptions, ): Promise | void> { const { options, callback, type, pattern, enums } = _options; if (!this.#objects) { this._logger.info( - `${this.namespaceLog} getForeignObjects not processed because Objects database not connected` + `${this.namespaceLog} getForeignObjects not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -4288,7 +4281,7 @@ export class AdapterClass extends EventEmitter { if (pattern && pattern !== '*') { params = { startkey: pattern.replace(/\*/g, ''), - endkey: pattern.replace(/\*/g, '\u9999') + endkey: pattern.replace(/\*/g, '\u9999'), }; } @@ -4316,8 +4309,8 @@ export class AdapterClass extends EventEmitter { // It is not so important warning, so print it as debug this._logger.debug( `${this.namespaceLog} getEnums(${JSON.stringify( - enums - )}) returned an enum without a value at index ${i}, obj - ${JSON.stringify(obj)}` + enums, + )}) returned an enum without a value at index ${i}, obj - ${JSON.stringify(obj)}`, ); continue; } @@ -4374,7 +4367,7 @@ export class AdapterClass extends EventEmitter { idOrName: string, type: string | null, options: unknown, - callback: ioBroker.FindObjectCallback + callback: ioBroker.FindObjectCallback, ): void; /** @@ -4413,7 +4406,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} findForeignObject not processed because Objects database not connected` + `${this.namespaceLog} findForeignObject not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -4430,12 +4423,12 @@ export class AdapterClass extends EventEmitter { // external signatures getForeignObject( id: T, - callback: ioBroker.GetObjectCallback + callback: ioBroker.GetObjectCallback, ): void | Promise | null>; getForeignObject( id: T, options: unknown, - callback: ioBroker.GetObjectCallback + callback: ioBroker.GetObjectCallback, ): void | Promise | null>; /** @@ -4455,7 +4448,7 @@ export class AdapterClass extends EventEmitter { getForeignObject( id: unknown, options: unknown, - callback?: unknown + callback?: unknown, ): void | Promise { if (typeof options === 'function') { callback = options; @@ -4479,7 +4472,7 @@ export class AdapterClass extends EventEmitter { private async _getForeignObject(options: InternalGetObjectOptions): Promise { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} getForeignObject not processed because Objects database not connected` + `${this.namespaceLog} getForeignObject not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(options.callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -4541,31 +4534,30 @@ export class AdapterClass extends EventEmitter { private _deleteObjects( tasks: { id: string; [other: string]: any }[], options: Record, - cb?: () => void + cb?: () => void, ): void | Promise { if (!tasks || !tasks.length) { return tools.maybeCallback(cb); - } else { - const task = tasks.shift(); - this.#objects!.delObject(task!.id, options, async err => { - if (err) { - return tools.maybeCallbackWithError(cb, err); - } - if (task!.state) { - try { - await this.delForeignStateAsync(task!.id, options); - } catch (e) { - this._logger.warn(`${this.namespaceLog} Could not remove state of ${task!.id}: ${e.message}`); - } - } + } + const task = tasks.shift(); + this.#objects!.delObject(task!.id, options, async err => { + if (err) { + return tools.maybeCallbackWithError(cb, err); + } + if (task!.state) { try { - await tools.removeIdFromAllEnums(this.#objects, task!.id, this.enums); + await this.delForeignStateAsync(task!.id, options); } catch (e) { - this._logger.warn(`${this.namespaceLog} Could not remove ${task!.id} from enums: ${e.message}`); + this._logger.warn(`${this.namespaceLog} Could not remove state of ${task!.id}: ${e.message}`); } - setImmediate(() => this._deleteObjects(tasks, options, cb)); - }); - } + } + try { + await tools.removeIdFromAllEnums(this.#objects, task!.id, this.enums); + } catch (e) { + this._logger.warn(`${this.namespaceLog} Could not remove ${task!.id} from enums: ${e.message}`); + } + setImmediate(() => this._deleteObjects(tasks, options, cb)); + }); } delForeignObject(id: string, callback?: ioBroker.ErrorCallback): void; @@ -4599,7 +4591,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} delForeignObject not processed because Objects database not connected` + `${this.namespaceLog} delForeignObject not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -4637,7 +4629,7 @@ export class AdapterClass extends EventEmitter { (item: ioBroker.GetObjectListItem) => !tasks.find(task => task.id === item.id) && (!item.value || !item.value.common || !item.value.common.dontDelete) && // exclude objects with dontDelete flag - tasks.push({ id: item.id, state: item.value && item.value.type === 'state' }) + tasks.push({ id: item.id, state: item.value && item.value.type === 'state' }), ); this._deleteObjects(tasks, options, callback); }); @@ -4705,7 +4697,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} subscribeObjects not processed because Objects database not connected` + `${this.namespaceLog} subscribeObjects not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -4747,7 +4739,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} unsubscribeObjects not processed because Objects database not connected` + `${this.namespaceLog} unsubscribeObjects not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -4790,7 +4782,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} subscribeForeignObjects not processed because Objects database not connected` + `${this.namespaceLog} subscribeForeignObjects not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -4831,7 +4823,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} unsubscribeForeignObjects not processed because Objects database not connected` + `${this.namespaceLog} unsubscribeForeignObjects not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -4852,9 +4844,10 @@ export class AdapterClass extends EventEmitter { subscribeForeignFiles(id: unknown, pattern: unknown, options?: unknown): Promise { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} subscribeForeignFiles not processed because Objects database not connected` + `${this.namespaceLog} subscribeForeignFiles not processed because Objects database not connected`, ); - return Promise.reject(tools.ERRORS.ERROR_DB_CLOSED); + + throw new Error(tools.ERRORS.ERROR_DB_CLOSED); } Validator.assertString(id, 'id'); @@ -4882,9 +4875,10 @@ export class AdapterClass extends EventEmitter { } if (!this.#objects) { this._logger.info( - `${this.namespaceLog} unsubscribeForeignFiles not processed because Objects database not connected` + `${this.namespaceLog} unsubscribeForeignFiles not processed because Objects database not connected`, ); - return Promise.reject(tools.ERRORS.ERROR_DB_CLOSED); + + throw new Error(tools.ERRORS.ERROR_DB_CLOSED); } Validator.assertString(id, 'id'); @@ -4900,13 +4894,13 @@ export class AdapterClass extends EventEmitter { setObjectNotExists( id: string, obj: ioBroker.SettableObject, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): Promise> | void; setObjectNotExists( id: string, obj: ioBroker.SettableObject, options: unknown, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): Promise> | void; /** * Same as {@link AdapterClass.setObject}, but with check if the object exists. @@ -4929,7 +4923,7 @@ export class AdapterClass extends EventEmitter { id: unknown, obj: unknown, options?: unknown, - callback?: unknown + callback?: unknown, ): Promise> | void { if (typeof options === 'function') { callback = options; @@ -4953,16 +4947,16 @@ export class AdapterClass extends EventEmitter { id: this.fixForbiddenCharsInId(this._utils.fixId(id)), obj: obj as any, options, - callback + callback, }); } private async _setObjectNotExists( - options: InternalSetObjectOptions + options: InternalSetObjectOptions, ): Promise> { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} setObjectNotExists not processed because Objects database not connected` + `${this.namespaceLog} setObjectNotExists not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(options.callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -4978,7 +4972,7 @@ export class AdapterClass extends EventEmitter { } catch (e) { return tools.maybeCallbackWithError( options.callback, - `Could not check object existence of ${options.id}: ${e.message}` + `Could not check object existence of ${options.id}: ${e.message}`, ); } @@ -4994,22 +4988,21 @@ export class AdapterClass extends EventEmitter { } return this._setObjectWithDefaultValue(options.id, options.obj, null, options.callback); - } else { - return tools.maybeCallbackWithError(options.callback, null); } + return tools.maybeCallbackWithError(options.callback, null); } // external signatures setForeignObjectNotExists( id: T, obj: ioBroker.SettableObject>, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; setForeignObjectNotExists( id: T, obj: ioBroker.SettableObject>, options: unknown, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; /** @@ -5033,7 +5026,7 @@ export class AdapterClass extends EventEmitter { id: unknown, obj: unknown, options: unknown, - callback?: unknown + callback?: unknown, ): Promise | void> { if (typeof options === 'function') { callback = options; @@ -5052,13 +5045,13 @@ export class AdapterClass extends EventEmitter { } private async _setForeignObjectNotExists( - _options: InternalSetObjectOptions + _options: InternalSetObjectOptions, ): Promise | void> { const { id, obj, options, callback } = _options; if (!this.#objects) { this._logger.info( - `${this.namespaceLog} setForeignObjectNotExists not processed because Objects database not connected` + `${this.namespaceLog} setForeignObjectNotExists not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -5089,9 +5082,8 @@ export class AdapterClass extends EventEmitter { } return this._setObjectWithDefaultValue(id, obj, null, callback); - } else { - return tools.maybeCallbackWithError(callback, null); } + return tools.maybeCallbackWithError(callback, null); } private _DCS2ID(device: string, channel: string, stateOrPoint?: boolean | string): string { @@ -5120,14 +5112,14 @@ export class AdapterClass extends EventEmitter { createDevice( deviceName: string, common: Partial, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; /** @deprecated use `this.extendObject` instead */ createDevice( deviceName: string, common: Partial, native: Record, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; /** @deprecated use `this.extendObject` instead */ createDevice( @@ -5135,7 +5127,7 @@ export class AdapterClass extends EventEmitter { common: Partial, native: Record, options: unknown, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; /** @@ -5148,7 +5140,7 @@ export class AdapterClass extends EventEmitter { */ createDevice(deviceName: unknown, common: unknown, _native?: unknown, options?: unknown, callback?: unknown): any { this._logger.info( - `${this.namespaceLog} Method "createDevice" is deprecated and will be removed in js-controller 7, use "extendObject/setObjectNotExists" instead` + `${this.namespaceLog} Method "createDevice" is deprecated and will be removed in js-controller 7, use "extendObject/setObjectNotExists" instead`, ); if (typeof options === 'function') { @@ -5179,7 +5171,7 @@ export class AdapterClass extends EventEmitter { deviceName, _native, callback, - options + options, }); } @@ -5197,10 +5189,10 @@ export class AdapterClass extends EventEmitter { { type: 'device', common: common, - native: _native + native: _native, } as ioBroker.SettableDeviceObject, options, - callback + callback, ); } @@ -5211,7 +5203,7 @@ export class AdapterClass extends EventEmitter { parentDevice: string, channelName: string, roleOrCommon: string | Partial, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; /** @deprecated use `this.extendObject` instead */ createChannel( @@ -5219,7 +5211,7 @@ export class AdapterClass extends EventEmitter { channelName: string, roleOrCommon: string | Partial, native: Record, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; /** @deprecated use `this.extendObject` instead */ createChannel( @@ -5228,7 +5220,7 @@ export class AdapterClass extends EventEmitter { roleOrCommon: string | Partial, native: Record, options: unknown, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; /** @@ -5248,10 +5240,10 @@ export class AdapterClass extends EventEmitter { roleOrCommon?: unknown, _native?: unknown, options?: unknown, - callback?: unknown + callback?: unknown, ): any { this._logger.info( - `${this.namespaceLog} Method "createChannel" is deprecated and will be removed in js-controller 7, use "extendObject/setObjectNotExists" instead` + `${this.namespaceLog} Method "createChannel" is deprecated and will be removed in js-controller 7, use "extendObject/setObjectNotExists" instead`, ); if (typeof options === 'function') { @@ -5276,7 +5268,7 @@ export class AdapterClass extends EventEmitter { if (typeof roleOrCommon === 'string') { common = { name: '', - role: roleOrCommon + role: roleOrCommon, }; } else if (tools.isObject(roleOrCommon)) { common = roleOrCommon; @@ -5301,7 +5293,7 @@ export class AdapterClass extends EventEmitter { const obj = { type: 'channel', common: common, - native: _native + native: _native, } as const; this.setObjectNotExists(channelName as string, obj as any, options, callback); @@ -5312,7 +5304,7 @@ export class AdapterClass extends EventEmitter { parentDevice: string, parentChannel: string, stateName: string, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; /** @deprecated use `this.extendObject` instead */ createState( @@ -5320,7 +5312,7 @@ export class AdapterClass extends EventEmitter { parentChannel: string, stateName: string, roleOrCommon: string | Partial, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; /** @deprecated use `this.extendObject` instead */ createState( @@ -5329,7 +5321,7 @@ export class AdapterClass extends EventEmitter { stateName: string, roleOrCommon: string | Partial, native: Record, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; /** @deprecated use `this.extendObject` instead */ createState( @@ -5339,7 +5331,7 @@ export class AdapterClass extends EventEmitter { roleOrCommon: string | Partial, native: Record, options: unknown, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void; /** @@ -5359,10 +5351,10 @@ export class AdapterClass extends EventEmitter { roleOrCommon: unknown, _native?: unknown, options?: unknown, - callback?: unknown + callback?: unknown, ): any { this._logger.info( - `${this.namespaceLog} Method "createState" is deprecated and will be removed in js-controller 7, use "extendObject/setObjectNotExists" instead` + `${this.namespaceLog} Method "createState" is deprecated and will be removed in js-controller 7, use "extendObject/setObjectNotExists" instead`, ); if (typeof options === 'function') { @@ -5389,7 +5381,7 @@ export class AdapterClass extends EventEmitter { read: true, write: false, name: '', - role: roleOrCommon + role: roleOrCommon, }; } else if (tools.isObject(roleOrCommon)) { common = roleOrCommon; @@ -5423,7 +5415,7 @@ export class AdapterClass extends EventEmitter { this._logger.error( `${this.namespaceLog} Try to create state ${ parentDevice ? `${parentDevice}.` : '' - }${parentChannel}.${stateName} without role` + }${parentChannel}.${stateName} without role`, ); return; } @@ -5436,9 +5428,9 @@ export class AdapterClass extends EventEmitter { } stateName = stateName.replace(FORBIDDEN_CHARS, '_').replace(/\./g, '_'); const id = this._utils.fixId({ - device: parentDevice as string, - channel: parentChannel as string, - state: stateName as string + device: parentDevice, + channel: parentChannel, + state: stateName, }); // Check min, max and def values for number @@ -5455,9 +5447,8 @@ export class AdapterClass extends EventEmitter { err = `Wrong type of ${id}.common.min`; this._logger.error(`${this.namespaceLog} ${err}`); return tools.maybeCallbackWithError(callback, err); - } else { - common.min = min; } + common.min = min; } } if (common.max !== undefined) { @@ -5468,9 +5459,8 @@ export class AdapterClass extends EventEmitter { err = `Wrong type of ${id}.common.max`; this._logger.error(`${this.namespaceLog} ${err}`); return tools.maybeCallbackWithError(callback, err); - } else { - common.max = max; } + common.max = max; } } if (common.def !== undefined) { @@ -5481,9 +5471,8 @@ export class AdapterClass extends EventEmitter { err = new Error(`Wrong type of ${id}.common.def`); this._logger.error(`${this.namespaceLog} ${err.message}`); return tools.maybeCallbackWithError(callback, err); - } else { - common.def = def; } + common.def = def; } } if (common.min !== undefined && common.max !== undefined && min > max) { @@ -5503,7 +5492,7 @@ export class AdapterClass extends EventEmitter { { type: 'state', common: common as any, - native: _native as any + native: _native as any, }, options, err => { @@ -5530,7 +5519,7 @@ export class AdapterClass extends EventEmitter { } }); } - } + }, ); } @@ -5554,7 +5543,7 @@ export class AdapterClass extends EventEmitter { */ deleteDevice(deviceName: unknown, options: unknown, callback?: unknown): any { this._logger.info( - `${this.namespaceLog} Method "deleteDevice" is deprecated and will be removed in js-controller 7, use "delObject" instead` + `${this.namespaceLog} Method "deleteDevice" is deprecated and will be removed in js-controller 7, use "delObject" instead`, ); if (typeof options === 'function') { @@ -5612,7 +5601,7 @@ export class AdapterClass extends EventEmitter { addTo: string, parentDevice: string, channelName: string, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void; addChannelToEnum( enumName: string, @@ -5620,7 +5609,7 @@ export class AdapterClass extends EventEmitter { parentDevice: string, channelName: string, options: unknown, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void; addChannelToEnum( @@ -5629,7 +5618,7 @@ export class AdapterClass extends EventEmitter { parentDevice: unknown, channelName: unknown, options: unknown, - callback?: unknown + callback?: unknown, ): MaybePromise { if (typeof options === 'function') { callback = options; @@ -5654,7 +5643,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} addChannelToEnum not processed because Objects database not connected` + `${this.namespaceLog} addChannelToEnum not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -5724,15 +5713,15 @@ export class AdapterClass extends EventEmitter { { common: { name: addTo, - members: [objId] + members: [objId], }, from: `system.adapter.${this.namespace}`, ts: Date.now(), type: 'enum', - native: {} + native: {}, }, options, - callback + callback, ); } }); @@ -5744,14 +5733,14 @@ export class AdapterClass extends EventEmitter { enumName: string, parentDevice: string, channelName: string, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void; deleteChannelFromEnum( enumName: string, parentDevice: string, channelName: string, options: unknown, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void; deleteChannelFromEnum( @@ -5759,7 +5748,7 @@ export class AdapterClass extends EventEmitter { parentDevice: unknown, channelName: unknown, options: unknown, - callback?: unknown + callback?: unknown, ): any { if (typeof options === 'function') { callback = options; @@ -5783,7 +5772,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} deleteChannelFromEnum not processed because Objects database not connected` + `${this.namespaceLog} deleteChannelFromEnum not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -5817,7 +5806,7 @@ export class AdapterClass extends EventEmitter { 'enum', { startkey: enumName, - endkey: `${enumName}\u9999` + endkey: `${enumName}\u9999`, }, options, async (err, res) => { @@ -5850,7 +5839,7 @@ export class AdapterClass extends EventEmitter { } } return tools.maybeCallback(callback); - } + }, ); } @@ -5864,7 +5853,7 @@ export class AdapterClass extends EventEmitter { parentDevice: string, channelName: string, options?: unknown, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void; /** @@ -5884,7 +5873,7 @@ export class AdapterClass extends EventEmitter { */ deleteChannel(parentDevice: unknown, channelName: unknown, options?: unknown, callback?: unknown): any { this._logger.info( - `${this.namespaceLog} Method "deleteChannel" is deprecated and will be removed in js-controller 7, use "delObject" instead` + `${this.namespaceLog} Method "deleteChannel" is deprecated and will be removed in js-controller 7, use "delObject" instead`, ); if (typeof options === 'function') { @@ -5918,7 +5907,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} deleteChannel not processed because Objects database not connected` + `${this.namespaceLog} deleteChannel not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -5981,7 +5970,7 @@ export class AdapterClass extends EventEmitter { parentChannel: string | null, stateName: string, options?: unknown, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void; /** @@ -5997,10 +5986,10 @@ export class AdapterClass extends EventEmitter { parentChannel: unknown, stateName?: unknown, options?: unknown, - callback?: unknown + callback?: unknown, ): any { this._logger.info( - `${this.namespaceLog} Method "deleteState" is deprecated and will be removed in js-controller 7, use "delObject" instead` + `${this.namespaceLog} Method "deleteState" is deprecated and will be removed in js-controller 7, use "delObject" instead`, ); if (typeof parentChannel === 'function' && stateName === undefined) { @@ -6127,7 +6116,7 @@ export class AdapterClass extends EventEmitter { 'device', { startkey: `${this.namespace}.`, - endkey: `${this.namespace}.\u9999` + endkey: `${this.namespace}.\u9999`, }, options, (err, obj) => { @@ -6141,7 +6130,7 @@ export class AdapterClass extends EventEmitter { } } return tools.maybeCallbackWithError(callback, null, res); - } + }, ); } @@ -6151,7 +6140,7 @@ export class AdapterClass extends EventEmitter { getChannelsOf( parentDevice: string, options: unknown, - callback: ioBroker.GetObjectsCallback3 + callback: ioBroker.GetObjectsCallback3, ): void; getChannelsOf(parentDevice: unknown, options?: unknown, callback?: unknown): any { if (typeof options === 'function') { @@ -6178,7 +6167,7 @@ export class AdapterClass extends EventEmitter { private _getChannelsOf(options: InternalGetChannelsOfOptions): Promise | void { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} getChannelsOf not processed because Objects database not connected` + `${this.namespaceLog} getChannelsOf not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(options.callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -6198,7 +6187,7 @@ export class AdapterClass extends EventEmitter { 'channel', { startkey: `${options.parentDevice}.`, - endkey: `${options.parentDevice}.\u9999` + endkey: `${options.parentDevice}.\u9999`, }, options.options || {}, (err, obj) => { @@ -6212,7 +6201,7 @@ export class AdapterClass extends EventEmitter { } } return tools.maybeCallbackWithError(options.callback, null, res); - } + }, ); } @@ -6222,13 +6211,13 @@ export class AdapterClass extends EventEmitter { getStatesOf( parentDevice: string | null | undefined, parentChannel: string | null | undefined, - callback: ioBroker.GetObjectsCallback3 + callback: ioBroker.GetObjectsCallback3, ): void; getStatesOf( parentDevice: string | null | undefined, parentChannel: string | null | undefined, options: unknown, - callback: ioBroker.GetObjectsCallback3 + callback: ioBroker.GetObjectsCallback3, ): void; getStatesOf(parentDevice: unknown, parentChannel?: unknown, options?: unknown, callback?: unknown): any { if (typeof options === 'function') { @@ -6303,7 +6292,7 @@ export class AdapterClass extends EventEmitter { 'state', { startkey: id, - endkey: `${id}\u9999` + endkey: `${id}\u9999`, }, options, (err, obj) => { @@ -6324,7 +6313,7 @@ export class AdapterClass extends EventEmitter { } }); } - } + }, ); } @@ -6335,7 +6324,7 @@ export class AdapterClass extends EventEmitter { parentDevice: string, parentChannel: string, stateName: string, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void; addStateToEnum( enumName: string, @@ -6344,7 +6333,7 @@ export class AdapterClass extends EventEmitter { parentChannel: string, stateName: string, options: unknown, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void; addStateToEnum( enumName: unknown, @@ -6353,7 +6342,7 @@ export class AdapterClass extends EventEmitter { parentChannel: unknown, stateName: unknown, options: unknown, - callback?: unknown + callback?: unknown, ): any { if (typeof options === 'function') { callback = options; @@ -6379,7 +6368,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} addStateToEnum not processed because Objects database not connected` + `${this.namespaceLog} addStateToEnum not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -6437,7 +6426,7 @@ export class AdapterClass extends EventEmitter { enumName = enumName.substring(5); } - this.#objects!.getObject(`enum.${enumName}.${addTo}`, options, (err, obj) => { + this.#objects.getObject(`enum.${enumName}.${addTo}`, options, (err, obj) => { if (!err && obj) { // @ts-expect-error cast to enum object if (!obj.common.members.includes(objId)) { @@ -6460,15 +6449,15 @@ export class AdapterClass extends EventEmitter { { common: { name: addTo, - members: [objId] + members: [objId], }, from: `system.adapter.${this.namespace}`, ts: Date.now(), type: 'enum', - native: {} + native: {}, }, options, - callback + callback, ); } }); @@ -6481,7 +6470,7 @@ export class AdapterClass extends EventEmitter { parentDevice: string, parentChannel: string, stateName: string, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void; deleteStateFromEnum( enumName: string, @@ -6489,7 +6478,7 @@ export class AdapterClass extends EventEmitter { parentChannel: string, stateName: string, options: unknown, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void; deleteStateFromEnum( enumName: unknown, @@ -6497,7 +6486,7 @@ export class AdapterClass extends EventEmitter { parentChannel: unknown, stateName: unknown, options: unknown, - callback?: unknown + callback?: unknown, ): any { if (typeof options === 'function') { callback = options; @@ -6522,7 +6511,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} deleteStateFromEnum not processed because Objects database not connected` + `${this.namespaceLog} deleteStateFromEnum not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -6561,9 +6550,9 @@ export class AdapterClass extends EventEmitter { { device: parentDevice, channel: parentChannel, - state: stateName + state: stateName, }, - false /*, 'state'*/ + false /*, 'state'*/, ); if (enumName) { @@ -6577,7 +6566,7 @@ export class AdapterClass extends EventEmitter { 'enum', { startkey: enumName, - endkey: `${enumName}\u9999` + endkey: `${enumName}\u9999`, }, options, async (err, res) => { @@ -6603,7 +6592,7 @@ export class AdapterClass extends EventEmitter { } } return tools.maybeCallback(callback); - } + }, ); } // external signature @@ -6611,7 +6600,7 @@ export class AdapterClass extends EventEmitter { adapter: string | null, path: string, options: { mode: number | string } | Record, - callback: ioBroker.ChownFileCallback + callback: ioBroker.ChownFileCallback, ): void; chmodFile(adapter: string | null, path: string, callback: ioBroker.ChownFileCallback): void; @@ -6658,7 +6647,7 @@ export class AdapterClass extends EventEmitter { _adapter: string, path: string, options: unknown, - callback: (err?: Error | null, processedFiles?: any) => void + callback: (err?: Error | null, processedFiles?: any) => void, ): void; chownFile(_adapter: string, path: string, callback: (err?: Error | null, processedFiles?: any) => void): void; @@ -6698,7 +6687,7 @@ export class AdapterClass extends EventEmitter { return tools.maybeCallbackWithError(callback as any, tools.ERRORS.ERROR_DB_CLOSED); } - this.#objects!.chownFile(_adapter as string, path as string, options as any, callback as any); + this.#objects.chownFile(_adapter as string, path as string, options as any, callback as any); } // external signatures @@ -6790,7 +6779,7 @@ export class AdapterClass extends EventEmitter { return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } - this.#objects!.unlink(_adapter, name, options, callback); + this.#objects.unlink(_adapter, name, options, callback); } // external signatures @@ -6800,7 +6789,7 @@ export class AdapterClass extends EventEmitter { oldName: string, newName: string, options: unknown, - callback: ioBroker.ErrnoCallback + callback: ioBroker.ErrnoCallback, ): void; rename(_adapter: unknown, oldName: unknown, newName: unknown, options: unknown, callback?: unknown): any { @@ -6911,7 +6900,7 @@ export class AdapterClass extends EventEmitter { path: string, data: Buffer | string, options: unknown, - callback: ioBroker.ErrnoCallback + callback: ioBroker.ErrnoCallback, ): void; /** @@ -6969,7 +6958,7 @@ export class AdapterClass extends EventEmitter { adapterName: string | null, path: string, options: unknown, - callback: ioBroker.GenericCallback + callback: ioBroker.GenericCallback, ): void; /** @@ -6984,7 +6973,7 @@ export class AdapterClass extends EventEmitter { _adapter: unknown, filename: unknown, options?: unknown, - callback?: unknown + callback?: unknown, ): Promise { if (typeof options === 'function') { callback = options; @@ -7204,14 +7193,14 @@ export class AdapterClass extends EventEmitter { sendTo( instanceName: string, message: any, - callback?: ioBroker.MessageCallback | ioBroker.MessageCallbackInfo + callback?: ioBroker.MessageCallback | ioBroker.MessageCallbackInfo, ): void; sendTo( instanceName: string, command: string, message: any, callback?: ioBroker.MessageCallback | ioBroker.MessageCallbackInfo, - options?: SendToOptions + options?: SendToOptions, ): void; /** @@ -7258,7 +7247,7 @@ export class AdapterClass extends EventEmitter { command, message, options, - callback: callback as ioBroker.MessageCallbackInfo | ioBroker.MessageCallback + callback: callback as ioBroker.MessageCallbackInfo | ioBroker.MessageCallback, }); } @@ -7287,7 +7276,7 @@ export class AdapterClass extends EventEmitter { command as string, message as string, callback, - options as SendToOptions + options as SendToOptions, ); }); } @@ -7299,7 +7288,7 @@ export class AdapterClass extends EventEmitter { const obj: ioBroker.SendableMessage = { command, message, - from: `system.adapter.${this.namespace}` + from: `system.adapter.${this.namespace}`, }; if (!instanceName) { @@ -7320,11 +7309,11 @@ export class AdapterClass extends EventEmitter { if (typeof message !== 'object') { this._logger.silly( - `${this.namespaceLog} sendTo "${command}" to ${instanceName} from system.adapter.${this.namespace}: ${message}` + `${this.namespaceLog} sendTo "${command}" to ${instanceName} from system.adapter.${this.namespace}: ${message}`, ); } else { this._logger.silly( - `${this.namespaceLog} sendTo "${command}" to ${instanceName} from system.adapter.${this.namespace}` + `${this.namespaceLog} sendTo "${command}" to ${instanceName} from system.adapter.${this.namespace}`, ); } @@ -7340,13 +7329,13 @@ export class AdapterClass extends EventEmitter { // Send it to all instances of adapter const res = await this.#objects.getObjectView('system', 'instance', { startkey: `${instanceName}.`, - endkey: `${instanceName}.\u9999` + endkey: `${instanceName}.\u9999`, }); if (res) { for (const row of res.rows) { try { - await this.#states!.pushMessage(row.id, obj); + await this.#states.pushMessage(row.id, obj); } catch (e) { // @ts-expect-error TODO it could also be the cb object return tools.maybeCallbackWithError(callback, e); @@ -7369,7 +7358,7 @@ export class AdapterClass extends EventEmitter { message, id: this._callbackId++, ack: false, - time: Date.now() + time: Date.now(), }; if (this._callbackId >= 0xffffffff) { this._callbackId = 1; @@ -7418,13 +7407,13 @@ export class AdapterClass extends EventEmitter { sendToHost( hostName: string | null, message: any, - callback?: ioBroker.MessageCallback | ioBroker.MessageCallbackInfo + callback?: ioBroker.MessageCallback | ioBroker.MessageCallbackInfo, ): void; sendToHost( hostName: string | null, command: string, message: any, - callback?: ioBroker.MessageCallback | ioBroker.MessageCallbackInfo + callback?: ioBroker.MessageCallback | ioBroker.MessageCallbackInfo, ): void; /** @@ -7464,7 +7453,7 @@ export class AdapterClass extends EventEmitter { hostName, command, message, - callback: callback as ioBroker.MessageCallback | ioBroker.MessageCallbackInfo + callback: callback as ioBroker.MessageCallback | ioBroker.MessageCallbackInfo, }); } @@ -7487,7 +7476,7 @@ export class AdapterClass extends EventEmitter { if (!hostName) { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} sendToHost not processed because Objects database not connected` + `${this.namespaceLog} sendToHost not processed because Objects database not connected`, ); // @ts-expect-error TODO it could also be the cb object return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); @@ -7497,7 +7486,7 @@ export class AdapterClass extends EventEmitter { this.#objects.getObjectList( { startkey: 'system.host.', - endkey: `system.host.\u9999` + endkey: `system.host.\u9999`, }, null, async (err, res) => { @@ -7511,7 +7500,7 @@ export class AdapterClass extends EventEmitter { // ignore system.host.name.alive and so on if (parts.length === 3) { try { - await this.#states!.pushMessage(row.id, obj as any); + await this.#states.pushMessage(row.id, obj as any); } catch (e) { // @ts-expect-error TODO it could also be the cb object return tools.maybeCallbackWithError(callback, e); @@ -7519,7 +7508,7 @@ export class AdapterClass extends EventEmitter { } } } - } + }, ); } else { if (callback) { @@ -7534,7 +7523,7 @@ export class AdapterClass extends EventEmitter { message, id: this._callbackId++, ack: false, - time: Date.now() + time: Date.now(), }; if (this._callbackId >= 0xffffffff) { this._callbackId = 1; @@ -7574,7 +7563,7 @@ export class AdapterClass extends EventEmitter { if (clientId === undefined) { return this.uiMessagingController.sendToAllClients({ data, - states: this.#states + states: this.#states, }); } @@ -7583,7 +7572,7 @@ export class AdapterClass extends EventEmitter { return this.uiMessagingController.sendToClient({ clientId, data, - states: this.#states + states: this.#states, }); } @@ -7591,7 +7580,7 @@ export class AdapterClass extends EventEmitter { scope: Scope, category: ioBroker.NotificationScopes[Scope] | null, message: string, - options?: NotificationOptions + options?: NotificationOptions, ): Promise; /** @@ -7606,7 +7595,7 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to set this._logger.info( - `${this.namespaceLog} registerNotification not processed because States database not connected` + `${this.namespaceLog} registerNotification not processed because States database not connected`, ); throw new Error(tools.ERRORS.ERROR_DB_CLOSED); } @@ -7628,9 +7617,9 @@ export class AdapterClass extends EventEmitter { category, message, instance: this.namespace, - contextData: options?.contextData + contextData: options?.contextData, }, - from: `system.adapter.${this.namespace}` + from: `system.adapter.${this.namespace}`, }; await this.#states.pushMessage(`system.host.${this.host}`, obj as any); @@ -7640,26 +7629,26 @@ export class AdapterClass extends EventEmitter { setState( id: string | ioBroker.IdObject, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, - callback?: T + callback?: T, ): T extends unknown ? ioBroker.SetStatePromise : void; setState( id: string | ioBroker.IdObject, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, ack: boolean, - callback?: T + callback?: T, ): T extends unknown ? ioBroker.SetStatePromise : void; setState( id: string | ioBroker.IdObject, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, options?: Partial | null, - callback?: T + callback?: T, ): T extends unknown ? ioBroker.SetStatePromise : void; setState( id: string | ioBroker.IdObject, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, ack: boolean, options?: Partial | null, - callback?: T + callback?: T, ): T extends unknown ? ioBroker.SetStatePromise : void; /** @@ -7698,7 +7687,7 @@ export class AdapterClass extends EventEmitter { state: unknown, ack: unknown, options?: unknown, - callback?: unknown + callback?: unknown, ): Promise | void { if (typeof state === 'object' && typeof ack !== 'boolean') { callback = options; @@ -7805,7 +7794,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { // if objects is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} setForeignState not processed because Objects database not connected` + `${this.namespaceLog} setForeignState not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -7828,7 +7817,7 @@ export class AdapterClass extends EventEmitter { this._logger.warn(`${this.namespaceLog} Error validating alias id of ${fixedId}: ${e.message}`); return tools.maybeCallbackWithError( callback, - `Error validating alias id of ${fixedId}: ${e.message}` + `Error validating alias id of ${fixedId}: ${e.message}`, ); } @@ -7850,7 +7839,7 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} setForeignState not processed because States database not connected` + `${this.namespaceLog} setForeignState not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -7867,8 +7856,8 @@ export class AdapterClass extends EventEmitter { logger: this._logger, logNamespace: this.namespaceLog, sourceId: obj?._id, - targetId: targetObj?._id - }) + targetId: targetObj?._id, + }), ); return tools.maybeCallbackWithError(callback, null, res); @@ -7883,7 +7872,7 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} setForeignState not processed because States database not connected` + `${this.namespaceLog} setForeignState not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -7917,116 +7906,115 @@ export class AdapterClass extends EventEmitter { // User does not exists this._logger.error(`${this.namespaceLog} unknown user "${options.user}"`); return options; - } else { - let groups; - try { - groups = await this.getForeignObjectsAsync('*', 'group', null, null); - } catch { - // ignore - } + } + let groups; + try { + groups = await this.getForeignObjectsAsync('*', 'group', null, null); + } catch { + // ignore + } - // aggregate all groups permissions, where this user is - if (groups) { - for (const group of Object.values(groups)) { - if (group.common.members.includes(options.user)) { - options.groups.push(group._id); - } + // aggregate all groups permissions, where this user is + if (groups) { + for (const group of Object.values(groups)) { + if (group.common.members.includes(options.user)) { + options.groups.push(group._id); } } + } - // read all groups for this user - this.users[options.user] = { - groups: options.groups, - // @ts-expect-error TODO: UserCommon has no acl - acl: userAcl.common?.acl || {} - }; - await this._getGroups(options.groups); - // combine all rights - const user = this.users[options.user]; - for (const gName of options.groups) { - if (!this.groups[gName].common?.acl) { - continue; - } - const group = this.groups[gName]; + // read all groups for this user + this.users[options.user] = { + groups: options.groups, + // @ts-expect-error TODO: UserCommon has no acl + acl: userAcl.common?.acl || {}, + }; + await this._getGroups(options.groups); + // combine all rights + const user = this.users[options.user]; + for (const gName of options.groups) { + if (!this.groups[gName].common?.acl) { + continue; + } + const group = this.groups[gName]; - if (group.common?.acl?.file) { - if (!user.acl || !user.acl.file) { - user.acl = user.acl || {}; - user.acl.file = user.acl.file || {}; + if (group.common?.acl?.file) { + if (!user.acl || !user.acl.file) { + user.acl = user.acl || {}; + user.acl.file = user.acl.file || {}; - user.acl.file.create = group.common.acl.file.create; - user.acl.file.read = group.common.acl.file.read; - user.acl.file.write = group.common.acl.file.write; - user.acl.file.delete = group.common.acl.file.delete; - user.acl.file.list = group.common.acl.file.list; - } else { - user.acl.file.create = user.acl.file.create || group.common.acl.file.create; - user.acl.file.read = user.acl.file.read || group.common.acl.file.read; - user.acl.file.write = user.acl.file.write || group.common.acl.file.write; - user.acl.file.delete = user.acl.file.delete || group.common.acl.file.delete; - user.acl.file.list = user.acl.file.list || group.common.acl.file.list; - } + user.acl.file.create = group.common.acl.file.create; + user.acl.file.read = group.common.acl.file.read; + user.acl.file.write = group.common.acl.file.write; + user.acl.file.delete = group.common.acl.file.delete; + user.acl.file.list = group.common.acl.file.list; + } else { + user.acl.file.create = user.acl.file.create || group.common.acl.file.create; + user.acl.file.read = user.acl.file.read || group.common.acl.file.read; + user.acl.file.write = user.acl.file.write || group.common.acl.file.write; + user.acl.file.delete = user.acl.file.delete || group.common.acl.file.delete; + user.acl.file.list = user.acl.file.list || group.common.acl.file.list; } + } - if (group.common?.acl?.object) { - if (!user.acl || !user.acl.object) { - user.acl = user.acl || {}; - user.acl.object = user.acl.object || {}; + if (group.common?.acl?.object) { + if (!user.acl || !user.acl.object) { + user.acl = user.acl || {}; + user.acl.object = user.acl.object || {}; - user.acl.object.create = group.common.acl.object.create; - user.acl.object.read = group.common.acl.object.read; - user.acl.object.write = group.common.acl.object.write; - user.acl.object.delete = group.common.acl.object.delete; - user.acl.object.list = group.common.acl.object.list; - } else { - user.acl.object.create = user.acl.object.create || group.common.acl.object.create; - user.acl.object.read = user.acl.object.read || group.common.acl.object.read; - user.acl.object.write = user.acl.object.write || group.common.acl.object.write; - user.acl.object.delete = user.acl.object.delete || group.common.acl.object.delete; - user.acl.object.list = user.acl.object.list || group.common.acl.object.list; - } + user.acl.object.create = group.common.acl.object.create; + user.acl.object.read = group.common.acl.object.read; + user.acl.object.write = group.common.acl.object.write; + user.acl.object.delete = group.common.acl.object.delete; + user.acl.object.list = group.common.acl.object.list; + } else { + user.acl.object.create = user.acl.object.create || group.common.acl.object.create; + user.acl.object.read = user.acl.object.read || group.common.acl.object.read; + user.acl.object.write = user.acl.object.write || group.common.acl.object.write; + user.acl.object.delete = user.acl.object.delete || group.common.acl.object.delete; + user.acl.object.list = user.acl.object.list || group.common.acl.object.list; } + } - if (group.common?.acl?.users) { - if (!user.acl || !user.acl.users) { - user.acl = user.acl || {}; - user.acl.users = user.acl.users || {}; + if (group.common?.acl?.users) { + if (!user.acl || !user.acl.users) { + user.acl = user.acl || {}; + user.acl.users = user.acl.users || {}; - user.acl.users.create = group.common.acl.users.create; - user.acl.users.read = group.common.acl.users.read; - user.acl.users.write = group.common.acl.users.write; - user.acl.users.delete = group.common.acl.users.delete; - user.acl.users.list = group.common.acl.users.list; - } else { - user.acl.users.create = user.acl.users.create || group.common.acl.users.create; - user.acl.users.read = user.acl.users.read || group.common.acl.users.read; - user.acl.users.write = user.acl.users.write || group.common.acl.users.write; - user.acl.users.delete = user.acl.users.delete || group.common.acl.users.delete; - user.acl.users.list = user.acl.users.list || group.common.acl.users.list; - } - } - if (group.common?.acl?.state) { - if (!user.acl || !user.acl.state) { - user.acl = user.acl || {}; - user.acl.state = user.acl.state || {}; - - user.acl.state.create = group.common.acl.state.create; - user.acl.state.read = group.common.acl.state.read; - user.acl.state.write = group.common.acl.state.write; - user.acl.state.delete = group.common.acl.state.delete; - user.acl.state.list = group.common.acl.state.list; - } else { - user.acl.state.create = user.acl.state.create || group.common.acl.state.create; - user.acl.state.read = user.acl.state.read || group.common.acl.state.read; - user.acl.state.write = user.acl.state.write || group.common.acl.state.write; - user.acl.state.delete = user.acl.state.delete || group.common.acl.state.delete; - user.acl.state.list = user.acl.state.list || group.common.acl.state.list; - } + user.acl.users.create = group.common.acl.users.create; + user.acl.users.read = group.common.acl.users.read; + user.acl.users.write = group.common.acl.users.write; + user.acl.users.delete = group.common.acl.users.delete; + user.acl.users.list = group.common.acl.users.list; + } else { + user.acl.users.create = user.acl.users.create || group.common.acl.users.create; + user.acl.users.read = user.acl.users.read || group.common.acl.users.read; + user.acl.users.write = user.acl.users.write || group.common.acl.users.write; + user.acl.users.delete = user.acl.users.delete || group.common.acl.users.delete; + user.acl.users.list = user.acl.users.list || group.common.acl.users.list; + } + } + if (group.common?.acl?.state) { + if (!user.acl || !user.acl.state) { + user.acl = user.acl || {}; + user.acl.state = user.acl.state || {}; + + user.acl.state.create = group.common.acl.state.create; + user.acl.state.read = group.common.acl.state.read; + user.acl.state.write = group.common.acl.state.write; + user.acl.state.delete = group.common.acl.state.delete; + user.acl.state.list = group.common.acl.state.list; + } else { + user.acl.state.create = user.acl.state.create || group.common.acl.state.create; + user.acl.state.read = user.acl.state.read || group.common.acl.state.read; + user.acl.state.write = user.acl.state.write || group.common.acl.state.write; + user.acl.state.delete = user.acl.state.delete || group.common.acl.state.delete; + user.acl.state.list = user.acl.state.list || group.common.acl.state.list; } } - options.acl = user.acl; - return options; } + options.acl = user.acl; + return options; } private _checkState(obj: ioBroker.StateObject, options: Record, command: CheckStateCommand): boolean { @@ -8040,90 +8028,90 @@ export class AdapterClass extends EventEmitter { if (command === 'setState' || command === 'delState') { if (command === 'delState' && !options.acl.state.delete) { this._logger.warn( - `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}` + `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}`, ); return false; } else if (command === 'setState' && !options.acl.state.write) { this._logger.warn( - `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}` + `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}`, ); return false; } else if (!(obj.acl.state & ACCESS_USER_WRITE)) { this._logger.warn( - `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}` + `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}`, ); return false; } } else if (command === 'getState') { if (!(obj.acl.state & ACCESS_USER_READ) || !options.acl.state.read) { this._logger.warn( - `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}` + `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}`, ); return false; } } else { this._logger.warn( - `${this.namespaceLog} Called unknown command on "${obj._id}": ${command as any}` + `${this.namespaceLog} Called unknown command on "${obj._id}": ${command as any}`, ); } } else if (options.groups.includes(obj.acl.ownerGroup) && !limitToOwnerRights) { if (command === 'setState' || command === 'delState') { if (command === 'delState' && !options.acl.state.delete) { this._logger.warn( - `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}` + `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}`, ); return false; } else if (command === 'setState' && !options.acl.state.write) { this._logger.warn( - `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}` + `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}`, ); return false; } else if (!(obj.acl.state & ACCESS_GROUP_WRITE)) { this._logger.warn( - `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}` + `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}`, ); return false; } } else if (command === 'getState') { if (!(obj.acl.state & ACCESS_GROUP_READ) || !options.acl.state.read) { this._logger.warn( - `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}` + `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}`, ); return false; } } else { this._logger.warn( - `${this.namespaceLog} Called unknown command on "${obj._id}": ${command as any}` + `${this.namespaceLog} Called unknown command on "${obj._id}": ${command as any}`, ); } } else if (!limitToOwnerRights) { if (command === 'setState' || command === 'delState') { if (command === 'delState' && !options.acl.state.delete) { this._logger.warn( - `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}` + `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}`, ); return false; } else if (command === 'setState' && !options.acl.state.write) { this._logger.warn( - `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}` + `${this.namespaceLog} Permission error for user "${options.user} on "${obj._id}": ${command}`, ); return false; } else if (!(obj.acl.state & ACCESS_EVERY_WRITE)) { this._logger.warn( - `${this.namespaceLog} Permission error for user "${options.user}" on "${obj._id}": ${command}` + `${this.namespaceLog} Permission error for user "${options.user}" on "${obj._id}": ${command}`, ); return false; } } else if (command === 'getState') { if (!(obj.acl.state & ACCESS_EVERY_READ) || !options.acl.state.read) { this._logger.warn( - `${this.namespaceLog} Permission error for user "${options.user}"on "${obj._id}" : ${command}` + `${this.namespaceLog} Permission error for user "${options.user}"on "${obj._id}" : ${command}`, ); return false; } } else { this._logger.warn( - `${this.namespaceLog} Called unknown command on "${obj._id}": ${command as any}` + `${this.namespaceLog} Called unknown command on "${obj._id}": ${command as any}`, ); return false; } @@ -8146,7 +8134,7 @@ export class AdapterClass extends EventEmitter { private async _checkStates( ids: string | string[], options: Partial, - command: CheckStateCommand + command: CheckStateCommand, ): Promise { if (!options.groups) { options = await this._getUserGroups(options as GetUserGroupsOptions); @@ -8170,43 +8158,42 @@ export class AdapterClass extends EventEmitter { } return { ids, objs }; - } else { - const objs: ioBroker.StateObject[] = []; - - for (const id of ids) { - let originalChecked: boolean | undefined; + } + const objs: ioBroker.StateObject[] = []; - if (options.checked !== undefined) { - originalChecked = options.checked; - } + for (const id of ids) { + let originalChecked: boolean | undefined; - options.checked = true; + if (options.checked !== undefined) { + originalChecked = options.checked; + } - if (!this.#objects) { - this._logger.info( - `${this.namespaceLog} checkStates not processed because Objects database not connected` - ); + options.checked = true; - throw new Error(tools.ERRORS.ERROR_DB_CLOSED); - } + if (!this.#objects) { + this._logger.info( + `${this.namespaceLog} checkStates not processed because Objects database not connected`, + ); - const obj = (await this.#objects.getObject(id, options)) as ioBroker.StateObject; + throw new Error(tools.ERRORS.ERROR_DB_CLOSED); + } - objs.push(obj); + const obj = (await this.#objects.getObject(id, options)) as ioBroker.StateObject; - if (originalChecked !== undefined) { - options.checked = originalChecked; - } else { - options.checked = undefined; - } + objs.push(obj); - if (!this._checkState(obj, options, command)) { - throw new Error(ERROR_PERMISSION); - } + if (originalChecked !== undefined) { + options.checked = originalChecked; + } else { + options.checked = undefined; } - return { ids, objs }; + if (!this._checkState(obj, options, command)) { + throw new Error(ERROR_PERMISSION); + } } + + return { ids, objs }; } private async _getGroups(ids: string[]): Promise { @@ -8226,7 +8213,7 @@ export class AdapterClass extends EventEmitter { private async _setStateChangedHelper(id: string, state: ioBroker.SettableState): Promise { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} setStateChanged not processed because Objects database not connected` + `${this.namespaceLog} setStateChanged not processed because Objects database not connected`, ); throw new Error(tools.ERRORS.ERROR_DB_CLOSED); @@ -8244,10 +8231,9 @@ export class AdapterClass extends EventEmitter { // id can be string or can have attribute write const aliasId = tools.isObject(obj.common.alias.id) ? obj.common.alias.id.write : obj.common.alias.id; return this._setStateChangedHelper(aliasId, state); - } else { - this._logger.warn(`${this.namespaceLog} ${err ? err.message : `Alias ${id} has no target 1`}`); - throw new Error(err ? err.message : `Alias ${id} has no target`); } + this._logger.warn(`${this.namespaceLog} ${err ? err.message : `Alias ${id} has no target 1`}`); + throw new Error(err ? err.message : `Alias ${id} has no target`); } else { const oldState = await this.getForeignStateAsync(id, null); @@ -8281,35 +8267,34 @@ export class AdapterClass extends EventEmitter { this.outputCount++; await this.#states!.setState(id, state); return { id, notChanged: false }; - } else { - return { id, notChanged: true }; } + return { id, notChanged: true }; } } setStateChanged( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, - callback?: ioBroker.SetStateChangedCallback + callback?: ioBroker.SetStateChangedCallback, ): void; setStateChanged( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, ack: boolean, - callback?: ioBroker.SetStateChangedCallback + callback?: ioBroker.SetStateChangedCallback, ): void; setStateChanged( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, options: unknown, - callback?: ioBroker.SetStateChangedCallback + callback?: ioBroker.SetStateChangedCallback, ): void; setStateChanged( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, ack: boolean, options: unknown, - callback?: ioBroker.SetStateChangedCallback + callback?: ioBroker.SetStateChangedCallback, ): void; /** @@ -8370,7 +8355,7 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} setStateChanged not processed because States database not connected` + `${this.namespaceLog} setStateChanged not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -8420,39 +8405,38 @@ export class AdapterClass extends EventEmitter { return tools.maybeCallbackWithError(callback, e); } - const res = await this._setStateChangedHelper(fixedId, stateObj); - // @ts-expect-error todo fix it - return tools.maybeCallbackWithError(callback, null, res.id, res.notChanged); - } else { const res = await this._setStateChangedHelper(fixedId, stateObj); // @ts-expect-error todo fix it return tools.maybeCallbackWithError(callback, null, res.id, res.notChanged); } + const res = await this._setStateChangedHelper(fixedId, stateObj); + // @ts-expect-error todo fix it + return tools.maybeCallbackWithError(callback, null, res.id, res.notChanged); } setForeignState( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, - callback?: ioBroker.SetStateCallback + callback?: ioBroker.SetStateCallback, ): void; setForeignState( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, ack: boolean, - callback?: ioBroker.SetStateCallback + callback?: ioBroker.SetStateCallback, ): void; setForeignState( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, options: unknown, - callback?: ioBroker.SetStateCallback + callback?: ioBroker.SetStateCallback, ): void; setForeignState( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, ack: boolean, options: unknown, - callback?: ioBroker.SetStateCallback + callback?: ioBroker.SetStateCallback, ): void; /** @@ -8505,14 +8489,14 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} setForeignState not processed because States database not connected` + `${this.namespaceLog} setForeignState not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } if (!this.#objects) { this._logger.info( - `${this.namespaceLog} setForeignState not processed because Objects database not connected` + `${this.namespaceLog} setForeignState not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -8569,7 +8553,7 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} setForeignState not processed because States database not connected` + `${this.namespaceLog} setForeignState not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -8594,7 +8578,7 @@ export class AdapterClass extends EventEmitter { this._logger.warn(`${this.namespaceLog} Error validating alias id of ${id}: ${e.message}`); return tools.maybeCallbackWithError( callback, - `Error validating alias id of ${id}: ${e.message}` + `Error validating alias id of ${id}: ${e.message}`, ); } @@ -8603,7 +8587,7 @@ export class AdapterClass extends EventEmitter { try { targetObj = await this.#objects.getObject(aliasId, { ...options, - user: SYSTEM_ADMIN_USER + user: SYSTEM_ADMIN_USER, }); } catch (e) { return tools.maybeCallbackWithError(callback, e); @@ -8611,7 +8595,7 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} setForeignState not processed because States database not connected` + `${this.namespaceLog} setForeignState not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -8626,9 +8610,9 @@ export class AdapterClass extends EventEmitter { logger: this._logger, logNamespace: this.namespaceLog, sourceId: obj?._id, - targetId: targetObj?._id + targetId: targetObj?._id, }), - callback + callback, ); } else { this._logger.warn(`${this.namespaceLog} Alias ${id} has no target 3`); @@ -8638,7 +8622,7 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} setForeignState not processed because States database not connected` + `${this.namespaceLog} setForeignState not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -8651,7 +8635,7 @@ export class AdapterClass extends EventEmitter { if (id.startsWith(ALIAS_STARTS_WITH)) { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} setForeignState not processed because Objects database not connected` + `${this.namespaceLog} setForeignState not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -8672,14 +8656,14 @@ export class AdapterClass extends EventEmitter { this._logger.warn(`${this.namespaceLog} Error validating alias id of ${id}: ${e.message}`); return tools.maybeCallbackWithError( callback, - `Error validating alias id of ${id}: ${e.message}` + `Error validating alias id of ${id}: ${e.message}`, ); } if (!this.#objects) { // if objects is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} setForeignState not processed because Objects database not connected` + `${this.namespaceLog} setForeignState not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -8687,13 +8671,13 @@ export class AdapterClass extends EventEmitter { // read object for formatting - we ignore permissions on the target object and thus get it as admin user const targetObj = await this.#objects.getObject(targetId, { ...options, - user: SYSTEM_ADMIN_USER + user: SYSTEM_ADMIN_USER, }); if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} setForeignState not processed because States database not connected` + `${this.namespaceLog} setForeignState not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -8702,15 +8686,15 @@ export class AdapterClass extends EventEmitter { this.#states.setState( targetId, tools.formatAliasValue({ - sourceCommon: obj.common as ioBroker.StateCommon, + sourceCommon: obj.common, targetCommon: targetObj?.common as ioBroker.StateCommon | undefined, state, logger: this._logger, logNamespace: this.namespaceLog, sourceId: obj._id, - targetId: targetObj?._id + targetId: targetObj?._id, }), - callback + callback, ); } else { this._logger.warn(`${this.namespaceLog} Alias ${id} has no target 4`); @@ -8721,7 +8705,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { // if objects is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} setForeignState not processed because Objects database not connected` + `${this.namespaceLog} setForeignState not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -8732,7 +8716,7 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} setForeignState not processed because States database not connected` + `${this.namespaceLog} setForeignState not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -8746,26 +8730,26 @@ export class AdapterClass extends EventEmitter { setForeignStateChanged( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, - callback?: ioBroker.SetStateChangedCallback + callback?: ioBroker.SetStateChangedCallback, ): void; setForeignStateChanged( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, ack: boolean, - callback?: ioBroker.SetStateChangedCallback + callback?: ioBroker.SetStateChangedCallback, ): void; setForeignStateChanged( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, options: unknown, - callback?: ioBroker.SetStateChangedCallback + callback?: ioBroker.SetStateChangedCallback, ): void; setForeignStateChanged( id: string, state: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState, ack: boolean, options: unknown, - callback?: ioBroker.SetStateChangedCallback + callback?: ioBroker.SetStateChangedCallback, ): void; /** @@ -8803,7 +8787,7 @@ export class AdapterClass extends EventEmitter { state: any, ack: any, options?: any, - callback?: any + callback?: any, ): Promise { if (typeof state === 'object' && typeof ack !== 'boolean') { callback = options; @@ -8824,7 +8808,7 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} setForeignStateChanged not processed because States database not connected` + `${this.namespaceLog} setForeignStateChanged not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -8872,12 +8856,11 @@ export class AdapterClass extends EventEmitter { return tools.maybeCallbackWithError(callback, e); } - const res = await this._setStateChangedHelper(id, state); - return tools.maybeCallbackWithError(callback, null, res.id, res.notChanged); - } else { const res = await this._setStateChangedHelper(id, state); return tools.maybeCallbackWithError(callback, null, res.id, res.notChanged); } + const res = await this._setStateChangedHelper(id, state); + return tools.maybeCallbackWithError(callback, null, res.id, res.notChanged); } getState(id: string, callback: ioBroker.GetStateCallback): void; @@ -8933,7 +8916,7 @@ export class AdapterClass extends EventEmitter { getForeignState( id: unknown, options: unknown, - callback?: unknown + callback?: unknown, ): Promise | void> { if (typeof options === 'function') { callback = options; @@ -8950,21 +8933,21 @@ export class AdapterClass extends EventEmitter { } private async _getForeignState( - _options: InternalGetStateOptions + _options: InternalGetStateOptions, ): Promise | void> { const { id, options, callback } = _options; if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} getForeignState not processed because States database not connected` + `${this.namespaceLog} getForeignState not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } if (!this.#objects) { this._logger.info( - `${this.namespaceLog} getForeignState not processed because Objects database not connected` + `${this.namespaceLog} getForeignState not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -9010,7 +8993,7 @@ export class AdapterClass extends EventEmitter { // we ignore permissions on the source object and thus get it as admin user sourceObj = (await this.#objects.getObject(aliasId, { ...options, - user: SYSTEM_ADMIN_USER + user: SYSTEM_ADMIN_USER, })) as ioBroker.StateObject | null | undefined; } catch (e) { return tools.maybeCallbackWithError(callback, e); @@ -9038,8 +9021,8 @@ export class AdapterClass extends EventEmitter { logger: this._logger, logNamespace: this.namespaceLog, sourceId: sourceObj?._id, - targetId: obj._id - }) + targetId: obj._id, + }), ); } } else { @@ -9049,9 +9032,8 @@ export class AdapterClass extends EventEmitter { } else { if (this.oStates && this.oStates[id]) { return tools.maybeCallbackWithError(callback, null, this.oStates[id]); - } else { - return this.#states.getState(id, callback); } + return this.#states.getState(id, callback); } } @@ -9080,7 +9062,7 @@ export class AdapterClass extends EventEmitter { try { _obj = await this.#objects!.getObjectViewAsync('system', 'instance', { startkey: 'system.adapter.', - endkey: 'system.adapter.\u9999' + endkey: 'system.adapter.\u9999', }); } catch { // ignore @@ -9182,9 +9164,8 @@ export class AdapterClass extends EventEmitter { // read default history instance from system.config await this._getDefaultHistory(); return this.getHistory(id, options, callback); - } else { - options.instance = this.defaultHistory; } + options.instance = this.defaultHistory; } this.sendTo(options.instance || 'history.0', 'getHistory', { id: id, options: options }, res => { @@ -9317,7 +9298,7 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} delForeignState not processed because States database not connected` + `${this.namespaceLog} delForeignState not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -9378,7 +9359,7 @@ export class AdapterClass extends EventEmitter { private async _processStatesSecondary( keys: string[], targetObjs: (ioBroker.StateObject | null)[] | null, - srcObjs: (ioBroker.StateObject | null)[] | null + srcObjs: (ioBroker.StateObject | null)[] | null, ): Promise { const arr = await this.#states!.getStates(keys); @@ -9395,17 +9376,17 @@ export class AdapterClass extends EventEmitter { tools.formatAliasValue({ sourceCommon: srcObj.common, targetCommon: obj.common, - state: arr![i] || null, + state: arr[i] || null, logger: this._logger, logNamespace: this.namespaceLog, sourceId: srcObj._id, - targetId: obj._id + targetId: obj._id, }) || null; } else { - result[obj._id || keys[i]] = arr![i] || null; + result[obj._id || keys[i]] = arr[i] || null; } } else { - result[obj?._id || keys[i]] = arr![i] || null; + result[obj?._id || keys[i]] = arr[i] || null; } } @@ -9465,9 +9446,8 @@ export class AdapterClass extends EventEmitter { const srcObjs = (await this._getObjectsByArray(keys)) as (ioBroker.StateObject | null)[]; return this._processStatesSecondary(keys, fullTargetObjs, srcObjs); - } else { - return this._processStatesSecondary(keys, null, null); } + return this._processStatesSecondary(keys, null, null); } getForeignStates(pattern: Pattern, callback: ioBroker.GetStatesCallback): void; @@ -9517,7 +9497,7 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} getForeignStates not processed because States database not connected` + `${this.namespaceLog} getForeignStates not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); @@ -9526,7 +9506,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} getForeignStates not processed because Objects database not connected` + `${this.namespaceLog} getForeignStates not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); @@ -9552,7 +9532,7 @@ export class AdapterClass extends EventEmitter { if (pattern && pattern !== '*') { params = { startkey: pattern.replace(/\*/g, ''), - endkey: pattern.replace(/\*/g, '\u9999') + endkey: pattern.replace(/\*/g, '\u9999'), }; } @@ -9650,7 +9630,7 @@ export class AdapterClass extends EventEmitter { type: aliasObj.common.type, max: aliasObj.common.max, min: aliasObj.common.min, - unit: aliasObj.common.unit + unit: aliasObj.common.unit, }; let aliasDetails: AliasDetails; @@ -9674,7 +9654,7 @@ export class AdapterClass extends EventEmitter { min: sourceObj.common.min, max: sourceObj.common.max, type: sourceObj.common.type, - unit: sourceObj.common.unit + unit: sourceObj.common.unit, }; } } @@ -9738,7 +9718,7 @@ export class AdapterClass extends EventEmitter { if (pattern instanceof RegExp) { return tools.maybeCallbackWithError( callback, - `Regexp is not supported for "subscribeForeignStates", received "${pattern.toString()}"` + `Regexp is not supported for "subscribeForeignStates", received "${pattern.toString()}"`, ); } @@ -9759,13 +9739,13 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} subscribeForeignStates not processed because States database not connected` + `${this.namespaceLog} subscribeForeignStates not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } if (!this.#objects) { this._logger.info( - `${this.namespaceLog} subscribeForeignStates not processed because Objects database not connected` + `${this.namespaceLog} subscribeForeignStates not processed because Objects database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -9892,17 +9872,16 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} subscribeForeignStates not processed because States database not connected` + `${this.namespaceLog} subscribeForeignStates not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } if (promises.length && pattern !== '*') { return tools.maybeCallback(callback); - } else { - // no alias objects found or pattern * - this.#states.subscribeUser(pattern, callback); } + // no alias objects found or pattern * + this.#states.subscribeUser(pattern, callback); } catch (e) { this._logger.warn(`${this.namespaceLog} Cannot subscribe to ${pattern}: ${e.message}`); return tools.maybeCallbackWithError(callback, e); @@ -9922,9 +9901,8 @@ export class AdapterClass extends EventEmitter { if (aliasObj) { await this._addAliasSubscribe(aliasObj, pattern); return tools.maybeCallback(callback); - } else { - return tools.maybeCallback(callback); } + return tools.maybeCallback(callback); } catch (e) { this._logger.warn(`${this.namespaceLog} cannot subscribe on alias "${pattern}": ${e.message}`); } @@ -9967,7 +9945,7 @@ export class AdapterClass extends EventEmitter { if (pattern instanceof RegExp) { return tools.maybeCallbackWithError( callback, - `Regexp is not supported for "unsubscribeForeignStates", received "${pattern.toString()}"` + `Regexp is not supported for "unsubscribeForeignStates", received "${pattern.toString()}"`, ); } @@ -9985,7 +9963,7 @@ export class AdapterClass extends EventEmitter { if (!this.#states) { // if states is no longer existing, we do not need to unsubscribe this._logger.info( - `${this.namespaceLog} unsubscrubeForeignStates not processed because States database not connected` + `${this.namespaceLog} unsubscrubeForeignStates not processed because States database not connected`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -10113,7 +10091,7 @@ export class AdapterClass extends EventEmitter { return this._subscribeForeignStates({ pattern: Array.isArray(pattern) ? pattern : this._utils.fixId(pattern, true), options, - callback + callback, }); } @@ -10149,7 +10127,7 @@ export class AdapterClass extends EventEmitter { return this._unsubscribeForeignStates({ pattern: Array.isArray(pattern) ? pattern : this._utils.fixId(pattern, true), options, - callback + callback, }); } @@ -10194,7 +10172,7 @@ export class AdapterClass extends EventEmitter { // collect all const res = await this.#objects.getObjectViewAsync('system', 'instance', { startkey: 'system.adapter.', - endkey: 'system.adapter.\u9999' + endkey: 'system.adapter.\u9999', }); this.autoSubscribe = []; @@ -10229,14 +10207,13 @@ export class AdapterClass extends EventEmitter { try { const obj = await this.getForeignObjectAsync('system.licenses'); const uuidObj = await this.getForeignObjectAsync('system.meta.uuid'); - let uuid: string; if (!uuidObj?.native?.uuid) { this._logger.warn(`${this.namespaceLog} No UUID found!`); return licenses; - } else { - uuid = uuidObj.native.uuid; } + const uuid: string = uuidObj.native.uuid; + if (obj?.native?.licenses?.length) { const now = Date.now(); const cert = fs.readFileSync(path.join(thisDir, '..', '..', 'cert', 'cloudCert.crt')); @@ -10308,7 +10285,7 @@ export class AdapterClass extends EventEmitter { } } catch (e) { this._logger.error( - `${this.namespaceLog} Cannot decode license "${license.product}": ${e.message}` + `${this.namespaceLog} Cannot decode license "${license.product}": ${e.message}`, ); } } @@ -10368,7 +10345,7 @@ export class AdapterClass extends EventEmitter { val: true, ack: true, expire: reportStatusExpirySec, - from: id + from: id, }); this.outputCount++; if (this.connected) { @@ -10376,7 +10353,7 @@ export class AdapterClass extends EventEmitter { val: true, ack: true, expire: reportStatusExpirySec, - from: id + from: id, }); this.outputCount++; } @@ -10398,13 +10375,13 @@ export class AdapterClass extends EventEmitter { ack: true, from: id, val: Math.round(100 * stats.cpu) / 100, - expire: reportStatusExpirySec + expire: reportStatusExpirySec, }); this.#states.setState(`${id}.cputime`, { ack: true, from: id, val: stats.ctime / 1_000, - expire: reportStatusExpirySec + expire: reportStatusExpirySec, }); this.outputCount += 2; } @@ -10415,29 +10392,29 @@ export class AdapterClass extends EventEmitter { this.#states.setState(`${id}.memRss`, { val: parseFloat( (mem.rss / 1048576) /* 1MB */ - .toFixed(2) + .toFixed(2), ), ack: true, from: id, - expire: reportStatusExpirySec + expire: reportStatusExpirySec, }); this.#states.setState(`${id}.memHeapTotal`, { val: parseFloat( (mem.heapTotal / 1048576) /* 1MB */ - .toFixed(2) + .toFixed(2), ), ack: true, from: id, - expire: reportStatusExpirySec + expire: reportStatusExpirySec, }); this.#states.setState(`${id}.memHeapUsed`, { val: parseFloat( (mem.heapUsed / 1048576) /* 1MB */ - .toFixed(2) + .toFixed(2), ), ack: true, from: id, - expire: reportStatusExpirySec + expire: reportStatusExpirySec, }); } catch (e) { this._logger.warn(`${this.namespaceLog} Could not query used process memory: ${e.message}`); @@ -10449,7 +10426,7 @@ export class AdapterClass extends EventEmitter { val: eventLoopLag, ack: true, from: id, - expire: reportStatusExpirySec + expire: reportStatusExpirySec, }); // average of measured values this.eventLoopLags = []; this.outputCount++; @@ -10460,19 +10437,19 @@ export class AdapterClass extends EventEmitter { val: parseInt(process.uptime().toFixed(), 10), ack: true, from: id, - expire: reportStatusExpirySec + expire: reportStatusExpirySec, }); this.#states.setState(`${id}.inputCount`, { val: this.inputCount, ack: true, from: id, - expire: reportStatusExpirySec + expire: reportStatusExpirySec, }); this.#states.setState(`${id}.outputCount`, { val: this.outputCount, ack: true, from: id, - expire: reportStatusExpirySec + expire: reportStatusExpirySec, }); this.inputCount = 0; this.outputCount = 0; @@ -10516,7 +10493,7 @@ export class AdapterClass extends EventEmitter { logs.push(`Subscriber - ${id} (disabled)`); } else { this._logger.error( - `${this.namespaceLog} LOGINFO: Subscriber - ${id} (disabled)` + `${this.namespaceLog} LOGINFO: Subscriber - ${id} (disabled)`, ); } } @@ -10638,13 +10615,13 @@ export class AdapterClass extends EventEmitter { { val: false, ack: true, - from: `system.adapter.${this.namespace}` + from: `system.adapter.${this.namespace}`, }, - options + options, ); } catch (e) { this._logger.warn( - `${this.namespaceLog} Could not change log subscriber state to "false": ${e.message}` + `${this.namespaceLog} Could not change log subscriber state to "false": ${e.message}`, ); } } @@ -10662,13 +10639,13 @@ export class AdapterClass extends EventEmitter { { val: true, ack: true, - from: `system.adapter.${this.namespace}` + from: `system.adapter.${this.namespace}`, }, - options + options, ); } catch (e) { this._logger.warn( - `${this.namespaceLog} Could not change log subscriber state to "true": ${e.message}` + `${this.namespaceLog} Could not change log subscriber state to "true": ${e.message}`, ); } } @@ -10687,7 +10664,7 @@ export class AdapterClass extends EventEmitter { this.requireLog = isActive => { if (isActive) { this._logger.warn( - `${this.namespaceLog} requireLog is not supported by this adapter! Please set common.logTransporter to true` + `${this.namespaceLog} requireLog is not supported by this adapter! Please set common.logTransporter to true`, ); } }; @@ -10756,16 +10733,15 @@ export class AdapterClass extends EventEmitter { try { this.patterns = JSON.parse(state.val as string); Object.keys(this.patterns!).forEach( - p => (this.patterns![p].regex = tools.pattern2RegEx(p)) + p => (this.patterns![p].regex = tools.pattern2RegEx(p)), ); } catch { this.patterns = {}; } } return tools.maybeCallback(cb); - } else { - return tools.maybeCallback(cb); } + return tools.maybeCallback(cb); }, logger: this._logger, change: async (id, stateOrMessage) => { @@ -10791,11 +10767,11 @@ export class AdapterClass extends EventEmitter { this._logger.info( `${this.namespaceLog} Got terminate signal ${ sigKillVal === -1 ? 'TERMINATE_YOURSELF' : ` TERMINATE ${sigKillVal}` - }` + }`, ); } else { this._logger.warn( - `${this.namespaceLog} Got terminate signal. Checking desired PID: ${sigKillVal} vs own PID ${process.pid}` + `${this.namespaceLog} Got terminate signal. Checking desired PID: ${sigKillVal} vs own PID ${process.pid}`, ); } // by deletion of state, stop this instance @@ -10804,7 +10780,7 @@ export class AdapterClass extends EventEmitter { isPause: false, isScheduled: false, exitCode: EXIT_CODES.ADAPTER_REQUESTED_TERMINATION, - updateAliveState: false + updateAliveState: false, }); setTimeout(() => this.terminate(EXIT_CODES.ADAPTER_REQUESTED_TERMINATION), 4000); } @@ -10832,7 +10808,7 @@ export class AdapterClass extends EventEmitter { } } this._logger.info( - `${this.namespaceLog} Loglevel changed from "${currentLevel}" to "${state.val}"` + `${this.namespaceLog} Loglevel changed from "${currentLevel}" to "${state.val}"`, ); currentLevel = state.val; } else if (state.val && state.val !== currentLevel) { @@ -10843,7 +10819,7 @@ export class AdapterClass extends EventEmitter { this.#states.setState(`system.adapter.${this.namespace}.logLevel`, { val: currentLevel, ack: true, - from: `system.adapter.${this.namespace}` + from: `system.adapter.${this.namespace}`, }); } } @@ -10878,7 +10854,7 @@ export class AdapterClass extends EventEmitter { const instance = id.substring(0, id.length - '.logging'.length); this._logger.silly(`${this.namespaceLog} ${instance}: logging ${state ? state.val : false}`); - this.logRedirect!(state ? !!state.val : false, instance); + this.logRedirect(state ? !!state.val : false, instance); } else if (id === `log.system.adapter.${this.namespace}`) { this._options.logTransporter && this.processLog && this.processLog(state); } else if (id === `messagebox.system.adapter.${this.namespace}` && state) { @@ -10920,7 +10896,7 @@ export class AdapterClass extends EventEmitter { if (obj.command === 'clientUnsubscribe' || obj.command === 'clientSubscribeError') { return this.uiMessagingController.removeClientSubscribeByMessage( - obj as UserInterfaceClientRemoveMessage + obj as UserInterfaceClientRemoveMessage, ); } @@ -10952,7 +10928,7 @@ export class AdapterClass extends EventEmitter { this.pluginHandler.instantiatePlugin( pluginName, this.pluginHandler.getPluginConfig(pluginName) || {}, - thisDir + thisDir, ); this.pluginHandler.setDatabaseForPlugin(pluginName, this.#objects, this.#states); this.pluginHandler.initPlugin(pluginName, this.adapterConfig || {}); @@ -10960,7 +10936,7 @@ export class AdapterClass extends EventEmitter { } else { if (!this.pluginHandler.destroy(pluginName)) { this._logger.info( - `${this.namespaceLog} Plugin ${pluginName} could not be disabled. Please restart adapter to disable it.` + `${this.namespaceLog} Plugin ${pluginName} could not be disabled. Please restart adapter to disable it.`, ); } } @@ -10979,7 +10955,7 @@ export class AdapterClass extends EventEmitter { uniqueTargets.add(targetId); - const source = alias!.source; + const source = alias.source; const aState = state ? tools.formatAliasValue({ @@ -10989,7 +10965,7 @@ export class AdapterClass extends EventEmitter { logger: this._logger, logNamespace: this.namespaceLog, sourceId: id, - targetId + targetId, }) : null; @@ -11041,7 +11017,7 @@ export class AdapterClass extends EventEmitter { this._logger.warn(`${this.namespaceLog} Cannot connect/reconnect to states DB. Terminating`); this.terminate(EXIT_CODES.NO_ERROR); }, 5000); - } + }, }); } @@ -11171,7 +11147,7 @@ export class AdapterClass extends EventEmitter { await this._addAliasSubscribe(obj, targetAlias.pattern); } catch (e) { this._logger.error( - `${this.namespaceLog} Could not add alias subscription: ${e.message}` + `${this.namespaceLog} Could not add alias subscription: ${e.message}`, ); } } else { @@ -11206,7 +11182,7 @@ export class AdapterClass extends EventEmitter { await this._addAliasSubscribe(obj, id); } catch (e) { this._logger.warn( - `${this.namespaceLog} Could not add alias subscription: ${e.message}` + `${this.namespaceLog} Could not add alias subscription: ${e.message}`, ); } break; @@ -11300,7 +11276,7 @@ export class AdapterClass extends EventEmitter { // emit 'fileChange' event instantly setImmediate(() => this.emit('fileChange', id, fileName, size)); } - } + }, }); } @@ -11314,57 +11290,56 @@ export class AdapterClass extends EventEmitter { if (this._options.instance !== undefined) { return this._initAdapter(this._options); - } else { - const resAlive = await this.#states.getState(`system.adapter.${this.namespace}.alive`); - const killRes = await this.#states.getState(`system.adapter.${this.namespace}.sigKill`); + } + const resAlive = await this.#states.getState(`system.adapter.${this.namespace}.alive`); + const killRes = await this.#states.getState(`system.adapter.${this.namespace}.sigKill`); - if (killRes?.val !== undefined) { - killRes.val = parseInt(killRes.val as any, 10); - } - if (!this._config.isInstall && this.startedInCompactMode && killRes && !killRes.ack && killRes.val === -1) { - this._logger.error( - `${this.namespaceLog} ${this.namespace} needs to be stopped because not correctly started in compact mode` - ); - this.terminate(EXIT_CODES.ADAPTER_REQUESTED_TERMINATION); - } else if ( - !this._config.forceIfDisabled && - !this._config.isInstall && - !this.startedInCompactMode && - killRes && - killRes.from?.startsWith('system.host.') && - killRes.ack && - !isNaN(killRes.val as any) && - killRes.val !== process.pid - ) { + if (killRes?.val !== undefined) { + killRes.val = parseInt(killRes.val as any, 10); + } + if (!this._config.isInstall && this.startedInCompactMode && killRes && !killRes.ack && killRes.val === -1) { + this._logger.error( + `${this.namespaceLog} ${this.namespace} needs to be stopped because not correctly started in compact mode`, + ); + this.terminate(EXIT_CODES.ADAPTER_REQUESTED_TERMINATION); + } else if ( + !this._config.forceIfDisabled && + !this._config.isInstall && + !this.startedInCompactMode && + killRes && + killRes.from?.startsWith('system.host.') && + killRes.ack && + !isNaN(killRes.val as any) && + killRes.val !== process.pid + ) { + this._logger.error( + `${this.namespaceLog} ${this.namespace} invalid process id scenario ${killRes.val} vs. own ID ${process.pid}. Stopping`, + ); + this.terminate(EXIT_CODES.ADAPTER_REQUESTED_TERMINATION); + } else if ( + !this._config.isInstall && + resAlive && + resAlive.val === true && + resAlive.ack && + !this._config.forceIfDisabled + ) { + this._logger.error(`${this.namespaceLog} ${this.namespace} already running`); + this.terminate(EXIT_CODES.ADAPTER_ALREADY_RUNNING); + } else { + let res: ioBroker.InstanceObject | null | undefined; + try { + res = await this.#objects.getObject(`system.adapter.${this.namespace}`); + } catch (e) { this._logger.error( - `${this.namespaceLog} ${this.namespace} invalid process id scenario ${killRes.val} vs. own ID ${process.pid}. Stopping` + `${this.namespaceLog} ${this.namespace} Could not get instance object: ${e.message}`, ); - this.terminate(EXIT_CODES.ADAPTER_REQUESTED_TERMINATION); - } else if ( - !this._config.isInstall && - resAlive && - resAlive.val === true && - resAlive.ack && - !this._config.forceIfDisabled - ) { - this._logger.error(`${this.namespaceLog} ${this.namespace} already running`); - this.terminate(EXIT_CODES.ADAPTER_ALREADY_RUNNING); - } else { - let res: ioBroker.InstanceObject | null | undefined; - try { - res = await this.#objects.getObject(`system.adapter.${this.namespace}`); - } catch (e) { - this._logger.error( - `${this.namespaceLog} ${this.namespace} Could not get instance object: ${e.message}` - ); - } + } - if (!res && !this._config.isInstall) { - this._logger.error(`${this.namespaceLog} ${this.namespace} invalid config`); - this.terminate(EXIT_CODES.INVALID_ADAPTER_CONFIG); - } else { - return this._initAdapter(res); - } + if (!res && !this._config.isInstall) { + this._logger.error(`${this.namespaceLog} ${this.namespace} invalid config`); + this.terminate(EXIT_CODES.INVALID_ADAPTER_CONFIG); + } else { + return this._initAdapter(res); } } } @@ -11407,14 +11382,14 @@ export class AdapterClass extends EventEmitter { val: true, ack: true, expire: 30, - from: id + from: id, }, () => { if (!done) { done = true; this.terminate(EXIT_CODES.NO_ADAPTER_CONFIG_FOUND); } - } + }, ); setTimeout(() => { if (!done) { @@ -11451,7 +11426,7 @@ export class AdapterClass extends EventEmitter { adapterConfig = adapterConfig || { // @ts-expect-error protectedNative exists on instance objects common: { mode: 'once', name: name, protectedNative: [] }, - native: {} + native: {}, }; } @@ -11509,7 +11484,7 @@ export class AdapterClass extends EventEmitter { !isMessageboxSupported(adapterConfig.common) ) { this._logger.error( - `${this.namespaceLog} : message handler implemented, but messagebox not enabled. Define common.messagebox in io-package.json for adapter or delete message handler.` + `${this.namespaceLog} : message handler implemented, but messagebox not enabled. Define common.messagebox in io-package.json for adapter or delete message handler.`, ); // @ts-expect-error we should infer adapterConfig correctly } else if (isMessageboxSupported(adapterConfig.common)) { @@ -11538,7 +11513,7 @@ export class AdapterClass extends EventEmitter { this.namespaceLog, this._logger, this.namespace, - this._namespaceRegExp + this._namespaceRegExp, ); this.log = new Log(this.namespaceLog, this._config.log.level, this._logger); @@ -11569,9 +11544,9 @@ export class AdapterClass extends EventEmitter { .then(decryptedValue => (this.config[attr] = decryptedValue)) .catch(e => this._logger.error( - `${this.namespaceLog} Can not decrypt attribute ${attr}: ${e.message}` - ) - ) + `${this.namespaceLog} Can not decrypt attribute ${attr}: ${e.message}`, + ), + ), ); } } @@ -11596,7 +11571,7 @@ export class AdapterClass extends EventEmitter { this.#states.setState(`system.adapter.${this.namespace}.logLevel`, { val: this._config.log.level, ack: true, - from: `system.adapter.${this.namespace}` + from: `system.adapter.${this.namespace}`, }); if (this._options.instance === undefined) { @@ -11609,13 +11584,13 @@ export class AdapterClass extends EventEmitter { // display if it's a non-official version - only if installedFrom is explicitly given and differs it's not npm const isNpmVersion = isInstalledFromNpm({ adapterName: this.name, - installedFrom: this.ioPack.common.installedFrom + installedFrom: this.ioPack.common.installedFrom, }); this._logger.info( `${this.namespaceLog} starting. Version ${this.version} ${ !isNpmVersion ? `(non-npm: ${this.ioPack.common.installedFrom}) ` : '' - }in ${this.adapterDir}, node: ${process.version}, js-controller: ${controllerVersion}` + }in ${this.adapterDir}, node: ${process.version}, js-controller: ${controllerVersion}`, ); this._config.system = this._config.system || {}; this._config.system.statisticsInterval = parseInt(this._config.system.statisticsInterval, 10) || 15_000; @@ -11626,7 +11601,7 @@ export class AdapterClass extends EventEmitter { this.#states.setState(`${id}.compactMode`, { ack: true, from: id, - val: !!this.startedInCompactMode + val: !!this.startedInCompactMode, }); this.outputCount++; @@ -11727,7 +11702,7 @@ export class AdapterClass extends EventEmitter { if (this.getPortRunning && err?.message === 'listen EADDRINUSE') { const { host, port, callback } = this.getPortRunning; this._logger.warn( - `${this.namespaceLog} Port ${port}${host ? ` for host ${host}` : ''} is in use. Get next` + `${this.namespaceLog} Port ${port}${host ? ` for host ${host}` : ''} is in use. Get next`, ); setImmediate(() => this.getPort(port + 1, host, callback)); @@ -11736,13 +11711,13 @@ export class AdapterClass extends EventEmitter { if (isUnhandledRejection) { this._logger.error( - `${this.namespaceLog} Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().` + `${this.namespaceLog} Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().`, ); } this._logger.error( `${this.namespaceLog} ${isUnhandledRejection ? 'unhandled promise rejection' : 'uncaught exception'}: ${ err ? err.message : err - }` + }`, ); if (err && err.stack) { this._logger.error(`${this.namespaceLog} ${err.stack}`); @@ -11763,7 +11738,7 @@ export class AdapterClass extends EventEmitter { isPause: false, isScheduled: false, exitCode: EXIT_CODES.UNCAUGHT_EXCEPTION, - updateAliveState: false + updateAliveState: false, }); setTimeout(() => this.terminate(EXIT_CODES.UNCAUGHT_EXCEPTION), 1_000); } catch (e) { @@ -11793,7 +11768,7 @@ export class AdapterClass extends EventEmitter { (obj._id === '' && !allowedTopLevelTypes.includes(obj.type)) ) { this._logger.error( - `${this.namespaceLog} ${this.namespace} invalid instance object: ${JSON.stringify(obj)}` + `${this.namespaceLog} ${this.namespace} invalid instance object: ${JSON.stringify(obj)}`, ); continue; } @@ -11810,7 +11785,7 @@ export class AdapterClass extends EventEmitter { for (const [lang, value] of Object.entries(commonName)) { commonName[lang as ioBroker.Languages] = value.replace( '%INSTANCE%', - this.instance!.toString() + this.instance!.toString(), ); } } else { @@ -11825,7 +11800,7 @@ export class AdapterClass extends EventEmitter { for (const [lang, value] of Object.entries(commonDesc)) { commonDesc[lang as ioBroker.Languages] = value.replace( '%INSTANCE%', - this.instance!.toString() + this.instance!.toString(), ); } } else if (commonDesc) { @@ -11842,7 +11817,7 @@ export class AdapterClass extends EventEmitter { } } catch (e) { this._logger.warn( - `${this.namespaceLog} Did not add default (${obj.common.def}) value on creation of ${obj._id}: ${e.message}` + `${this.namespaceLog} Did not add default (${obj.common.def}) value on creation of ${obj._id}: ${e.message}`, ); } } @@ -11863,10 +11838,10 @@ export class AdapterClass extends EventEmitter { role: 'indicator.state', write: false, read: true, - def: false + def: false, }, type: 'state', - native: {} + native: {}, }); } @@ -11894,7 +11869,7 @@ export class AdapterClass extends EventEmitter { if (!this.#objects) { this._logger.info( - `${this.namespaceLog} extendObjects not processed because Objects database not connected.` + `${this.namespaceLog} extendObjects not processed because Objects database not connected.`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -11911,7 +11886,7 @@ export class AdapterClass extends EventEmitter { if (state !== undefined) { if (!this.#states) { this._logger.info( - `${this.namespaceLog} extendObjects not processed because States database not connected.` + `${this.namespaceLog} extendObjects not processed because States database not connected.`, ); return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); } @@ -11921,9 +11896,9 @@ export class AdapterClass extends EventEmitter { { val: state, from: `system.adapter.${this.namespace}`, - ack: true + ack: true, }, - () => setImmediate(() => this._extendObjects(tasks, callback)) + () => setImmediate(() => this._extendObjects(tasks, callback)), ); } else { setImmediate(() => this._extendObjects(tasks, callback)); @@ -11975,12 +11950,12 @@ export class AdapterClass extends EventEmitter { extraInfo: { deprecationMessage, adapter: this.name, - version: this.version + version: this.version, }, message: `Deprecation ${this.name}`, - level: 'info' + level: 'info', }, - from: `system.adapter.${this.namespace}` + from: `system.adapter.${this.namespace}`, }; await this.#states.pushMessage(`system.host.${this.host}`, obj as any); @@ -11999,7 +11974,7 @@ export class AdapterClass extends EventEmitter { iobrokerConfig: this._config, // @ts-expect-error parentPackage: this.pack, - controllerVersion + controllerVersion, }; this.pluginHandler = new PluginHandler(pluginSettings); @@ -12099,5 +12074,5 @@ export const Adapter = new Proxy(AdapterClass, { apply(target, thisArg, argArray) { // @ts-expect-error fix later on if necessary return new target(...argArray); - } -}) as typeof AdapterClass; + }, +}); diff --git a/packages/adapter/src/lib/adapter/constants.ts b/packages/adapter/src/lib/adapter/constants.ts index 50ac0b7fdb..e2bcd4e658 100644 --- a/packages/adapter/src/lib/adapter/constants.ts +++ b/packages/adapter/src/lib/adapter/constants.ts @@ -45,7 +45,7 @@ export enum STATE_QUALITY { /** The device has reported an error */ DEVICE_ERROR_REPORT = 0x44, /** The sensor has reported an error */ - SENSOR_ERROR_REPORT = 0x84 + SENSOR_ERROR_REPORT = 0x84, } /** Using the const array just for type inference */ @@ -67,7 +67,7 @@ const SUPPORTED_FEATURES_INTERNAL = [ 'CUSTOM_FULL_VIEW', // `getObjectView('system', 'custom-full', ...)` will return full objects and not only `common.custom` part. Since `js-controller` 5.0 'ADAPTER_GET_OBJECTS_BY_ARRAY', // getForeignObjects supports an array of ids too. Since js-controller 5.0 'CONTROLLER_UI_UPGRADE', // Controller can be updated via sendToHost('upgradeController', ...) - 'ADAPTER_WEBSERVER_UPGRADE' // Controller supports upgrading adapter and provides a webserver (triggered via sendToHost). Since `js-controller` 5.0 + 'ADAPTER_WEBSERVER_UPGRADE', // Controller supports upgrading adapter and provides a webserver (triggered via sendToHost). Since `js-controller` 5.0 ] as const; export const SUPPORTED_FEATURES = [...SUPPORTED_FEATURES_INTERNAL]; diff --git a/packages/adapter/src/lib/adapter/defaultObjs.ts b/packages/adapter/src/lib/adapter/defaultObjs.ts index 6a4eb28500..00262e4efb 100644 --- a/packages/adapter/src/lib/adapter/defaultObjs.ts +++ b/packages/adapter/src/lib/adapter/defaultObjs.ts @@ -6,38 +6,38 @@ export function createDefaults(): Record> write: true, min: 0, max: 100, - unit: '%' + unit: '%', }, 'indicator.working': { def: false, type: 'boolean', read: true, - write: false + write: false, }, 'indicator.maintenance': { def: false, type: 'boolean', read: true, - write: false + write: false, }, 'indicator.maintenance.lowbat': { def: false, type: 'boolean', read: true, write: false, - desc: 'Low battery' + desc: 'Low battery', }, 'indicator.maintenance.unreach': { def: false, type: 'boolean', read: true, write: false, - desc: 'Device unreachable' + desc: 'Device unreachable', }, switch: { type: 'boolean', read: true, - write: true - } + write: true, + }, } as const; } diff --git a/packages/adapter/src/lib/adapter/userInterfaceMessagingController.ts b/packages/adapter/src/lib/adapter/userInterfaceMessagingController.ts index dfbba65a06..37c7a14a30 100644 --- a/packages/adapter/src/lib/adapter/userInterfaceMessagingController.ts +++ b/packages/adapter/src/lib/adapter/userInterfaceMessagingController.ts @@ -4,7 +4,7 @@ import type { UserInterfaceClientRemoveMessage, UserInterfaceClientSubscribeHandler, UserInterfaceClientSubscribeReturnType, - UserInterfaceClientUnsubscribeHandler + UserInterfaceClientUnsubscribeHandler, } from '@/lib/_Types.js'; export interface HeartbeatTimer { @@ -91,7 +91,7 @@ export class UserInterfaceMessagingController { return states.pushMessage(handler.from, { command: 'im', message: { m: handler.type, s: handler.sid, d: data } satisfies UserInterfaceMessage, - from: `system.adapter.${this.adapter.namespace}` + from: `system.adapter.${this.adapter.namespace}`, }); } @@ -114,7 +114,7 @@ export class UserInterfaceMessagingController { * @param msg The subscribe message */ async registerClientSubscribeByMessage( - msg: ioBroker.Message + msg: ioBroker.Message, ): Promise { if (!this.subscribeCallback) { return; diff --git a/packages/adapter/src/lib/adapter/utils.ts b/packages/adapter/src/lib/adapter/utils.ts index 4333d45916..7e07e964f2 100644 --- a/packages/adapter/src/lib/adapter/utils.ts +++ b/packages/adapter/src/lib/adapter/utils.ts @@ -5,7 +5,7 @@ import { decrypt, appNameLowerCase, getRootDir, - execAsync + execAsync, } from '@iobroker/js-controller-common-db/tools'; import { SUPPORTED_FEATURES, type SupportedFeature } from '@/lib/adapter/constants.js'; import path from 'node:path'; @@ -143,7 +143,7 @@ export async function requestModuleNameByUrl(url: string): Promise { if (typeof res.stdout !== 'string') { throw new Error( - `Could not determine module name for url "${url}". Unexpected stdout: "${res.stdout ? res.stdout.toString() : ''}"` + `Could not determine module name for url "${url}". Unexpected stdout: "${res.stdout ? res.stdout.toString() : ''}"`, ); } diff --git a/packages/adapter/src/lib/adapter/validator.ts b/packages/adapter/src/lib/adapter/validator.ts index 594eddbe6f..0fbfa55045 100644 --- a/packages/adapter/src/lib/adapter/validator.ts +++ b/packages/adapter/src/lib/adapter/validator.ts @@ -36,7 +36,7 @@ export class Validator { namespaceLog: string, logger: any, namespace: string, - namespaceRegExp: RegExp + namespaceRegExp: RegExp, ) { this.objects = objects; this.states = states; @@ -67,7 +67,7 @@ export class Validator { // at first check object existence if (!obj) { this.log.warn( - `${this.namespaceLog} State "${id}" has no existing object, this might lead to an error in future versions` + `${this.namespaceLog} State "${id}" has no existing object, this might lead to an error in future versions`, ); return; } @@ -77,7 +77,7 @@ export class Validator { // check if we are allowed to write (read-only can only be written with ack: true) if (!state.ack && obj.common.write === false) { this.log.warn( - `${this.namespaceLog} Read-only state "${id}" has been written without ack-flag with value "${state.val}"` + `${this.namespaceLog} Read-only state "${id}" has been written without ack-flag with value "${state.val}"`, ); } @@ -98,7 +98,7 @@ export class Validator { this.log.info( `${ this.namespaceLog - } State value to set for "${id}" has to be stringified but received type "${typeof state.val}"` + } State value to set for "${id}" has to be stringified but received type "${typeof state.val}"`, ); } else { this.log.info( @@ -106,7 +106,7 @@ export class Validator { obj.common.type === 'mixed' ? `one of type "string", "number", "boolean"` : `type "${obj.common.type}"` - } but received type "${typeof state.val}" ` + } but received type "${typeof state.val}" `, ); } } @@ -121,20 +121,20 @@ export class Validator { if (obj.common.max !== undefined && state.val > obj.common.max) { this.log.warn( - `${this.namespaceLog} State value to set for "${id}" has value "${state.val}" greater than max "${obj.common.max}"` + `${this.namespaceLog} State value to set for "${id}" has value "${state.val}" greater than max "${obj.common.max}"`, ); } if (obj.common.min !== undefined && state.val < obj.common.min) { this.log.warn( - `${this.namespaceLog} State value to set for "${id}" has value "${state.val}" less than min "${obj.common.min}"` + `${this.namespaceLog} State value to set for "${id}" has value "${state.val}" less than min "${obj.common.min}"`, ); } } } } else { this.log.warn( - `${this.namespaceLog} Object of state "${id}" is missing the required property "common.type"` + `${this.namespaceLog} Object of state "${id}" is missing the required property "common.type"`, ); } } catch (e) { @@ -150,7 +150,7 @@ export class Validator { * @param options optional * @throws Error when id is invalid */ - validateId(id: string | any, isForeignId: boolean, options?: ValidateIdOptions | null): asserts id is string { + validateId(id: any, isForeignId: boolean, options?: ValidateIdOptions | null): asserts id is string { // there is a special maintenance mode to clear the DB from invalid IDs if (options && options.maintenance && options.user === SYSTEM_ADMIN_USER) { return; @@ -164,10 +164,10 @@ export class Validator { if (!isForeignId && type === 'number') { this.log.warn( - `${this.namespaceLog} The id "${id}" has an invalid type! Expected "string" or "object", received "number".` + `${this.namespaceLog} The id "${id}" has an invalid type! Expected "string" or "object", received "number".`, ); this.log.warn( - `${this.namespaceLog} This will be refused in future versions. Please report this to the developer.` + `${this.namespaceLog} This will be refused in future versions. Please report this to the developer.`, ); } else if (type !== 'string' && !tools.isObject(id)) { throw new Error(`The id "${id}" has an invalid type! Expected "string" or "object", received "${type}".`); @@ -182,16 +182,16 @@ export class Validator { if (typeof id[reqProperty] !== 'string') { throw new Error( `The id's property "${reqProperty}" of "${JSON.stringify( - id - )}" has an invalid type! Expected "string", received "${typeof id[reqProperty]}".` + id, + )}" has an invalid type! Expected "string", received "${typeof id[reqProperty]}".`, ); } if (id[reqProperty].includes('.')) { throw new Error( `The id's property "${reqProperty}" of "${JSON.stringify( - id - )}" contains the invalid character "."!` + id, + )}" contains the invalid character "."!`, ); } found = true; @@ -200,14 +200,14 @@ export class Validator { if (!found) { throw new Error( `The id "${JSON.stringify( - id - )}" is an invalid object! Expected at least one of the properties "device", "channel" or "state" to exist.` + id, + )}" is an invalid object! Expected at least one of the properties "device", "channel" or "state" to exist.`, ); } } else { if (type !== 'string') { throw new Error( - `The id "${JSON.stringify(id)}" has an invalid type! Expected "string", received "${type}".` + `The id "${JSON.stringify(id)}" has an invalid type! Expected "string", received "${type}".`, ); } if (id.endsWith('.')) { @@ -236,7 +236,7 @@ export class Validator { static assertString(value: unknown, name: string): asserts value is string { if (typeof value !== 'string') { throw new Error( - `Parameter "${name}" needs to be of type "string" but type "${typeof value}" has been passed` + `Parameter "${name}" needs to be of type "string" but type "${typeof value}" has been passed`, ); } } @@ -250,13 +250,13 @@ export class Validator { static assertPattern(value: unknown, name: string): asserts value is Pattern { if (typeof value !== 'string' && !Array.isArray(value)) { throw new Error( - `Parameter "${name}" needs to be of type "string" or an array of type "string", "${typeof value}" has been passed` + `Parameter "${name}" needs to be of type "string" or an array of type "string", "${typeof value}" has been passed`, ); } else if (Array.isArray(value)) { for (const entry of value) { if (typeof entry !== 'string') { throw new Error( - `Parameter "${name}" needs to be of type "string" or an array of type "string", but the array contains a value of type "${typeof value}"` + `Parameter "${name}" needs to be of type "string" or an array of type "string", but the array contains a value of type "${typeof value}"`, ); } } @@ -272,7 +272,7 @@ export class Validator { static assertBoolean(value: unknown, name: string): asserts value is boolean { if (typeof value !== 'boolean') { throw new Error( - `Parameter "${name}" needs to be of type "boolean" but type "${typeof value}" has been passed` + `Parameter "${name}" needs to be of type "boolean" but type "${typeof value}" has been passed`, ); } } @@ -286,7 +286,7 @@ export class Validator { static assertNumber(value: unknown, name: string): asserts value is number { if (typeof value !== 'number') { throw new Error( - `Parameter "${name}" needs to be of type "number" but type "${typeof value}" has been passed` + `Parameter "${name}" needs to be of type "number" but type "${typeof value}" has been passed`, ); } } @@ -299,7 +299,7 @@ export class Validator { */ static assertObject = Record>( value: unknown, - name: string + name: string, ): asserts value is T { if (!tools.isObject(value)) { throw new Error(`Parameter "${name}" needs to be a real object but type "${typeof value}" has been passed`); @@ -327,7 +327,7 @@ export class Validator { static assertOptionalCallback(value: unknown, name: string): asserts value is OptionalCallback { if (value && typeof value !== 'function') { throw new Error( - `Parameter "${name}" needs to be of type "null", "undefined" or "function" but type "${typeof value}" has been passed` + `Parameter "${name}" needs to be of type "null", "undefined" or "function" but type "${typeof value}" has been passed`, ); } } @@ -341,7 +341,7 @@ export class Validator { static assertCallback(value: unknown, name: string): asserts value is Callback { if (typeof value !== 'function') { throw new Error( - `Parameter "${name}" needs to be of type "function" but type "${typeof value}" has been passed` + `Parameter "${name}" needs to be of type "function" but type "${typeof value}" has been passed`, ); } } @@ -372,7 +372,7 @@ export class Validator { } else if (tools.isObject(id)) { // If ID is an object // Add namespace + device + channel - result = `${this.namespace}.${id.device ? id.device + '.' : ''}${id.channel ? id.channel + '.' : ''}${ + result = `${this.namespace}.${id.device ? `${id.device}.` : ''}${id.channel ? `${id.channel}.` : ''}${ id.state ? id.state : '' }`; } @@ -413,7 +413,7 @@ export class Validator { c: 'string', expire: 'number', lc: 'number', - user: 'string' + user: 'string', }; // Are there any forbidden properties? @@ -433,7 +433,7 @@ export class Validator { } if (type !== typeof obj[key]) { throw new Error( - `The state property "${key}" has the wrong type "${typeof obj[key]}" (should be "${type}")!` + `The state property "${key}" has the wrong type "${typeof obj[key]}" (should be "${type}")!`, ); } } diff --git a/packages/cli/package.json b/packages/cli/package.json index e7c6427867..e225099c00 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -16,6 +16,7 @@ "event-stream": "^4.0.1", "fs-extra": "^11.1.0", "mime-types": "^2.1.35", + "promisify-child-process": "^4.1.1", "readline-sync": "^1.4.10", "semver": "^7.5.2", "yargs": "^17.6.2" diff --git a/packages/cli/src/lib/_Types.ts b/packages/cli/src/lib/_Types.ts index 56b2233e61..2f55801df6 100644 --- a/packages/cli/src/lib/_Types.ts +++ b/packages/cli/src/lib/_Types.ts @@ -8,7 +8,7 @@ export type DbConnectCallback = (params: DbConnectAsyncReturn) => void; export type DbConnect = ( onlyCheckOrParams?: boolean | Record, paramsOrCb?: Record | DbConnectCallback, - callback?: DbConnectCallback + callback?: DbConnectCallback, ) => void; export interface DbConnectAsyncReturn { diff --git a/packages/cli/src/lib/cli/cliCert.ts b/packages/cli/src/lib/cli/cliCert.ts index 62378eadce..1f03fad8c9 100644 --- a/packages/cli/src/lib/cli/cliCert.ts +++ b/packages/cli/src/lib/cli/cliCert.ts @@ -76,14 +76,12 @@ export class CLICert extends CLICommand { if (certInfo) { console.log(JSON.stringify(certInfo, null, 2)); return void callback(EXIT_CODES.NO_ERROR); - } else { - messages.error.cert(certName); - return void callback(3); } - } else { messages.error.cert(certName); return void callback(3); } + messages.error.cert(certName); + return void callback(3); }); }); } diff --git a/packages/cli/src/lib/cli/cliCompact.ts b/packages/cli/src/lib/cli/cliCompact.ts index 3d5275aade..4c816248a7 100644 --- a/packages/cli/src/lib/cli/cliCompact.ts +++ b/packages/cli/src/lib/cli/cliCompact.ts @@ -116,22 +116,22 @@ export class CLICompact extends CLICommand { if (!err && obj) { if (!obj.common.compact) { console.log( - 'This adapter does not support compact mode. The below settings will have no effect!' + 'This adapter does not support compact mode. The below settings will have no effect!', ); console.log(); } else { - console.log('Adapter supports compact mode: ' + !!obj.common.compact); + console.log(`Adapter supports compact mode: ${!!obj.common.compact}`); } - console.log('Compact mode enabled for instance: ' + !!obj.common.runAsCompactMode); + console.log(`Compact mode enabled for instance: ${!!obj.common.runAsCompactMode}`); console.log( - 'Compact group: ' + - (obj.common.compactGroup !== undefined ? obj.common.compactGroup : 1) + `Compact group: ${ + obj.common.compactGroup !== undefined ? obj.common.compactGroup : 1 + }`, ); return void callback(); - } else { - CLI.error.invalidInstance(instance); - return void callback(24); } + CLI.error.invalidInstance(instance); + return void callback(24); }); }); } @@ -170,7 +170,7 @@ export class CLICompact extends CLICommand { console.log('This adapter does not support compact mode. The below settings will have no effect!'); console.log(); } else { - console.log('Adapter supports compact mode : ' + !!obj.common.compact); + console.log(`Adapter supports compact mode : ${!!obj.common.compact}`); } let newRunAsCompactMode; if (targetState !== undefined && targetState !== !!obj.common.runAsCompactMode) { @@ -188,14 +188,16 @@ export class CLICompact extends CLICommand { } } console.log( - 'Compact mode enabled for instance: ' + - (newRunAsCompactMode !== undefined ? '--> ' + newRunAsCompactMode : !!obj.common.runAsCompactMode) + `Compact mode enabled for instance: ${ + newRunAsCompactMode !== undefined ? `--> ${newRunAsCompactMode}` : !!obj.common.runAsCompactMode + }`, ); console.log( - 'Compact group: ' + - (newCompactGroup !== undefined && obj.common.compactGroup !== newCompactGroup - ? '--> ' + newCompactGroup - : obj.common.compactGroup) + `Compact group: ${ + newCompactGroup !== undefined && obj.common.compactGroup !== newCompactGroup + ? `--> ${newCompactGroup}` + : obj.common.compactGroup + }`, ); if (newRunAsCompactMode !== undefined || newCompactGroup !== undefined) { if (newCompactGroup !== undefined) { diff --git a/packages/cli/src/lib/cli/cliDebug.ts b/packages/cli/src/lib/cli/cliDebug.ts index 1117593146..6a06989d7f 100644 --- a/packages/cli/src/lib/cli/cliDebug.ts +++ b/packages/cli/src/lib/cli/cliDebug.ts @@ -76,12 +76,12 @@ export class CLIDebug extends CLICommand { // --inspect[-brk][=[ip]:[port]] `--inspect${params.wait ? '-brk' : ''}${!!params.ip || !!params.port ? '=' : ''}${params.ip || ''}${ !!params.ip && !!params.port ? ':' : '' - }${params.port || ''}` + }${params.port || ''}`, ]; // And wait until the sub process has finished const cp = fork(mainFile, adapterArgs, { cwd: adapterDir, - execArgv: nodeArgs + execArgv: nodeArgs, }); cp.on('exit', code => callback(code || 0)); } diff --git a/packages/cli/src/lib/cli/cliHost.ts b/packages/cli/src/lib/cli/cliHost.ts index 60ae75fd20..d4a7c48601 100644 --- a/packages/cli/src/lib/cli/cliHost.ts +++ b/packages/cli/src/lib/cli/cliHost.ts @@ -122,7 +122,7 @@ export class CLIHost extends CLICommand { const instances = await enumInstances(objects); const instancesToRename = instances.filter(i => i?.common.host === hostname); for (const instance of instancesToRename) { - await changeInstanceHost(objects, instance!, newHostname); + await changeInstanceHost(objects, instance, newHostname); } // Notify the user that we are done @@ -224,14 +224,14 @@ export class CLIHost extends CLICommand { Object.assign(host, { _id: `system.host.${newHostname}`, from: getObjectFrom(), - ts: Date.now() + ts: Date.now(), }); Object.assign(host.common, { name: host._id, hostname: newHostname, address: [], cmd: '', - native: { process: {}, os: {}, hardware: {} } + native: { process: {}, os: {}, hardware: {} }, }); // And save it try { @@ -257,12 +257,12 @@ export class CLIHost extends CLICommand { Object.assign(object, { _id: object._id.replace(`system.host.${prevHostname}`, `system.host.${newHostname}`), from: getObjectFrom(), - ts: Date.now() + ts: Date.now(), }); // And save it try { - await objects.setObjectAsync(object._id, object!); + await objects.setObjectAsync(object._id, object); } catch (err) { CLI.error.cannotChangeObject(object._id, err.message); } @@ -302,7 +302,7 @@ export class CLIHost extends CLICommand { async function changeInstanceHost( objects: ObjectsClient, instance: ioBroker.InstanceObject, - newHostname: string + newHostname: string, ): Promise { const oldInstanceHost = instance.common.host; instance.from = getObjectFrom(); diff --git a/packages/cli/src/lib/cli/cliLogs.ts b/packages/cli/src/lib/cli/cliLogs.ts index 3d4ff96151..b731fca243 100644 --- a/packages/cli/src/lib/cli/cliLogs.ts +++ b/packages/cli/src/lib/cli/cliLogs.ts @@ -6,7 +6,7 @@ import os from 'node:os'; import es from 'event-stream'; import { createRequire } from 'node:module'; // eslint-disable-next-line unicorn/prefer-module -const require = createRequire(import.meta.url || 'file://' + __filename); +const require = createRequire(import.meta.url || `file://${__filename}`); const { getConfigFileName } = tools; @@ -38,7 +38,7 @@ export class CLILogs extends CLICommand { const count = params.lines || 1_000; const options: CLILogsOptions = { - complete: this.options.all + complete: this.options.all, }; const config = fs.readJSONSync(require.resolve(getConfigFileName())); @@ -71,7 +71,7 @@ export class CLILogs extends CLICommand { chokidar .watch(`${parts.join('/')}/iobroker*`, { awaitWriteFinish: { stabilityThreshold: 500 }, - followSymlinks: false + followSymlinks: false, }) .on('all', this.watchHandler.bind(this, options)) .on('ready', () => (this.isReady = true)); @@ -127,7 +127,7 @@ export class CLILogs extends CLICommand { const input = fs.createReadStream(path, { encoding: 'utf8', start, - autoClose: true + autoClose: true, }); if (options.regex) { // Read the input line by line and only include the lines matching the filter diff --git a/packages/cli/src/lib/cli/cliObjects.ts b/packages/cli/src/lib/cli/cliObjects.ts index 1739b51aee..189a3d73a9 100644 --- a/packages/cli/src/lib/cli/cliObjects.ts +++ b/packages/cli/src/lib/cli/cliObjects.ts @@ -82,7 +82,7 @@ export class CLIObjects extends CLICommand { console.log(`Successfully migrated ${noMigrated} objects to Redis Sets`); } console.log( - `Successfully activated the usage of Redis Sets. Please make sure to only use js-controller 4.0 or higher on all hosts!` + `Successfully activated the usage of Redis Sets. Please make sure to only use js-controller 4.0 or higher on all hosts!`, ); } else { console.log('Redis Sets are already activated.'); @@ -135,7 +135,7 @@ export class CLIObjects extends CLICommand { let answer = rl.question('Changing the protocol version will restart all hosts! Continue? [N/y]', { limit: /^(yes|y|n|no)$/i, - defaultInput: 'no' + defaultInput: 'no', }); answer = answer.toLowerCase(); @@ -195,7 +195,7 @@ export class CLIObjects extends CLICommand { (err, processed) => { // Print the new object rights this.printObjectList(objects, states, err?.message, processed); - } + }, ); }); } @@ -218,10 +218,10 @@ export class CLIObjects extends CLICommand { CLI.error.requiredArgumentMissing('user', 'object chown user system.*'); return void callback(1); } else if (!user.startsWith('system.user.')) { - user = 'system.user.' + user; + user = `system.user.${user}`; } if (group && !group.startsWith('system.group.')) { - group = 'system.group.' + group; + group = `system.group.${group}`; } if (!pattern) { @@ -237,7 +237,7 @@ export class CLIObjects extends CLICommand { (err, processed) => { // Print the new object rights this.printObjectList(objects, states, err?.message, processed); - } + }, ); }); } @@ -262,7 +262,7 @@ export class CLIObjects extends CLICommand { objects, states, err?.message, - processed && processed.rows && processed.rows.map(r => r.value) + processed && processed.rows && processed.rows.map(r => r.value), ); return void callback(EXIT_CODES.NO_ERROR); }); @@ -292,19 +292,18 @@ export class CLIObjects extends CLICommand { if (err || !res) { CLI.error.objectNotFound(id, err?.message); return void callback(3); - } else { - if (typeof propPath === 'string') { - // We want to select a part of the object - try { - res = deepSelectProperty(res, propPath); - } catch { - CLI.error.objectPropertyNotFound(id, propPath); - return void callback(3); - } + } + if (typeof propPath === 'string') { + // We want to select a part of the object + try { + res = deepSelectProperty(res, propPath); + } catch { + CLI.error.objectPropertyNotFound(id, propPath); + return void callback(3); } - console.log(formatValue(res, pretty)); - return void callback(EXIT_CODES.NO_ERROR); } + console.log(formatValue(res, pretty)); + return void callback(EXIT_CODES.NO_ERROR); }); }); } @@ -338,10 +337,9 @@ export class CLIObjects extends CLICommand { if (err) { CLI.error.cannotUpdateObject(id, err.message); return void callback(1); - } else { - CLI.success.objectUpdated(id); - return void callback(EXIT_CODES.NO_ERROR); } + CLI.success.objectUpdated(id); + return void callback(EXIT_CODES.NO_ERROR); }); }; if (!propPath) { @@ -389,7 +387,7 @@ export class CLIObjects extends CLICommand { objects: ObjectsClient, res: ioBroker.AnyObject, propPath: string, - value: any + value: any, ): Promise { // input: it's an instance object and has encrypted native, was a native value set? if (/^native\..+[^.]$/g.test(propPath) && typeof value === 'string') { @@ -413,8 +411,8 @@ export class CLIObjects extends CLICommand { res.encryptedNative?.includes(prop) ) { try { - config = config || (await objects.getObjectAsync('system.config')); - res.native[prop] = tools.encrypt(config!.native.secret, res.native[prop]); + config = config || (await objects.getObjectAsync('system.config'))!; + res.native[prop] = tools.encrypt(config.native.secret, res.native[prop]); } catch (e) { console.error(`Could not auto-encrypt property "${prop}": ${e.message}`); } @@ -452,10 +450,9 @@ export class CLIObjects extends CLICommand { if (err) { CLI.error.cannotUpdateObject(id, err.message); return void callback(1); - } else { - CLI.success.objectUpdated(id); - return void callback(EXIT_CODES.NO_ERROR); } + CLI.success.objectUpdated(id); + return void callback(EXIT_CODES.NO_ERROR); }); }); } @@ -479,7 +476,7 @@ export class CLIObjects extends CLICommand { 'config', 'group', 'user', - 'script' + 'script', ]; const result: ioBroker.AnyObject[] = []; @@ -508,26 +505,25 @@ export class CLIObjects extends CLICommand { async _deleteObjects(objects: ObjectsClient, ids: string[], callback: (exitCode: number) => void): Promise { if (!ids || !ids.length) { return tools.maybeCallback(callback, EXIT_CODES.NO_ERROR); - } else { - let allEnums; + } + let allEnums; + try { + // cache all enums, else it will be slow to delete many objects + allEnums = await tools.getAllEnums(objects); + } catch (e) { + console.error(`Could not retrieve all enums: ${e.message}`); + } + + for (const id of ids) { try { - // cache all enums, else it will be slow to delete many objects - allEnums = await tools.getAllEnums(objects); + await objects.delObjectAsync(id); + await tools.removeIdFromAllEnums(objects, id, allEnums); } catch (e) { - console.error(`Could not retrieve all enums: ${e.message}`); - } - - for (const id of ids) { - try { - await objects.delObjectAsync(id); - await tools.removeIdFromAllEnums(objects, id, allEnums); - } catch (e) { - console.warn(`Could not delete object or remove "${id}" from enums: ${e.message}`); - } + console.warn(`Could not delete object or remove "${id}" from enums: ${e.message}`); } - return tools.maybeCallback(callback, EXIT_CODES.NO_ERROR); } + return tools.maybeCallback(callback, EXIT_CODES.NO_ERROR); } /** @@ -549,7 +545,7 @@ export class CLIObjects extends CLICommand { if (id.endsWith('*')) { const params = { startkey: id.replace(/\*/g, ''), - endkey: id.replace(/\*/g, '\u9999') + endkey: id.replace(/\*/g, '\u9999'), }; const result = await this._collectObjects(objects, params); @@ -563,7 +559,7 @@ export class CLIObjects extends CLICommand { if (!this.options.f && this.options.y && !this.options.yes) { const rl = (await import('node:readline')).createInterface({ input: process.stdin, - output: process.stdout + output: process.stdout, }); rl.question(`${result.length} object(s) will be deleted. Are you sure? [y/N]: `, answer => { rl.close(); @@ -617,7 +613,7 @@ export class CLIObjects extends CLICommand { objects: ObjectsClient, states: StatesClient, err: string | undefined, - objList?: ioBroker.AnyObject[] + objList?: ioBroker.AnyObject[], ): Promise { // TODO: is this supposed to be here? const { callback } = this.options; @@ -630,7 +626,7 @@ export class CLIObjects extends CLICommand { const list = new List({ states, objects, - processExit: callback + processExit: callback, }); list.showObjectHeader(); objList.forEach(list.showObject); @@ -755,17 +751,16 @@ function parsePropPathAndAssignment(arg: string): ParsedPropPathAndAssignment | // For partial assignments, allow strings as the value const value = parseCLIValue(valueString); return { propPath, value }; - } else { - // This is a full assignment, allow only objects - try { - const value = JSON.parse(arg); - if (!tools.isObject(value)) { - return undefined; - } - return { value }; - } catch { - // nope! + } + // This is a full assignment, allow only objects + try { + const value = JSON.parse(arg); + if (!tools.isObject(value)) { return undefined; } + return { value }; + } catch { + // nope! + return undefined; } } diff --git a/packages/cli/src/lib/cli/cliPlugin.ts b/packages/cli/src/lib/cli/cliPlugin.ts index fead2e163b..c5958415a5 100644 --- a/packages/cli/src/lib/cli/cliPlugin.ts +++ b/packages/cli/src/lib/cli/cliPlugin.ts @@ -7,7 +7,7 @@ import path from 'node:path'; import { createRequire } from 'node:module'; // eslint-disable-next-line unicorn/prefer-module -const require = createRequire(import.meta.url || 'file://' + __filename); +const require = createRequire(import.meta.url || `file://${__filename}`); const controllerIoPackPath = require.resolve('iobroker.js-controller/io-package.json'); @@ -115,9 +115,9 @@ export class CLIPlugin extends CLICommand { await objects.setObject(pluginsFolderId, { type: 'folder', common: { - name: `${hostname ? 'host' : 'instance'}: plugin states` + name: `${hostname ? 'host' : 'instance'}: plugin states`, }, - native: {} + native: {}, }); } const pluginFolderId = `${objectNamespace}.plugins.${pluginName}`; @@ -125,9 +125,9 @@ export class CLIPlugin extends CLICommand { await objects.setObject(pluginFolderId, { type: 'folder', common: { - name: `${pluginName}: plugin states` + name: `${pluginName}: plugin states`, }, - native: {} + native: {}, }); } const pluginEnabledId = `${pluginFolderId}.enabled`; @@ -139,16 +139,16 @@ export class CLIPlugin extends CLICommand { type: 'boolean', read: true, write: true, - role: 'value' + role: 'value', }, - native: {} + native: {}, }); } // Update the state await states.setStateAsync(pluginEnabledId, { val: enabled, - from: getObjectFrom() + from: getObjectFrom(), }); // Notify the user that we are done @@ -238,7 +238,7 @@ export class CLIPlugin extends CLICommand { pluginName, instance, await objects.getObjectAsync('system.config'), - iobrokerJson + iobrokerJson, ); CLI.success.pluginStatus(pluginName, hostname, instance, enabled); return void callback(); @@ -285,7 +285,7 @@ function pluginEnabled( pluginName: string, adapter?: string, systemConfig?: ioBroker.SystemConfigObject | null, - iobrokerJson?: ioBroker.IoBrokerJson + iobrokerJson?: ioBroker.IoBrokerJson, ): boolean { // 1. check if diagnostics are disabled in ioBroker if (systemConfig?.common?.diag === 'none') { diff --git a/packages/cli/src/lib/cli/cliProcess.ts b/packages/cli/src/lib/cli/cliProcess.ts index 12c800ea0e..19f4e6e447 100644 --- a/packages/cli/src/lib/cli/cliProcess.ts +++ b/packages/cli/src/lib/cli/cliProcess.ts @@ -8,7 +8,7 @@ import { setTimeout as wait } from 'node:timers/promises'; import { isLocalStatesDbServer, isLocalObjectsDbServer, - getInstancesOrderedByStartPrio + getInstancesOrderedByStartPrio, } from '@iobroker/js-controller-common'; import { tools, EXIT_CODES } from '@iobroker/js-controller-common'; import * as CLI from '@/lib/cli/messages.js'; @@ -184,7 +184,7 @@ export class CLIProcess extends CLICommand { } catch { console.warn('Cannot read memoryLimitMB'); console.warn( - `May be config file does not exist.\nPlease call "${tools.appName} setup first" to initialize the settings.` + `May be config file does not exist.\nPlease call "${tools.appName} setup first" to initialize the settings.`, ); } @@ -210,7 +210,7 @@ export class CLIProcess extends CLICommand { detached: true, stdio: ['ignore', 'ignore', 'ignore', 'ipc'], windowsHide: true, - cwd: rootDir + cwd: rootDir, }); child.unref(); @@ -248,9 +248,8 @@ export class CLIProcess extends CLICommand { resolve(); }); }); - } else { - console.log('No "killall.sh" script found. Just stop.'); } + console.log('No "killall.sh" script found. Just stop.'); } try { @@ -305,31 +304,29 @@ export class CLIProcess extends CLICommand { console.log(`States type: ${config.states.type}`); } return void callback(isOffline ? EXIT_CODES.CONTROLLER_NOT_RUNNING : undefined); - } else { - // we want to know the status of an adapter - if (/\.\d+$/.test(adapterName)) { - // instance specified - await showInstanceStatus(states, adapterName); - return void callback(); - } else { - const adapterInstances = await enumInstances(objects, adapterName); - // If there are multiple instances of this adapter, ask the user to specify which one - if (adapterInstances.length > 1) { - CLI.error.specifyInstance( - adapterName, - adapterInstances.map(obj => obj._id.substring('system.adapter.'.length)) - ); - return void callback(EXIT_CODES.INVALID_ADAPTER_ID); - } else if (adapterInstances.length === 0) { - CLI.error.noInstancesFound(adapterName); - return void callback(EXIT_CODES.UNKNOWN_ERROR); - } - - const instanceId = adapterInstances[0]._id.split('.').pop(); - await showInstanceStatus(states, `${adapterName}.${instanceId}`); - return void callback(); - } } + // we want to know the status of an adapter + if (/\.\d+$/.test(adapterName)) { + // instance specified + await showInstanceStatus(states, adapterName); + return void callback(); + } + const adapterInstances = await enumInstances(objects, adapterName); + // If there are multiple instances of this adapter, ask the user to specify which one + if (adapterInstances.length > 1) { + CLI.error.specifyInstance( + adapterName, + adapterInstances.map(obj => obj._id.substring('system.adapter.'.length)), + ); + return void callback(EXIT_CODES.INVALID_ADAPTER_ID); + } else if (adapterInstances.length === 0) { + CLI.error.noInstancesFound(adapterName); + return void callback(EXIT_CODES.UNKNOWN_ERROR); + } + + const instanceId = adapterInstances[0]._id.split('.').pop(); + await showInstanceStatus(states, `${adapterName}.${instanceId}`); + return void callback(); }); } } @@ -402,7 +399,7 @@ async function setInstanceEnabled( objects: ObjectsClient, instanceObj: ioBroker.InstanceObject, enabled: boolean, - force?: boolean + force?: boolean, ): Promise { if (!force && instanceObj.common.enabled === enabled) { return; diff --git a/packages/cli/src/lib/cli/cliStates.ts b/packages/cli/src/lib/cli/cliStates.ts index 0de7dc1f45..0dfbea44b0 100644 --- a/packages/cli/src/lib/cli/cliStates.ts +++ b/packages/cli/src/lib/cli/cliStates.ts @@ -86,7 +86,7 @@ export class CLIStates extends CLICommand { let answer = rl.question('Changing the protocol version will restart all hosts! Continue? [N/y]', { limit: /^(yes|y|n|no)$/i, - defaultInput: 'no' + defaultInput: 'no', }); answer = answer.toLowerCase(); @@ -165,7 +165,7 @@ export class CLIStates extends CLICommand { logger: console, logNamespace: '', sourceId: sourceObj?._id, - targetId: targetObj._id + targetId: targetObj._id, }); console.log(resultTransform(state)); } @@ -272,17 +272,16 @@ export class CLIStates extends CLICommand { logger: console, logNamespace: '', sourceId: obj._id, - targetId: targetObj?._id + targetId: targetObj?._id, }), err => { if (err) { CLI.error.unknown(err.message); return void callback(1); // ? - } else { - CLI.success.stateUpdated(id, val, !!ack); - return void callback(0); } - } + CLI.success.stateUpdated(id, val, !!ack); + return void callback(0); + }, ); }); } else { @@ -326,10 +325,9 @@ export class CLIStates extends CLICommand { if (err) { CLI.error.unknown(err.message); return void callback(1); // ? - } else { - CLI.success.stateUpdated(id, val, !!ack); - return void callback(0); } + CLI.success.stateUpdated(id, val, !!ack); + return void callback(0); }); }); } @@ -356,10 +354,9 @@ export class CLIStates extends CLICommand { if (err) { CLI.error.stateNotFound(id, err.message); return void callback(3); - } else { - CLI.success.stateDeleted(id); - return void callback(0); } + CLI.success.stateDeleted(id); + return void callback(0); }); }); } diff --git a/packages/cli/src/lib/cli/cliTools.ts b/packages/cli/src/lib/cli/cliTools.ts index d1bf1e752a..a05796bb3b 100644 --- a/packages/cli/src/lib/cli/cliTools.ts +++ b/packages/cli/src/lib/cli/cliTools.ts @@ -57,7 +57,7 @@ export function validateAdapterOrInstanceIdentifier(name: string): boolean { * @param name the adapter name or instance */ export function splitAdapterOrInstanceIdentifierWithVersion( - name: string + name: string, ): { name: string; instance: string | null; version: string | null; nameWithVersion: string } | null { const res = name.match(/^([a-z0-9\-_]+)\.?(\d+)?@?([a-z0-9\-_.]*)?$/); if (!res) { @@ -67,7 +67,7 @@ export function splitAdapterOrInstanceIdentifierWithVersion( name: res[1], instance: res[2] || null, version: res[3] || null, - nameWithVersion: `${res[1]}${res[3] ? `@${res[3]}` : ''}` + nameWithVersion: `${res[1]}${res[3] ? `@${res[3]}` : ''}`, }; } @@ -115,7 +115,7 @@ export function enumHosts(objects: ObjectsClient): Promise( objects: ObjectsClient, type: T, - startkey: string + startkey: string, ): Promise[]> { return new Promise((resolve, reject) => { const endkey = `${startkey}\u9999`; diff --git a/packages/cli/src/lib/cli/messages.ts b/packages/cli/src/lib/cli/messages.ts index 4d25d614c8..771121eed9 100644 --- a/packages/cli/src/lib/cli/messages.ts +++ b/packages/cli/src/lib/cli/messages.ts @@ -2,20 +2,20 @@ import { tools } from '@iobroker/js-controller-common'; const errorMessages = Object.freeze({ stateNotFound: (stateID: string, error?: string) => - `The state ${stateID} was not found!` + (error ? ` Reason: ${error}` : ''), + `The state ${stateID} was not found!${error ? ` Reason: ${error}` : ''}`, stateNotBinary: (stateId: string) => `State "${stateId}" is not binary.`, stateBinaryGetUnsupported: (stateId: string) => `State "${stateId}" is a binary state, please use getBinary.`, stateBinarySetUnsupported: (stateId: string) => `State "${stateId}" is a binary state and cannot be set via cli.`, objectNotFound: (objectID: string, error?: string) => - `The object ${objectID} was not found!` + (error ? ` Reason: ${error}` : ''), + `The object ${objectID} was not found!${error ? ` Reason: ${error}` : ''}`, cannotUpdateObject: (objectID: string, error?: string) => - `The object ${objectID} could not be updated!` + (error ? ` Reason: ${error}` : ''), + `The object ${objectID} could not be updated!${error ? ` Reason: ${error}` : ''}`, cannotDeleteObject: (objectID: string, error?: string) => - `The object ${objectID} cannot be deleted!` + (error ? ` Reason: ${error}` : ''), + `The object ${objectID} cannot be deleted!${error ? ` Reason: ${error}` : ''}`, cannotDeleteObjectFromEnums: (objectID: string, error?: string) => - `The object ${objectID} could not be deleted from enums!` + (error ? ` Reason: ${error}` : ''), + `The object ${objectID} could not be deleted from enums!${error ? ` Reason: ${error}` : ''}`, cannotChangeObject: (objectID: string, error?: string) => - `The object ${objectID} cannot be changed!` + (error ? ` Reason: ${error}` : ''), + `The object ${objectID} cannot be changed!${error ? ` Reason: ${error}` : ''}`, objectPropertyNotFound: (objectID: string, propPath: string) => `The requested property "${propPath}" or one of its parents was not found in the object "${objectID}"!`, invalidPropertyOrValue: () => `The property path or value is not valid. Please make sure the value is valid JSON.`, @@ -23,22 +23,22 @@ const errorMessages = Object.freeze({ unknownCommand: (prefix: string, command: string) => `Unknown command "${prefix} ${command}"!`, requiredArgumentMissing: (argName: string, exampleCommand?: string) => - `The required argument "${argName}" is missing!` + (exampleCommand ? ` Example: "${exampleCommand}"` : ''), + `The required argument "${argName}" is missing!${exampleCommand ? ` Example: "${exampleCommand}"` : ''}`, noInstancesFound: (adapter: string) => `Cannot find any instances of "${adapter}"!`, invalidInstance: (instance: string) => `The instance "${instance}" does not exist!`, specifyInstance: (adapter: string, adapterInstances: string[]) => `The adapter "${adapter}" has multiple instances! Please specify which one should be started: "${adapterInstances.join( - '", "' + '", "', )}".`, adapterDirNotFound: (adapter: string) => `Cannot find the installation dir for adapter "${adapter}"!`, mainFileNotFound: (adapter: string) => `Cannot find the main file for adapter "${adapter}"!`, cannotLoadIoPackage: (adapter: string) => `Cannot load the io-package.json file for adapter "${adapter}"!`, wrongCommandPrefix: (wrongPrefix: string, command: string, correctPrefix?: string) => - `The command ${command} is not intended to be used with ${wrongPrefix}!` + correctPrefix - ? `Please use "${correctPrefix} ${command}" instead.` - : '', + `The command ${command} is not intended to be used with ${wrongPrefix}!${ + correctPrefix ? ` Please use "${correctPrefix} ${command}" instead.` : '' + }`, unknown: (err: string) => `An unknown error occurred: ${err}`, cannotChangeRunningSystem: () => `Cannot execute changes on running system. Stop ${tools.appName} first.`, @@ -52,7 +52,7 @@ const errorMessages = Object.freeze({ cert: (certName: string) => `Certificate "${certName}" not found or error parsing certificate information.`, instanceAlreadyRunning: (instance: string) => - `The instance "${instance}" is already running, please stop instance first.` + `The instance "${instance}" is already running, please stop instance first.`, }); const successMessages = Object.freeze({ @@ -81,12 +81,12 @@ const successMessages = Object.freeze({ pluginStatus: (pluginName: string, host: string, instance: string, status: boolean) => `The plugin "${pluginName}" is ${status ? 'enabled' : 'disabled'} for ${ host ? `host "${host}"` : `instance "${instance}"` - }.` + }.`, }); const warnings = Object.freeze({ noInstancesFoundOnHost: (hostname?: string) => - hostname ? `No instances found for host "${hostname}"!` : `No instances found!` + hostname ? `No instances found for host "${hostname}"!` : `No instances found!`, }); // Capsule success messages in console.log diff --git a/packages/cli/src/lib/setup.ts b/packages/cli/src/lib/setup.ts index c06c78d971..a06859fb6d 100644 --- a/packages/cli/src/lib/setup.ts +++ b/packages/cli/src/lib/setup.ts @@ -28,10 +28,10 @@ import * as url from 'node:url'; import * as events from 'node:events'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); import { createRequire } from 'node:module'; // eslint-disable-next-line unicorn/prefer-module -const require = createRequire(import.meta.url || 'file://' + __filename); +const require = createRequire(import.meta.url || `file://${__filename}`); tools.ensureDNSOrder(); @@ -62,31 +62,31 @@ function initYargs(): ReturnType { .command('setup', 'Setup ioBroker', { redis: { describe: 'Setup as redis', - type: 'boolean' + type: 'boolean', }, objects: { describe: 'Objects ', default: tools.getLocalAddress(), - type: 'number' + type: 'number', }, states: { describe: 'States ', default: tools.getLocalAddress(), - type: 'number' + type: 'number', }, 'port ': { describe: 'Port of redis', default: 6379, - type: 'number' + type: 'number', }, custom: { describe: 'Custom setup', - type: 'boolean' + type: 'boolean', }, first: { describe: 'Initial setup', - type: 'boolean' - } + type: 'boolean', + }, }) .command( 'start [all|.|]', @@ -95,125 +95,125 @@ function initYargs(): ReturnType { yargs .command('all', 'Starts js-controller and all adapters') .command('[.]', 'Starts a specified adapter instance'); - } + }, ) .command( 'stop [.|]', 'stops the js-controller or a specified adapter instance or all instances of an adapter', yargs => { yargs.command('[.]', 'Stops a specified adapter instance'); - } + }, ) .command( ['restart [.|]', 'r [.|]'], 'Restarts js-controller or a specified adapter instance or all instances of an adapter', yargs => { yargs.command('[.]', 'Restarts a specified adapter instance', {}); - } + }, ) .command('debug [.]', 'Starts a Node.js debugging session for the adapter instance', { ip: { describe: 'IP-address ', - type: 'string' + type: 'string', }, port: { describe: 'Port ', - type: 'number' + type: 'number', }, wait: { describe: 'Wait', - type: 'boolean' - } + type: 'boolean', + }, }) .command('info', 'Shows the host info', {}) .command('logs []', 'Monitor log', { 'lines=1000': { // TODO: it's the only place we use = we should avoid this describe: 'Number of lines', - type: 'string' + type: 'string', }, watch: { describe: 'Watch', - type: 'boolean' - } + type: 'boolean', + }, }) .command(['add [desiredNumber]', 'a [desiredNumber]'], 'Add instance of adapter', { enabled: { describe: 'Enable adapter', - type: 'boolean' + type: 'boolean', }, host: { describe: 'Host ', - type: 'string' + type: 'string', }, port: { describe: 'Port ', - type: 'number' - } + type: 'number', + }, }) .command(['install ', 'i '], 'Installs a specified adapter', {}) .command('rebuild []', 'Rebuild all native modules or path', { path: { describe: 'Executes rebuild command in given path', - type: 'string' - } + type: 'string', + }, }) .command( 'url []', 'Install adapter from specified url, e.g. GitHub, if a package name is provided instead of an url, it will be installed from npm', - {} + {}, ) .command(['del ', 'delete '], 'Remove adapter and all instances from this host', { custom: { describe: 'Remove adapter custom attribute from all objects', - type: 'boolean' - } + type: 'boolean', + }, }) .command(['del .', 'delete .'], 'Remove adapter instance', { custom: { describe: 'Remove instance custom attribute from all objects', - type: 'boolean' - } + type: 'boolean', + }, }) .command('update []', 'Update repository and list adapters', { updatable: { describe: 'Only show updatable adapters', alias: 'u', - type: 'boolean' + type: 'boolean', }, all: { describe: 'Show all available adapters', alias: 'a', - type: 'boolean' + type: 'boolean', }, force: { describe: 'Bypass hash check', alias: 'f', - type: 'boolean' - } + type: 'boolean', + }, }) .command('upgrade', 'Upgrade management', yargs => { yargs .option('yes', { describe: 'Bypass questionnaire', alias: 'y', - type: 'boolean' + type: 'boolean', }) .command('[]', 'Upgrade all adapters, optionally you can specify the repository url', {}) .command( 'all []', 'Upgrade all adapters, optionally you can specify the repository url', - {} + {}, ) .command( 'self []', 'Upgrade js-controller, optionally you can specify the repository url', - {} + {}, ) .command( ' []', 'Upgrade specified adapter, optionally you can specify the repository url', - {} + {}, ); }) .command(['upload [all|]', 'u [all|]'], 'Upload management', yargs => { @@ -221,7 +221,7 @@ function initYargs(): ReturnType { .command( ` `, 'Upload given files to provided path to make them available for instances', - {} + {}, ) .command('all', 'Upload all adapter files to make them available for instances', {}) .command('', 'Upload specified adapter files to make them available for instances', {}); @@ -233,19 +233,19 @@ function initYargs(): ReturnType { .command( 'set propertyname=', 'Update part of the object by providing a new value or partial object', - {} + {}, ) .command( 'extend ', 'Extend object with the given id by providing a new json object', - {} + {}, ) .command('del ', 'Delete object with given id or all objects matching the pattern', { y: { describe: 'Bypass questionnaire', alias: 'y', - type: 'boolean' - } + type: 'boolean', + }, }) .command('chmod [state-mode] ', 'Change object rights', {}) .command('chown ', 'Change object ownership', {}) @@ -261,8 +261,8 @@ function initYargs(): ReturnType { .command('getPlain ', 'Get plain state, specified by id', { pretty: { describe: 'Prettify output', - type: 'boolean' - } + type: 'boolean', + }, }) .command('getValue ', 'Get state value, specified by id', {}) .command('set []', 'Set state, specified by id', {}) @@ -293,13 +293,13 @@ function initYargs(): ReturnType { 'files', 'f', 'hosts', - 'h' - ] + 'h', + ], }); yargs.positional('filter', { describe: 'Filter for matching pattern e.g. "admin*"', - type: 'string' + type: 'string', }); }) .command('chmod ', 'Change file rights', {}) @@ -311,12 +311,12 @@ function initYargs(): ReturnType { .command( `read <${tools.appName}-path-to-read> []`, `Read file from ${tools.appName} path and optionally write to destination`, - {} + {}, ) .command( `write <${tools.appName}-path-to-write>`, `Read file from path and write it to ${tools.appName} path`, - {} + {}, ) .command(`rm <${tools.appName}-path-to-delete>`, 'Remove file', {}) .command('sync', 'Sync files', {}); @@ -327,18 +327,18 @@ function initYargs(): ReturnType { yargs .option('ingroup', { describe: 'User group', - type: 'string' + type: 'string', }) .option('password', { describe: 'User password', - type: 'string' + type: 'string', }); }) .command('del ', 'Delete user', {}) .command('passwd ', 'Change user password', yargs => { yargs.option('password', { describe: 'User password', - type: 'string' + type: 'string', }); }) .command('enable ', 'Enable user', {}) @@ -347,7 +347,7 @@ function initYargs(): ReturnType { .command('check ', 'Check user password', yargs => { yargs.option('password', { describe: 'User password', - type: 'string' + type: 'string', }); }); }) @@ -371,8 +371,8 @@ function initYargs(): ReturnType { .command('set .', 'Change settings of adapter config', { customOption: { describe: - 'Set the name of the parameter you want to change as option followed by its value, e. g. --port 80' - } + 'Set the name of the parameter you want to change as option followed by its value, e. g. --port 80', + }, }) .command('license ', 'Update license by given file', {}) .command('cert', 'Certificate management', yargs => { @@ -386,8 +386,8 @@ function initYargs(): ReturnType { force: { describe: 'Restore backup of different controller version', alias: 'f', - type: 'boolean' - } + type: 'boolean', + }, }) .command('validate ', 'Validate a specified backup', {}) .command(['status [all|.]', 'isrun'], 'Status of ioBroker or adapter instance', yargs => { @@ -412,12 +412,12 @@ function initYargs(): ReturnType { .command('enable', 'Enable multihost discovery', { secure: { describe: 'Use secure connection', - type: 'boolean' + type: 'boolean', }, persist: { describe: 'Enable persistent discovery', - type: 'boolean' - } + type: 'boolean', + }, }) .command('disable', 'Disable multihost discovery') .command('browse', 'Browse for multihost server') @@ -433,11 +433,11 @@ function initYargs(): ReturnType { .command('. group ', 'Define compact group of a specific adapter') .command( '. []', - 'Enable or disable compact mode for specified adapter instance and set compact group optionally' + 'Enable or disable compact mode for specified adapter instance and set compact group optionally', ) .command( '. []', - 'Enable or disable compact mode for specified adapter instance and set compact group optionally' + 'Enable or disable compact mode for specified adapter instance and set compact group optionally', ); }) .command('plugin', 'Plugin management', yargs => { @@ -448,13 +448,13 @@ function initYargs(): ReturnType { { host: { describe: 'Hostname', - type: 'string' + type: 'string', }, instance: { describe: 'Instance, e.g. hm-rpc.0', - type: 'string' - } - } + type: 'string', + }, + }, ) .command( 'disable ', @@ -462,13 +462,13 @@ function initYargs(): ReturnType { { host: { describe: 'Hostname', - type: 'string' + type: 'string', }, instance: { describe: 'Instance, e.g. hm-rpc.0', - type: 'string' - } - } + type: 'string', + }, + }, ) .command( 'status ', @@ -476,13 +476,13 @@ function initYargs(): ReturnType { { host: { describe: 'Hostname', - type: 'string' + type: 'string', }, instance: { describe: 'Instance, e.g. hm-rpc.0', - type: 'string' - } - } + type: 'string', + }, + }, ); }) .command('vendor []', 'Update the vendor information using given passphrase') @@ -490,12 +490,12 @@ function initYargs(): ReturnType { ignore: { describe: 'Ignore specific version of this adapter. The adapter will not be upgradeable to this specific version.', - type: 'string' + type: 'string', }, recognize: { describe: 'No longer ignore specific versions of this adapter.', - type: 'boolean' - } + type: 'boolean', + }, }) .wrap(null); @@ -523,7 +523,7 @@ async function processCommand( command: string | number, args: string[], params: Record, - callback: ExitCodeCb + callback: ExitCodeCb, ): Promise { const commandContext: CLICommandContext = { dbConnect, callback, showHelp }; const commandOptions: CLICommandOptions = { ...params, ...commandContext }; @@ -569,7 +569,7 @@ async function processCommand( const { Repo } = await import('./setup/setupRepo.js'); const repo = new Repo({ objects, - states + states, }); await repo.showRepo(repoUrl, params); @@ -584,7 +584,7 @@ async function processCommand( processExit: callback, cleanDatabase, restartController, - params + params, }); if (args[0] === 'custom' || params.custom) { const exitCode = await setup.setupCustom(); @@ -618,7 +618,7 @@ async function processCommand( objects, states, processExit: callback, - params + params, }); // Define the necessary instances const initialInstances = ['admin', 'discovery', 'backitup']; @@ -626,7 +626,7 @@ async function processCommand( for (const instance of initialInstances) { try { const adapterInstalled = !!require.resolve( - `${tools.appName.toLowerCase()}.${instance}` + `${tools.appName.toLowerCase()}.${instance}`, ); if (adapterInstalled) { @@ -635,7 +635,7 @@ async function processCommand( // check if another instance exists const res = await objects.getObjectViewAsync('system', 'instance', { startkey: `system.adapter.${instance}`, - endkey: `system.adapter.${instance}\u9999` + endkey: `system.adapter.${instance}\u9999`, }); otherInstanceExists = !!res.rows.length; @@ -646,7 +646,7 @@ async function processCommand( if (!otherInstanceExists) { await install.createInstance(instance, { enabled: true, - ignoreIfExists: true + ignoreIfExists: true, }); } } @@ -691,7 +691,7 @@ async function processCommand( config.objects.options = config.objects.options || { auth_pass: null, - retry_max_delay: 5_000 + retry_max_delay: 5_000, }; if ( config.objects.options.retry_max_delay === 15_000 || @@ -701,7 +701,7 @@ async function processCommand( } config.states.options = config.states.options || { auth_pass: null, - retry_max_delay: 5_000 + retry_max_delay: 5_000, }; if ( config.states.options.retry_max_delay === 15_000 || @@ -744,14 +744,14 @@ async function processCommand( objects, log: console, logPrefix: '', - host: hostname + host: hostname, }; const notificationHandler = new NotificationHandler(notificationSettings); try { const ioPackage = fs.readJsonSync( - path.join(tools.getControllerDir(), 'io-package.json') + path.join(tools.getControllerDir(), 'io-package.json'), ); await notificationHandler.addConfig(ioPackage.notifications); @@ -759,7 +759,7 @@ async function processCommand( scope: 'system', category: 'fileToJsonl', message: `Migrated: ${migrated}`, - instance: `system.host.${hostname}` + instance: `system.host.${hostname}`, }); notificationHandler.storeNotifications(); @@ -779,7 +779,7 @@ async function processCommand( return void callback(); }, ignoreIfExist: isFirst, - useRedis: isRedis + useRedis: isRedis, }); break; } @@ -804,7 +804,7 @@ async function processCommand( objects, states, processExit: callback, - params + params, }); try { @@ -829,7 +829,7 @@ async function processCommand( RAM: formatters.formatRam, Speed: formatters.formatSpeed, 'Disk size': formatters.formatBytes, - 'Disk free': formatters.formatBytes + 'Disk free': formatters.formatBytes, }; for (const attr of Object.keys(data)) { @@ -837,11 +837,11 @@ async function processCommand( `${attr}${attr.length < 16 ? new Array(16 - attr.length).join(' ') : ''}: ${ // @ts-expect-error todo would need checks formatInfo[attr] ? formatInfo[attr](data[attr]) : data[attr] || '' - }` + }`, ); } } catch (err) { - console.error('Cannot read host info: ' + (typeof err === 'object' ? JSON.stringify(err) : err)); + console.error(`Cannot read host info: ${typeof err === 'object' ? JSON.stringify(err) : err}`); return callback(EXIT_CODES.CANNOT_GET_HOST_INFO); } @@ -896,7 +896,7 @@ async function processCommand( objects, states, processExit: callback, - params + params, }); if (params.host && params.host !== tools.getHostName()) { @@ -958,7 +958,7 @@ async function processCommand( if (commandOptions.module) { options.module = commandOptions.module; console.log( - `Rebuilding native module "${commandOptions.module}"${options.cwd ? ` in ${options.cwd}` : ''} ...` + `Rebuilding native module "${commandOptions.module}"${options.cwd ? ` in ${options.cwd}` : ''} ...`, ); } else { console.log(`Rebuilding native modules${options.cwd ? ` in ${options.cwd}` : ''} ...`); @@ -970,10 +970,9 @@ async function processCommand( console.log(); console.log(`Rebuilding native modules done`); return void callback(); - } else { - console.error('Rebuilding native modules failed'); - return void exitApplicationSave(result.exitCode); } + console.error('Rebuilding native modules failed'); + return void exitApplicationSave(result.exitCode); } case 'upload': @@ -989,7 +988,7 @@ async function processCommand( try { const objs = await objects.getObjectListAsync({ startkey: 'system.adapter.', - endkey: 'system.adapter.\u9999' + endkey: 'system.adapter.\u9999', }); if (objs) { @@ -1003,7 +1002,7 @@ async function processCommand( adapters.push( tools.isObject(row.value.common.name) ? row.value.common.name.en - : row.value.common.name + : row.value.common.name, ); } @@ -1019,7 +1018,7 @@ async function processCommand( if (name.includes('.')) { if (!subTree) { console.log( - `Please specify target name, like:\n${tools.appName} upload /file/picture.png /vis-2.0/main/img/picture.png` + `Please specify target name, like:\n${tools.appName} upload /file/picture.png /vis-2.0/main/img/picture.png`, ); return void callback(EXIT_CODES.INVALID_ARGUMENTS); } @@ -1098,7 +1097,7 @@ async function processCommand( objects, states, processExit: callback, - params + params, }); console.log(`Delete instance "${adapter}.${instance}"`); @@ -1112,7 +1111,7 @@ async function processCommand( objects, states, processExit: callback, - params + params, }); console.log(`Delete adapter "${adapter}"`); const resultCode = await install.deleteAdapter(adapter); @@ -1124,7 +1123,7 @@ async function processCommand( case 'unsetup': { const rl = (await import('node:readline')).createInterface({ input: process.stdin, - output: process.stdout + output: process.stdout, }); if (params.yes || params.y || params.Y) { @@ -1184,7 +1183,7 @@ async function processCommand( objects, states, params, - processExit: callback + processExit: callback, }); if (adapter) { @@ -1198,7 +1197,7 @@ async function processCommand( adapter, params.force || params.f, params.y || params.yes, - false + false, ); } return void callback(); @@ -1217,7 +1216,7 @@ async function processCommand( links, Object.keys(links).sort(), false, - params.y || params.yes + params.y || params.yes, ); return void callback(); } catch (e) { @@ -1233,7 +1232,7 @@ async function processCommand( const yes = args[0]; if (yes !== 'yes') { console.log( - `Command "clean" clears all Objects and States. To execute it write "${tools.appName} clean yes"` + `Command "clean" clears all Objects and States. To execute it write "${tools.appName} clean yes"`, ); } else { dbConnect(params, async ({ isOffline }) => { @@ -1270,13 +1269,13 @@ async function processCommand( objects, cleanDatabase, restartController, - processExit: callback + processExit: callback, }); const { exitCode } = await backup.restoreBackup({ name: args[0], force: !!params.force, - dontDeleteAdapters: false + dontDeleteAdapters: false, }); if (exitCode === EXIT_CODES.NO_ERROR) { @@ -1297,12 +1296,12 @@ async function processCommand( objects, cleanDatabase, restartController, - processExit: callback + processExit: callback, }); try { const filePath = await backup.createBackup(name); - console.log(`Backup created: ${filePath!}`); + console.log(`Backup created: ${filePath}`); console.log('This backup can only be restored with js-controller version 6.1 or higher'); return void callback(EXIT_CODES.NO_ERROR); } catch (e) { @@ -1322,7 +1321,7 @@ async function processCommand( objects, cleanDatabase, restartController, - processExit: callback + processExit: callback, }); try { @@ -1344,7 +1343,7 @@ async function processCommand( const list = new List({ states, objects, - processExit: callback + processExit: callback, }); list.list(args[0] as ListType, args[1], params); }); @@ -1369,7 +1368,7 @@ async function processCommand( objects.getObjectList( { startkey: 'system.adapter.', - endkey: 'system.adapter.\u9999' + endkey: 'system.adapter.\u9999', }, (err, arr) => { if (!err && arr?.rows) { @@ -1394,7 +1393,7 @@ async function processCommand( const list = new List({ states, objects, - processExit: callback + processExit: callback, }); files.sort((a, b) => a.id.localeCompare(b.id)); @@ -1405,7 +1404,7 @@ async function processCommand( } setTimeout(callback, 1_000); } - } + }, ); } if (!count) { @@ -1413,7 +1412,7 @@ async function processCommand( return void callback(); } } - } + }, ); } else { const parts = pattern.split('/'); @@ -1430,7 +1429,7 @@ async function processCommand( const list = new List({ states, objects, - processExit: callback + processExit: callback, }); for (const processedFile of processed) { list.showFile(id, processedFile.path, processedFile); @@ -1462,7 +1461,7 @@ async function processCommand( objects.getObjectList( { startkey: 'system.adapter.', - endkey: 'system.adapter.\u9999' + endkey: 'system.adapter.\u9999', }, (err, arr) => { if (!err && arr?.rows) { @@ -1487,7 +1486,7 @@ async function processCommand( const list = new List({ states, objects, - processExit: callback + processExit: callback, }); files.sort((a, b) => a.id.localeCompare(b.id)); @@ -1499,7 +1498,7 @@ async function processCommand( } setTimeout(callback, 1_000); } - } + }, ); } if (!count) { @@ -1507,7 +1506,7 @@ async function processCommand( return void callback(); } } - } + }, ); } else { const parts = pattern.split('/'); @@ -1523,7 +1522,7 @@ async function processCommand( const list = new List({ states, objects, - processExit: callback + processExit: callback, }); list.showFileHeader(); for (const file of processed) { @@ -1546,10 +1545,9 @@ async function processCommand( if (!mode) { CLIError.requiredArgumentMissing('mode', 'chmod 777 /vis-2.0/main/*'); return void callback(EXIT_CODES.INVALID_ARGUMENTS); - } else { - // yargs has converted it to number - mode = parseInt(mode.toString(), 16); } + // yargs has converted it to number + mode = parseInt(mode.toString(), 16); if (!pattern) { CLIError.requiredArgumentMissing('file path', 'chmod 777 /vis-2.0/main/*'); @@ -1566,7 +1564,7 @@ async function processCommand( objects.getObjectList( { startkey: 'system.adapter.', - endkey: 'system.adapter.\u9999' + endkey: 'system.adapter.\u9999', }, (err, arr) => { if (!err && arr?.rows) { @@ -1582,7 +1580,7 @@ async function processCommand( '*', { user: 'system.user.admin', - mode + mode, }, // @ts-expect-error todo _id should not exist how to handle async (err, processed, _id) => { @@ -1594,7 +1592,7 @@ async function processCommand( const list = new List({ states, objects, - processExit: callback + processExit: callback, }); files.sort((a, b) => a.id.localeCompare(b.id)); @@ -1606,7 +1604,7 @@ async function processCommand( } setTimeout(callback, 1_000); } - } + }, ); } if (!count) { @@ -1614,7 +1612,7 @@ async function processCommand( return void callback(); } } - } + }, ); } else { const parts = pattern.split('/'); @@ -1630,7 +1628,7 @@ async function processCommand( const list = new List({ states, objects, - processExit: callback + processExit: callback, }); list.showFileHeader(); for (const file of processed) { @@ -1681,7 +1679,7 @@ async function processCommand( objects.getObjectList( { startkey: 'system.adapter.', - endkey: 'system.adapter.\u9999' + endkey: 'system.adapter.\u9999', }, (err, arr) => { if (!err && arr?.rows) { @@ -1693,12 +1691,12 @@ async function processCommand( } count++; objects.chownFile( - row.value.common.name as string, + row.value.common.name, '*', { user: 'system.user.admin', owner: user as ioBroker.ObjectIDs.User, - ownerGroup: group + ownerGroup: group, }, // @ts-expect-error todo _id should not exist how to handle async (err, processed, _id) => { @@ -1710,7 +1708,7 @@ async function processCommand( const list = new List({ states, objects, - processExit: callback + processExit: callback, }); files.sort((a, b) => a.id.localeCompare(b.id)); @@ -1720,13 +1718,13 @@ async function processCommand( list.showFile( files[k].id, files[k].processed[t].path, - files[k].processed[t] + files[k].processed[t], ); } } setTimeout(callback, 1_000); } - } + }, ); } if (!count) { @@ -1734,7 +1732,7 @@ async function processCommand( return void callback(); } } - } + }, ); } else { const parts = pattern.split('/'); @@ -1747,7 +1745,7 @@ async function processCommand( { user: 'system.user.admin', owner: user as ioBroker.ObjectIDs.User, - ownerGroup: group + ownerGroup: group, }, async (err, processed) => { if (err) { @@ -1759,7 +1757,7 @@ async function processCommand( const list = new List({ states, objects, - processExit: callback + processExit: callback, }); list.showFileHeader(); for (const file of processed) { @@ -1769,7 +1767,7 @@ async function processCommand( } } setTimeout(callback, 1_000); - } + }, ); } }); @@ -1788,7 +1786,7 @@ async function processCommand( const { Users } = await import('./setup/setupUsers.js'); const users = new Users({ objects, - processExit: callback + processExit: callback, }); const password = params.password; const group = params.ingroup || 'system.group.administrator'; @@ -1798,74 +1796,67 @@ async function processCommand( if (err) { console.error(err); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`User "${user}" created (Group: ${group.replace('system.group.', '')})`); - return void callback(); } + console.log(`User "${user}" created (Group: ${group.replace('system.group.', '')})`); + return void callback(); }); } else if (command === 'del' || command === 'delete') { users.delUser(user, (err: any) => { if (err) { console.error(err); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`User "${user}" deleted`); - return void callback(); } + console.log(`User "${user}" deleted`); + return void callback(); }); } else if (command === 'check') { users.checkUserPassword(user, password, err => { if (err) { console.error(err.message); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`Password for user "${user}" matches.`); - return void callback(); } + console.log(`Password for user "${user}" matches.`); + return void callback(); }); } else if (command === 'set' || command === 'passwd') { users.setUserPassword(user, password, err => { if (err) { console.error(err.message); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`Password for "${user}" was successfully set.`); - return void callback(); } + console.log(`Password for "${user}" was successfully set.`); + return void callback(); }); } else if (command === 'enable' || command === 'e') { users.enableUser(user, true, err => { if (err) { console.error(err.message); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`User "${user}" was successfully enabled.`); - return void callback(); } + console.log(`User "${user}" was successfully enabled.`); + return void callback(); }); } else if (command === 'disable' || command === 'd') { users.enableUser(user, false, err => { if (err) { console.error(err.message); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`User "${user}" was successfully disabled.`); - return void callback(); } + console.log(`User "${user}" was successfully disabled.`); + return void callback(); }); } else if (command === 'get') { users.getUser(user, (err, isEnabled) => { if (err) { console.error(err.message); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`User "${user}" is ${isEnabled ? 'enabled' : 'disabled'}`); - return void callback(); } + console.log(`User "${user}" is ${isEnabled ? 'enabled' : 'disabled'}`); + return void callback(); }); } else { console.warn( - `Unknown command "${command}". Available commands are: add, del, passwd, enable, disable, check, get` + `Unknown command "${command}". Available commands are: add, del, passwd, enable, disable, check, get`, ); return void callback(EXIT_CODES.INVALID_ARGUMENTS); } @@ -1887,7 +1878,7 @@ async function processCommand( } if (!command) { console.warn( - `Unknown command "${command}". Available commands are: add, del, passwd, enable, disable, list, get` + `Unknown command "${command}". Available commands are: add, del, passwd, enable, disable, list, get`, ); return void callback(EXIT_CODES.INVALID_ARGUMENTS); } @@ -1900,7 +1891,7 @@ async function processCommand( const { Users } = await import('./setup/setupUsers.js'); const users = new Users({ objects, - processExit: callback + processExit: callback, }); if (command === 'useradd' || command === 'adduser') { @@ -1912,10 +1903,9 @@ async function processCommand( if (err) { console.error(err); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`User "${user}" was added to group "${group}"`); - return void callback(); } + console.log(`User "${user}" was added to group "${group}"`); + return void callback(); }); } else if (command === 'userdel' || command === 'deluser') { if (!user) { @@ -1926,10 +1916,9 @@ async function processCommand( if (err) { console.error(err); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`User "${user}" was deleted from group "${group}"`); - return void callback(); } + console.log(`User "${user}" was deleted from group "${group}"`); + return void callback(); }); } else if (command === 'add') { try { @@ -1944,61 +1933,56 @@ async function processCommand( if (err) { console.error(err); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`Group "${group}" was deleted`); - return void callback(); } + console.log(`Group "${group}" was deleted`); + return void callback(); }); } else if (command === 'list' || command === 'l') { users.getGroup(group, (err, isEnabled, members) => { if (err) { console.error(err); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log( - `Group "${group}" is ${isEnabled ? 'enabled' : 'disabled'} and has following members:` - ); - if (members) { - for (const member of members) { - console.log(member.substring('system.user.'.length)); - } + } + console.log( + `Group "${group}" is ${isEnabled ? 'enabled' : 'disabled'} and has following members:`, + ); + if (members) { + for (const member of members) { + console.log(member.substring('system.user.'.length)); } - return void callback(); } + return void callback(); }); } else if (command === 'enable' || command === 'e') { users.enableGroup(group, true, (err: any) => { if (err) { console.error(err); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`Group "${group}" was successfully enabled.`); - return void callback(); } + console.log(`Group "${group}" was successfully enabled.`); + return void callback(); }); } else if (command === 'disable' || command === 'd') { users.enableGroup(group, false, (err: any) => { if (err) { console.error(err); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`Group "${group}" was successfully disabled.`); - return void callback(); } + console.log(`Group "${group}" was successfully disabled.`); + return void callback(); }); } else if (command === 'get') { users.getGroup(group, (err, isEnabled) => { if (err) { console.error(err); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`Group "${group}" is ${isEnabled ? 'enabled' : 'disabled'}`); - return void callback(); } + console.log(`Group "${group}" is ${isEnabled ? 'enabled' : 'disabled'}`); + return void callback(); }); } else { console.warn( - `Unknown command "${command}". Available commands are: add, del, passwd, enable, disable, list, get` + `Unknown command "${command}". Available commands are: add, del, passwd, enable, disable, list, get`, ); return void callback(EXIT_CODES.INVALID_ARGUMENTS); } @@ -2015,16 +1999,15 @@ async function processCommand( const { Users } = await import('./setup/setupUsers.js'); const users = new Users({ objects, - processExit: callback + processExit: callback, }); users.addUserPrompt(user, group, password, (err: any) => { if (err) { console.error(err); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`User "${user}" created (Group: ${group.replace('system.group.', '')})`); - return void callback(); } + console.log(`User "${user}" created (Group: ${group.replace('system.group.', '')})`); + return void callback(); }); }); break; @@ -2037,16 +2020,15 @@ async function processCommand( const { Users } = await import('./setup/setupUsers.js'); const users = new Users({ objects, - processExit: callback + processExit: callback, }); users.setUserPassword(user, password, (err: any) => { if (err) { console.error(err); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`Password for "${user}" was successfully set.`); - return void callback(); } + console.log(`Password for "${user}" was successfully set.`); + return void callback(); }); }); break; @@ -2062,16 +2044,15 @@ async function processCommand( const { Users } = await import('./setup/setupUsers.js'); const users = new Users({ objects, - processExit: callback + processExit: callback, }); users.delUser(user, (err: any) => { if (err) { console.error(err); return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); - } else { - console.log(`User "${user}" deleted`); - return void callback(); } + console.log(`User "${user}" deleted`); + return void callback(); }); }); break; @@ -2082,14 +2063,14 @@ async function processCommand( const json = { name: tools.appName, engines: { - node: '>=12' + node: '>=12', }, optionalDependencies: {} as Record, dependencies: { [`${tools.appName.toLowerCase()}.js-controller`]: '*', - [`${tools.appName.toLowerCase()}.admin`]: '*' + [`${tools.appName.toLowerCase()}.admin`]: '*', }, - author: 'bluefox ' + author: 'bluefox ', }; // @ts-expect-error todo fix it @@ -2098,12 +2079,12 @@ async function processCommand( for (const s in sources) { if (Object.prototype.hasOwnProperty.call(sources, s)) { if (sources[s].url) { - if (!json.dependencies[tools.appName + '.' + s]) { - json.optionalDependencies[tools.appName + '.' + s] = sources[s].url; + if (!json.dependencies[`${tools.appName}.${s}`]) { + json.optionalDependencies[`${tools.appName}.${s}`] = sources[s].url; } } else { - if (!json.dependencies[tools.appName + '.' + s]) { - json.optionalDependencies[tools.appName + '.' + s] = '*'; + if (!json.dependencies[`${tools.appName}.${s}`]) { + json.optionalDependencies[`${tools.appName}.${s}`] = '*'; } } } @@ -2210,7 +2191,7 @@ async function processCommand( dbConnect(params, ({ objects }) => { const visDebug = new VisDebug({ objects, - processExit: callback + processExit: callback, }); visDebug.enableDebug(widgetset); @@ -2232,19 +2213,19 @@ async function processCommand( cmd !== 'del' ) { console.log( - 'Invalid parameters: write "file read /vis-2.0/main/img/picture.png /opt/picture/image.png" to read the file' + 'Invalid parameters: write "file read /vis-2.0/main/img/picture.png /opt/picture/image.png" to read the file', ); return void callback(EXIT_CODES.INVALID_ARGUMENTS); } if (cmd !== 'sync' && !args[1]) { console.log( - 'Invalid parameters: write "file read /vis-2.0/main/img/picture.png /opt/picture/image.png" to read the file from DB and store it on disk' + 'Invalid parameters: write "file read /vis-2.0/main/img/picture.png /opt/picture/image.png" to read the file from DB and store it on disk', ); console.log( - 'or "file write /opt/SOURCE/image.png /vis-2.0/main/DESTINATION/picture.png" to write the file into DB from disk' + 'or "file write /opt/SOURCE/image.png /vis-2.0/main/DESTINATION/picture.png" to write the file into DB from disk', ); console.log( - 'or "file rm /vis-2.0/main/img/picture.png" to delete the file in DB' + 'or "file rm /vis-2.0/main/img/picture.png" to delete the file in DB', ); return void callback(EXIT_CODES.INVALID_ARGUMENTS); } @@ -2310,14 +2291,14 @@ async function processCommand( } if (!fileSrc || !fs.existsSync(toRead)) { console.log( - `Please provide a valid file name as source file: "file write /opt/SOURCE/script.js /vis-2/DESTINATION/script.js"` + `Please provide a valid file name as source file: "file write /opt/SOURCE/script.js /vis-2/DESTINATION/script.js"`, ); return void callback(EXIT_CODES.INVALID_ARGUMENTS); } const srcStat = fs.statSync(toRead); if (!srcStat.isFile()) { console.log( - `Please provide a valid file name as source file: "file write /opt/SOURCE/script.js /vis-2/DESTINATION/script.js"` + `Please provide a valid file name as source file: "file write /opt/SOURCE/script.js /vis-2/DESTINATION/script.js"`, ); return void callback(EXIT_CODES.INVALID_ARGUMENTS); } @@ -2380,7 +2361,7 @@ async function processCommand( if (!objects.syncFileDirectory || !objects.dirExists) { // functionality only exists in server class console.log( - 'Please stop ioBroker before syncing files and only use this command on the ioBroker master host!' + 'Please stop ioBroker before syncing files and only use this command on the ioBroker master host!', ); return void callback(EXIT_CODES.CONTROLLER_RUNNING); } @@ -2409,7 +2390,7 @@ async function processCommand( if (notifications.length) { console.log(); console.log('The following notifications happened during sync: '); - notifications.forEach((el: string) => console.log('- ' + el)); + notifications.forEach((el: string) => console.log(`- ${el}`)); } return void callback(EXIT_CODES.NO_ERROR); } catch (err) { @@ -2418,13 +2399,13 @@ async function processCommand( } } else { console.log( - 'Invalid parameters: write "file read /vis-2.0/main/img/picture.png /opt/picture/image.png" to read the file from DB and store it on disk' + 'Invalid parameters: write "file read /vis-2.0/main/img/picture.png /opt/picture/image.png" to read the file from DB and store it on disk', ); console.log( - 'or "file write /opt/SOURCE/image.png /vis-2.0/main/DESTINATION/picture.png" to write the file into DB from disk' + 'or "file write /opt/SOURCE/image.png /vis-2.0/main/DESTINATION/picture.png" to write the file into DB from disk', ); console.log( - 'or "file rm /vis-2.0/main/img/picture.png" to delete the file in DB' + 'or "file rm /vis-2.0/main/img/picture.png" to delete the file in DB', ); return void callback(EXIT_CODES.INVALID_ARGUMENTS); } @@ -2443,10 +2424,9 @@ async function processCommand( if (obj?.native) { console.log(obj.native.uuid); return void callback(); - } else { - console.error('Error: no UUID found'); - return void callback(EXIT_CODES.CANNOT_GET_UUID); } + console.error('Error: no UUID found'); + return void callback(EXIT_CODES.CANNOT_GET_UUID); }); }); break; @@ -2504,32 +2484,31 @@ async function processCommand( if (isOffline && hasLocalObjectsServer) { console.log(`${tools.appName} is not running`); return void callback(EXIT_CODES.CONTROLLER_NOT_RUNNING); - } else { - console.log(`${tools.appName} is running`); - objects.getObjectList( - { - startkey: 'system.host.', - endkey: `system.host.\u9999` - }, - null, - (err, res) => { - if (!err && res?.rows.length) { - for (const row of res.rows) { - const parts = row.id.split('.'); - // ignore system.host.name.alive and so on - if (parts.length === 3) { - states.pushMessage(row.id, { - command: 'checkLogging', - message: null, - from: 'console' - }); - } + } + console.log(`${tools.appName} is running`); + objects.getObjectList( + { + startkey: 'system.host.', + endkey: `system.host.\u9999`, + }, + null, + (err, res) => { + if (!err && res?.rows.length) { + for (const row of res.rows) { + const parts = row.id.split('.'); + // ignore system.host.name.alive and so on + if (parts.length === 3) { + states.pushMessage(row.id, { + command: 'checkLogging', + message: null, + from: 'console', + }); } } - setTimeout(callback, 200); } - ); - } + setTimeout(callback, 200); + }, + ); }); break; } @@ -2554,7 +2533,7 @@ async function processCommand( const { Repo } = await import('./setup/setupRepo.js'); const repo = new Repo({ objects, - states + states, }); if (repoUrlOrCommand === 'show') { @@ -2575,66 +2554,63 @@ async function processCommand( if (!repoName || !repoName.match(/[-_\w\d]+/)) { console.error(`Invalid repository name: "${repoName}"`); return void callback(); - } else { - if (repoUrlOrCommand === 'add' || repoUrlOrCommand === 'addset') { - if (!repoUrl) { - console.warn( - `Please define repository URL or path: ${tools.appName.toLowerCase()} add ` - ); - return void callback(EXIT_CODES.INVALID_ARGUMENTS); - } else { - try { - await repo.add(repoName, repoUrl); - - if (repoUrlOrCommand === 'addset') { - await repo.setActive(repoName); - console.log(`Repository "${repoName}" set as active: "${repoUrl}"`); - await repo.showRepoStatus(); - return void callback(); - } else { - console.log(`Repository "${repoName}" added as "${repoUrl}"`); - await repo.showRepoStatus(); - return void callback(); - } - } catch (err) { - console.error(`Cannot add repository location: ${err.message}`); - return void callback(EXIT_CODES.INVALID_REPO); - } - } - } else if (repoUrlOrCommand === 'set') { - try { + } + if (repoUrlOrCommand === 'add' || repoUrlOrCommand === 'addset') { + if (!repoUrl) { + console.warn( + `Please define repository URL or path: ${tools.appName.toLowerCase()} add `, + ); + return void callback(EXIT_CODES.INVALID_ARGUMENTS); + } + try { + await repo.add(repoName, repoUrl); + + if (repoUrlOrCommand === 'addset') { await repo.setActive(repoName); - console.log(`Repository "${repoName}" set as active.`); + console.log(`Repository "${repoName}" set as active: "${repoUrl}"`); await repo.showRepoStatus(); return void callback(); - } catch (err) { - console.error(`Cannot activate repository: ${err.message}`); - return void callback(EXIT_CODES.INVALID_REPO); - } - } else if (repoUrlOrCommand === 'del') { - try { - await repo.del(repoName); - console.log(`Repository "${repoName}" deleted.`); - await repo.showRepoStatus(); - return void callback(); - } catch (err) { - console.error(`Cannot remove repository: ${err.message}`); - return void callback(EXIT_CODES.INVALID_REPO); - } - } else if (repoUrlOrCommand === 'unset') { - try { - await repo.setInactive(repoName); - console.log(`Repository "${repoName}" deactivated.`); - await repo.showRepoStatus(); - return void callback(); - } catch (err) { - console.error(`Cannot deactivate repository: ${err.message}`); - return void callback(EXIT_CODES.INVALID_REPO); } - } else { - console.warn('Unknown repo command: ' + repoUrlOrCommand); - return void callback(EXIT_CODES.INVALID_ARGUMENTS); + console.log(`Repository "${repoName}" added as "${repoUrl}"`); + await repo.showRepoStatus(); + return void callback(); + } catch (err) { + console.error(`Cannot add repository location: ${err.message}`); + return void callback(EXIT_CODES.INVALID_REPO); } + } else if (repoUrlOrCommand === 'set') { + try { + await repo.setActive(repoName); + console.log(`Repository "${repoName}" set as active.`); + await repo.showRepoStatus(); + return void callback(); + } catch (err) { + console.error(`Cannot activate repository: ${err.message}`); + return void callback(EXIT_CODES.INVALID_REPO); + } + } else if (repoUrlOrCommand === 'del') { + try { + await repo.del(repoName); + console.log(`Repository "${repoName}" deleted.`); + await repo.showRepoStatus(); + return void callback(); + } catch (err) { + console.error(`Cannot remove repository: ${err.message}`); + return void callback(EXIT_CODES.INVALID_REPO); + } + } else if (repoUrlOrCommand === 'unset') { + try { + await repo.setInactive(repoName); + console.log(`Repository "${repoName}" deactivated.`); + await repo.showRepoStatus(); + return void callback(); + } catch (err) { + console.error(`Cannot deactivate repository: ${err.message}`); + return void callback(EXIT_CODES.INVALID_REPO); + } + } else { + console.warn(`Unknown repo command: ${repoUrlOrCommand as string}`); + return void callback(EXIT_CODES.INVALID_ARGUMENTS); } } }); @@ -2658,66 +2634,64 @@ async function processCommand( ) { console.log('Invalid parameters. Following is possible: enable, browse, connect, status'); return void callback(EXIT_CODES.INVALID_ARGUMENTS); - } else { - dbConnect(params, async ({ objects, states }) => { - const { Multihost } = await import('./setup/setupMultihost.js'); - const mh = new Multihost({ - params, - objects - }); + } + dbConnect(params, async ({ objects, states }) => { + const { Multihost } = await import('./setup/setupMultihost.js'); + const mh = new Multihost({ + params, + objects, + }); - if (cmd === 's' || cmd === 'status') { - mh.status(); + if (cmd === 's' || cmd === 'status') { + mh.status(); + return void callback(); + } else if (cmd === 'b' || cmd === 'browse') { + try { + const list = await mh.browse(); + mh.showHosts(list); return void callback(); - } else if (cmd === 'b' || cmd === 'browse') { - try { - const list = await mh.browse(); - mh.showHosts(list); - return void callback(); - } catch (e) { - console.error(e.message); - return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); + } catch (e) { + console.error(e.message); + return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP); + } + } else if (cmd === 'e' || cmd === 'enable') { + mh.enable(true, async (err: any) => { + if (err) { + console.error(err); + return void callback(EXIT_CODES.CANNOT_ENABLE_MULTIHOST); } - } else if (cmd === 'e' || cmd === 'enable') { - mh.enable(true, async (err: any) => { - if (err) { - console.error(err); - return void callback(EXIT_CODES.CANNOT_ENABLE_MULTIHOST); - } else { - await states.pushMessage(`system.host.${tools.getHostName()}`, { - command: 'updateMultihost', - message: null, - from: 'setup' - }); - - callback(); - } + await states.pushMessage(`system.host.${tools.getHostName()}`, { + command: 'updateMultihost', + message: null, + from: 'setup', }); - } else if (cmd === 'd' || cmd === 'disable') { - mh.enable(false, async (err: any) => { - if (err) { - console.error(err); - return void callback(EXIT_CODES.CANNOT_ENABLE_MULTIHOST); - } else { - await states.pushMessage(`system.host.${tools.getHostName()}`, { - command: 'updateMultihost', - message: null, - from: 'setup' - }); - callback(); - } - }); - } else if (cmd === 'c' || cmd === 'connect') { - mh.connect(parseInt(args[1]), args[2], (err: any) => { - if (err) { - console.error(err); - } - return void callback(err ? 1 : 0); + callback(); + }); + } else if (cmd === 'd' || cmd === 'disable') { + mh.enable(false, async (err: any) => { + if (err) { + console.error(err); + return void callback(EXIT_CODES.CANNOT_ENABLE_MULTIHOST); + } + await states.pushMessage(`system.host.${tools.getHostName()}`, { + command: 'updateMultihost', + message: null, + from: 'setup', }); - } - }); - } + + callback(); + }); + } else if (cmd === 'c' || cmd === 'connect') { + mh.connect(parseInt(args[1]), args[2], (err: any) => { + if (err) { + console.error(err); + } + return void callback(err ? 1 : 0); + }); + } + }); + break; } @@ -2726,7 +2700,7 @@ async function processCommand( const file = args[1]; if (!password) { console.warn( - `Please specify the password to update the vendor information!\n${tools.appName.toLowerCase()} vendor ` + `Please specify the password to update the vendor information!\n${tools.appName.toLowerCase()} vendor `, ); return void callback(EXIT_CODES.INVALID_ARGUMENTS); } @@ -2767,23 +2741,23 @@ async function processCommand( const file = args[0]; if (!file) { console.warn( - `Please specify the path to the license file or place license text directly!\n${tools.appName.toLowerCase()} license ` + `Please specify the path to the license file or place license text directly!\n${tools.appName.toLowerCase()} license `, ); return void callback(EXIT_CODES.INVALID_ARGUMENTS); - } else { - dbConnect(params, async ({ objects }) => { - const { License } = await import('./setup/setupLicense.js'); - const license = new License({ objects }); - try { - await license.setLicense(file); - console.log(`License updated.`); - return void callback(); - } catch (err) { - console.error(`Cannot update license: ${err.message}`); - return void callback(EXIT_CODES.CANNOT_UPDATE_LICENSE); - } - }); } + dbConnect(params, async ({ objects }) => { + const { License } = await import('./setup/setupLicense.js'); + const license = new License({ objects }); + try { + await license.setLicense(file); + console.log(`License updated.`); + return void callback(); + } catch (err) { + console.error(`Cannot update license: ${err.message}`); + return void callback(EXIT_CODES.CANNOT_UPDATE_LICENSE); + } + }); + break; } @@ -2818,7 +2792,7 @@ const OBJECTS_THAT_CANNOT_BE_DELETED = [ 'system.group.administrator', 'system.group.user', 'system.repositories', - 'system.user.admin' + 'system.user.admin', ]; /** @@ -2875,25 +2849,24 @@ async function cleanDatabase(isDeleteDb: boolean): Promise { // Clean up states const keysCount = await delStates(); return keysCount; - } else { - // Clean only objects, not the views - let ids: string[] = []; - - try { - const res = await objects.getObjectListAsync({ startkey: '\u0000', endkey: '\u9999' }); - if (res.rows.length) { - console.log(`clean ${res.rows.length} objects...`); - ids = res.rows.map(e => e.id); - } - } catch { - // ignore + } + // Clean only objects, not the views + let ids: string[] = []; + + try { + const res = await objects.getObjectListAsync({ startkey: '\u0000', endkey: '\u9999' }); + if (res.rows.length) { + console.log(`clean ${res.rows.length} objects...`); + ids = res.rows.map(e => e.id); } - - await delObjects(ids); - // Clean up states - const keysCount = await delStates(); - return keysCount; + } catch { + // ignore } + + await delObjects(ids); + // Clean up states + const keysCount = await delStates(); + return keysCount; } function unsetup(params: Record, callback: ExitCodeCb): void { @@ -2921,10 +2894,9 @@ function unsetup(params: Record, callback: ExitCodeCb): void { if (err) { console.log(`not found: ${err.message}`); return void callback(EXIT_CODES.CANNOT_SET_OBJECT); - } else { - console.log('system.config reset'); - return void callback(); } + console.log('system.config reset'); + return void callback(); }); } else { console.log('system.config is OK'); @@ -2945,7 +2917,7 @@ async function restartController(): Promise { const child = spawn('node', [`${thisDir}/restart.js`], { detached: true, stdio: ['ignore', 'ignore', 'ignore'], - windowsHide: true + windowsHide: true, }); child.unref(); diff --git a/packages/cli/src/lib/setup/dbConnection.ts b/packages/cli/src/lib/setup/dbConnection.ts index 4f56f94e15..0b82ebe4d7 100644 --- a/packages/cli/src/lib/setup/dbConnection.ts +++ b/packages/cli/src/lib/setup/dbConnection.ts @@ -4,7 +4,7 @@ import { getObjectsConstructor, getStatesConstructor, objectsDbHasServer, - statesDbHasServer + statesDbHasServer, } from '@iobroker/js-controller-common'; import { EXIT_CODES } from '@iobroker/js-controller-common'; import { tools } from '@iobroker/js-controller-common'; @@ -39,7 +39,7 @@ export function dbConnect(onlyCheck: boolean, params: Record, callb export async function dbConnect( onlyCheck: boolean | Record | DbConnectCallback, params?: DbConnectParams | DbConnectCallback, - callback?: DbConnectCallback + callback?: DbConnectCallback, ): Promise { if (typeof onlyCheck === 'object') { callback = params as DbConnectCallback; @@ -51,7 +51,7 @@ export async function dbConnect( onlyCheck = false; } if (typeof params === 'function') { - callback = params as DbConnectCallback; + callback = params; params = {}; } @@ -112,7 +112,7 @@ export async function dbConnect( /** do not log on this level */ }, warn: (msg: string) => console.log(msg), - error: (msg: string) => console.log(msg) + error: (msg: string) => console.log(msg), }, connected: async () => { isObjectConnected = true; @@ -127,14 +127,14 @@ export async function dbConnect( states: states!, isOffline: true, objectsDBType: config.objects.type, - config + config, }); } - } + }, }); } else { console.log( - `No connection to objects ${config.objects.host}:${config.objects.port}[${config.objects.type}]` + `No connection to objects ${config.objects.host}:${config.objects.port}[${config.objects.type}]`, ); if (onlyCheck) { callback && @@ -143,7 +143,7 @@ export async function dbConnect( states: states!, isOffline: true, objectsDBType: config.objects.type, - config + config, }); callback = undefined; } else { @@ -178,7 +178,7 @@ export async function dbConnect( /** do not log on this level */ }, warn: (msg: string) => console.log(msg), - error: (msg: string) => console.log(msg) + error: (msg: string) => console.log(msg), }, connected: async () => { isStatesConnected = true; @@ -193,16 +193,16 @@ export async function dbConnect( states: states!, isOffline: true, objectsDBType: config.objects.type, - config + config, }); } }, // react on change // @ts-expect-error todo according to types and first look states.onchange does not exist - change: (id, msg) => states?.onChange(id, msg) + change: (id, msg) => states?.onChange(id, msg), }); // @ts-expect-error todo according to types and first look states.onchange does not exist - states!.onChange = null; // here the custom onChange handler could be installed + states.onChange = null; // here the custom onChange handler could be installed } else { if (states) { // Destroy Client we tried to connect with @@ -215,7 +215,7 @@ export async function dbConnect( objects = null; } console.log( - `No connection to states ${config.states.host}:${config.states.port}[${config.states.type}]` + `No connection to states ${config.states.host}:${config.states.port}[${config.states.type}]`, ); if (onlyCheck) { callback && @@ -224,7 +224,7 @@ export async function dbConnect( states: states!, isOffline: true, objectsDBType: config.objects.type, - config + config, }); callback = undefined; } else { @@ -249,18 +249,18 @@ export async function dbConnect( states: null as any, isOffline: true, objectsDBType: config.objects.type, - config + config, }); callback = undefined; } else { return void exitApplicationSave(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB); } }, - params.timeout || config.objects.connectTimeout * 2 + params.timeout || config.objects.connectTimeout * 2, ); // try to connect as client - objects = new Objects!({ + objects = new Objects({ connection: config.objects, logger: { silly: (_msg: string) => { @@ -273,7 +273,7 @@ export async function dbConnect( /** do not log on this level */ }, warn: (msg: string) => console.log(msg), - error: (msg: string) => console.log(msg) + error: (msg: string) => console.log(msg), }, connected: async () => { if (isObjectConnected) { @@ -282,7 +282,7 @@ export async function dbConnect( isObjectConnected = true; if (isStatesConnected && typeof callback === 'function') { - const isOffline = await checkSystemOffline(onlyCheck as boolean); + const isOffline = await checkSystemOffline(onlyCheck); try { await initializePlugins(config); } catch { @@ -290,10 +290,10 @@ export async function dbConnect( } callback({ objects: objects!, states: states!, isOffline, objectsDBType: config.objects.type, config }); } - } + }, }); - states = new States!({ + states = new States({ connection: config.states, logger: { silly: (_msg: string) => { @@ -306,7 +306,7 @@ export async function dbConnect( /** do not log on this level */ }, warn: (msg: string) => console.log(msg), - error: (msg: string) => console.log(msg) + error: (msg: string) => console.log(msg), }, connected: async () => { if (isStatesConnected) { @@ -315,7 +315,7 @@ export async function dbConnect( isStatesConnected = true; if (isObjectConnected && typeof callback === 'function') { - const isOffline = await checkSystemOffline(onlyCheck as boolean); + const isOffline = await checkSystemOffline(onlyCheck); try { await initializePlugins(config); } catch { @@ -325,7 +325,7 @@ export async function dbConnect( } }, // @ts-expect-error todo according to types and first look states.onchange does not exist - change: (id, state) => states?.onChange(id, state) + change: (id, state) => states?.onChange(id, state), }); } @@ -401,11 +401,11 @@ function initializePlugins(config: Record): Promise { }, warn: (msg: string) => console.log(msg), error: (msg: string) => console.log(msg), - level: 'warn' + level: 'warn', }, iobrokerConfig: config, parentPackage: packageJson, - controllerVersion: ioPackage.common.version + controllerVersion: ioPackage.common.version, }; pluginHandler = new PluginHandler(pluginSettings); diff --git a/packages/cli/src/lib/setup/formatters.ts b/packages/cli/src/lib/setup/formatters.ts index 7992b0a351..b5be04c8e8 100644 --- a/packages/cli/src/lib/setup/formatters.ts +++ b/packages/cli/src/lib/setup/formatters.ts @@ -10,17 +10,17 @@ export function formatSeconds(seconds: number): string { _seconds %= 3_600 * 24; let hours: number | string = Math.floor(_seconds / 3_600); if (hours < 10) { - hours = '0' + hours; + hours = `0${hours}`; } _seconds %= 3_600; let minutes: number | string = Math.floor(_seconds / 60); if (minutes < 10) { - minutes = '0' + minutes; + minutes = `0${minutes}`; } _seconds %= 60; _seconds = Math.floor(_seconds); if (_seconds < 10) { - _seconds = '0' + _seconds; + _seconds = `0${_seconds}`; } let text = ''; if (days) { @@ -74,5 +74,5 @@ export function formatBytes(bytes: number): string { bytes /= 1024; ++u; } while (Math.abs(bytes) >= 1024 && u < units.length - 1); - return bytes.toFixed(1) + ' ' + units[u]; + return `${bytes.toFixed(1)} ${units[u]}`; } diff --git a/packages/cli/src/lib/setup/multihostClient.ts b/packages/cli/src/lib/setup/multihostClient.ts index f3d9b115be..06c82c30dc 100644 --- a/packages/cli/src/lib/setup/multihostClient.ts +++ b/packages/cli/src/lib/setup/multihostClient.ts @@ -83,7 +83,7 @@ export class MHClient { timeout: number, onReady: () => void, onMessage: (msg: ReceivedMessage, rinfo: dgram.RemoteInfo) => boolean, - onFinished: (err?: Error) => void + onFinished: (err?: Error) => void, ): void { if (this.server) { onFinished(new Error('Some operation still active')); @@ -146,7 +146,7 @@ export class MHClient { () => { const text = JSON.stringify({ cmd: 'browse', - id: ++this.id + id: ++this.id, }); this.server!.send(text, 0, text.length, PORT, MULTICAST_ADDR); }, @@ -158,7 +158,7 @@ export class MHClient { ip: rinfo.address, hostname: rinfo.address, info: 'authentication required', - auth: msg.auth + auth: msg.auth, }); } else if (msg.result === 'ok') { result.push(msg); @@ -179,7 +179,7 @@ export class MHClient { } resolve(result); - } + }, ); }); } @@ -198,8 +198,8 @@ export class MHClient { err: Error | undefined, objectsConfig?: ioBroker.ObjectsDatabaseOptions, statesConfig?: ioBroker.StatesDatabaseOptions, - address?: string - ) => void + address?: string, + ) => void, ): void { let callCb = true; @@ -209,7 +209,7 @@ export class MHClient { () => { const text = JSON.stringify({ cmd: 'browse', - id: ++this.id + id: ++this.id, }); this.server!.send(text, 0, text.length, PORT, ip); }, @@ -241,7 +241,7 @@ export class MHClient { const text = JSON.stringify({ cmd: 'browse', id: ++this.id, - password: shaText + password: shaText, }); this.server!.send(text, 0, text.length, PORT, ip); }); @@ -256,9 +256,8 @@ export class MHClient { console.log(msg.result); } return true; - } else { - console.warn(`Multihost discovery client: Unexpected message: ${JSON.stringify(msg)}`); } + console.warn(`Multihost discovery client: Unexpected message: ${JSON.stringify(msg)}`); return false; }, @@ -267,7 +266,7 @@ export class MHClient { callback(err); callCb = false; } - } + }, ); } } diff --git a/packages/cli/src/lib/setup/pluginInfos.ts b/packages/cli/src/lib/setup/pluginInfos.ts index 2be08f8bdf..54af228271 100644 --- a/packages/cli/src/lib/setup/pluginInfos.ts +++ b/packages/cli/src/lib/setup/pluginInfos.ts @@ -16,7 +16,7 @@ export const PLUGIN_INFOS = { es: 'ATENCIÓN: el informe de errores a través de Sentry se activará en el próximo inicio de ioBroker', pl: 'UWAGA: Raportowanie błędów za pośrednictwem Sentry zostanie aktywowane przy następnym uruchomieniu ioBroker', uk: 'УВАГА: Звіт про помилки через Sentry буде активовано при наступному запуску ioBroker', - 'zh-cn': '注意:通过Sentry的错误报告将在ioBroker的下一次启动时被激活' + 'zh-cn': '注意:通过Sentry的错误报告将在ioBroker的下一次启动时被激活', }, text: { en: "ioBroker wants to make sure to deliver the most stable smart home system.\nTo allow this we decided to implement an automatic error and crash reporting solution into the js-controller and also into adapters. \n\nTHIS REPORTING WILL BE ENABLED WITH THE NEXT START OF YOUR IOBROKER!\n\nFor any error that leads to the crash of the js-controller or one of the relevant adapters the error details are send to a server. For the js-controller and core adapters this server is located and operated in germany. For community adapters please check the Github Readme of the affected adapter for details which Sentry server is used.\n\nIf you want to disable the error reporting you can use the command\n'iobroker plugin disable sentry'\nThis command will also make sure that no adapter that runs on this host will send crash reporting data to sentry.", @@ -30,7 +30,7 @@ export const PLUGIN_INFOS = { pl: 'ioBroker chce zapewnić najbardziej stabilny system inteligentnego domu.\nAby to umożliwić, zdecydowaliśmy się wdrożyć automatyczne raportowanie błędów i awarii w sterowniku js, a także w adapterach.\n\nNINIEJSZE SPRAWOZDAWCZOŚĆ BĘDZIE WŁĄCZONA Z NASTĘPNYM STARTEM TWOJEGO IOBROKERA!\n\nW przypadku każdego błędu, który prowadzi do awarii sterownika js lub jednego z odpowiednich adapterów, szczegóły błędu są wysyłane do serwera. W przypadku kontrolera js i podstawowych adapterów serwer ten znajduje się i działa w Niemczech. W przypadku adapterów społecznościowych sprawdź plik Github Readme odpowiedniego adaptera, aby uzyskać szczegółowe informacje na temat używanego serwera Sentry.\n\nJeśli chcesz wyłączyć raportowanie błędów, możesz użyć polecenia\n„iobroker plugin disable sentry”\nTo polecenie upewni się również, że żaden adapter działający na tym hoście nie wyśle danych raportowania awarii do wartownika.', uk: 'ioBroker хоче забезпечити найстабільнішу систему розумного будинку.\nДля цього ми вирішили впровадити автоматичне повідомлення про помилки та аварії в контролері js та також в адаптери.\n\nЦЕ ЗВІТУВАННЯ БУДЕ АКТИВОВАНО З НАСТУПНИМ СТАРТОМ ВАШОГО IOBROKER!\n\nДля будь-якої помилки, яка призводить до аварії контролера js або одного з відповідних адаптерів, деталі помилки надсилаються на сервер. Для контролера js та основних адаптерів цей сервер розташований та працює в Німеччині. Для адаптерів спільноти перевірте файл Github Readme відповідного адаптера для отримання деталей про те, який сервер Sentry використовується.\n\nЯкщо ви хочете вимкнути звіт про помилки, ви можете використовувати команду\n“iobroker plugin disable sentry”\nЦя команда також переконається, що жоден адаптер, який працює на цьому хості, не надсилатиме дані звіту про аварію до вартового.', 'zh-cn': - 'ioBroker希望确保提供最稳定的智能家居系统。\n为此,我们决定在js-controller和适配器中实现自动错误和崩溃报告解决方案。\n\n您的炸弹人的下一个开始将启用此报告!\n\n对于导致js-controller或相关适配器之一崩溃的任何错误,错误详细信息将发送到服务器。对于js-controller和核心适配器,此服务器位于德国并在其中运行。对于社区适配器,请检查受影响的适配器的Github自述文件,以了解使用哪个Sentry服务器的详细信息。\n\n如果要禁用错误报告,可以使用以下命令\n“ iobroker plugin disable sentry”\n此命令还将确保在此主机上运行的任何适配器都不会将崩溃报告数据发送到哨兵。' - } - } + 'ioBroker希望确保提供最稳定的智能家居系统。\n为此,我们决定在js-controller和适配器中实现自动错误和崩溃报告解决方案。\n\n您的炸弹人的下一个开始将启用此报告!\n\n对于导致js-controller或相关适配器之一崩溃的任何错误,错误详细信息将发送到服务器。对于js-controller和核心适配器,此服务器位于德国并在其中运行。对于社区适配器,请检查受影响的适配器的Github自述文件,以了解使用哪个Sentry服务器的详细信息。\n\n如果要禁用错误报告,可以使用以下命令\n“ iobroker plugin disable sentry”\n此命令还将确保在此主机上运行的任何适配器都不会将崩溃报告数据发送到哨兵。', + }, + }, } as const; diff --git a/packages/cli/src/lib/setup/setupBackup.ts b/packages/cli/src/lib/setup/setupBackup.ts index d5179cdbe5..9508074942 100644 --- a/packages/cli/src/lib/setup/setupBackup.ts +++ b/packages/cli/src/lib/setup/setupBackup.ts @@ -259,19 +259,9 @@ export class BackupRestore { async createBackup(name: string, noConfig?: boolean): Promise { if (!name) { const d = new Date(); - name = - d.getFullYear() + - '_' + - ('0' + (d.getMonth() + 1)).slice(-2) + - '_' + - ('0' + d.getDate()).slice(-2) + - '-' + - ('0' + d.getHours()).slice(-2) + - '_' + - ('0' + d.getMinutes()).slice(-2) + - '_' + - ('0' + d.getSeconds()).slice(-2) + - `_backup${tools.appName}`; + name = `${d.getFullYear()}_${`0${d.getMonth() + 1}`.slice(-2)}_${`0${d.getDate()}`.slice(-2)}-${`0${d.getHours()}`.slice( + -2, + )}_${`0${d.getMinutes()}`.slice(-2)}_${`0${d.getSeconds()}`.slice(-2)}_backup${tools.appName}`; } name = name.toString().replace(/\\/g, '/'); @@ -326,9 +316,9 @@ export class BackupRestore { object: row.value, isCustomHostname, hostname, - thisHostNameStartsWith + thisHostNameStartsWith, }); - await objectsFd.write(JSON.stringify(preprocessedValue) + '\n'); + await objectsFd.write(`${JSON.stringify(preprocessedValue)}\n`); } console.log(`host.${hostname} ${res.rows.length || 'no'} objects saved`); @@ -357,7 +347,7 @@ export class BackupRestore { if (obj.from === `system.host.${hostname}`) { obj.from.replace( `system.host.${hostname}`, - `system.host.${this.HOSTNAME_PLACEHOLDER_REPLACE}` + `system.host.${this.HOSTNAME_PLACEHOLDER_REPLACE}`, ); } if (keys[i].startsWith(thisHostNameStartsWith)) { @@ -365,7 +355,7 @@ export class BackupRestore { } } - await statesFd.write(JSON.stringify({ id: keys[i], state: obj }) + '\n'); + await statesFd.write(`${JSON.stringify({ id: keys[i], state: obj })}\n`); } await statesFd.close(); @@ -488,7 +478,7 @@ export class BackupRestore { // if installed as npm if ( fs.existsSync( - path.join(controllerDir, '..', '..', 'node_modules', `${tools.appName.toLowerCase()}.js-controller`) + path.join(controllerDir, '..', '..', 'node_modules', `${tools.appName.toLowerCase()}.js-controller`), ) ) { const p = path.join(controllerDir, '..'); @@ -732,7 +722,10 @@ export class BackupRestore { for await (let line of rlStates) { line = line.replace(this.HOSTNAME_PLACEHOLDER_REGEX, hostname); - const state: { id: string; state: ioBroker.State } = JSON.parse(line); + const state: { + id: string; + state: ioBroker.State; + } = JSON.parse(line); await this._setStateHelper(state.id, state.state); count++; } @@ -787,7 +780,7 @@ export class BackupRestore { controllerDir, restore.config?.system?.hostname || hostname, restore.objects, - force + force, ); if (exitCode) { @@ -848,11 +841,11 @@ export class BackupRestore { console.log('Forced restore - executing setup ...'); try { await execAsync( - `"${process.execPath}" "${path.join(controllerDir, `${tools.appName.toLowerCase()}.js`)}" setup` + `"${process.execPath}" "${path.join(controllerDir, `${tools.appName.toLowerCase()}.js`)}" setup`, ); } catch (e) { console.error( - `Could not execute "setup" command, please ensure "setup" is called before starting ioBroker: ${e.message}` + `Could not execute "setup" command, please ensure "setup" is called before starting ioBroker: ${e.message}`, ); } } @@ -873,7 +866,7 @@ export class BackupRestore { */ private async connectToNewDatabase(config: ioBroker.IoBrokerJson): Promise { console.log( - `host.${this.hostname} Connecting to new DB "${config.states.type}/${config.objects.type}" (can take up to 20s) ...` + `host.${this.hostname} Connecting to new DB "${config.states.type}/${config.objects.type}" (can take up to 20s) ...`, ); await resetDbConnect(); const { objects, states } = await dbConnectAsync(false); @@ -921,7 +914,7 @@ export class BackupRestore { controllerDir: string, backupHostname: string, backupObjects: BackupObject[], - force: boolean + force: boolean, ): void | number { try { const ioPackJson = fs.readJsonSync(path.join(controllerDir, 'io-package.json')); @@ -937,18 +930,17 @@ export class BackupRestore { console.warn('The current version of js-controller differs from the version in the backup.'); console.warn('The js-controller version of the backup can not be restored automatically.'); console.warn( - `To restore the js-controller version of the backup, execute "npm i iobroker.js-controller@${hostObj.value.common.installedVersion} --omit=dev" inside your ioBroker directory` + `To restore the js-controller version of the backup, execute "npm i iobroker.js-controller@${hostObj.value.common.installedVersion} --omit=dev" inside your ioBroker directory`, ); console.warn( - 'If you really want to restore the backup with the current installed js-controller, execute the restore command with the --force flag' + 'If you really want to restore the backup with the current installed js-controller, execute the restore command with the --force flag', ); return EXIT_CODES.CANNOT_RESTORE_BACKUP; - } else { - console.info('The current version of js-controller differs from the version in the backup.'); - console.info('The js-controller version of the backup can not be restored automatically.'); - console.info('Note, that your backup might differ in behavior due to this version change!'); } + console.info('The current version of js-controller differs from the version in the backup.'); + console.info('The js-controller version of the backup can not be restored automatically.'); + console.info('Note, that your backup might differ in behavior due to this version change!'); } } catch { // ignore @@ -969,9 +961,8 @@ export class BackupRestore { } } return result; - } else { - return result; } + return result; } /** @@ -1068,16 +1059,15 @@ export class BackupRestore { console.log('Please specify one of the backup names:'); for (const t in backups) { console.log( - `${backups[t]} or ${backups[t].replace(`_backup${tools.appName}.tar.gz`, '')} or ${t}` + `${backups[t]} or ${backups[t].replace(`_backup${tools.appName}.tar.gz`, '')} or ${t}`, ); } } else { console.log(`No existing backups. Create a backup, using "${tools.appName} backup" first`); } return void this.processExit(EXIT_CODES.INVALID_ARGUMENTS); - } else { - console.log(`host.${this.hostname} Using backup file ${name}`); } + console.log(`host.${this.hostname} Using backup file ${name}`); } name = name.toString().replace(/\\/g, '/'); @@ -1104,7 +1094,7 @@ export class BackupRestore { tar.extract( { file: name, - cwd: this.tmpDir + cwd: this.tmpDir, }, undefined, err => { @@ -1114,7 +1104,7 @@ export class BackupRestore { } if (!fs.existsSync(`${this.tmpDir}/backup/backup.json`)) { console.error( - `host.${this.hostname} Validation failed. Cannot find extracted file from file "${this.tmpDir}/backup/backup.json"` + `host.${this.hostname} Validation failed. Cannot find extracted file from file "${this.tmpDir}/backup/backup.json"`, ); return void this.processExit(EXIT_CODES.CANNOT_EXTRACT_FROM_ZIP); } @@ -1125,7 +1115,7 @@ export class BackupRestore { backupJSON = fs.readJSONSync(`${this.tmpDir}/backup/backup.json`); } catch (err) { console.error( - `host.${this.hostname} Backup corrupted. Backup ${name} does not contain a valid backup.json file: ${err.message}` + `host.${this.hostname} Backup corrupted. Backup ${name} does not contain a valid backup.json file: ${err.message}`, ); this.removeTempBackupDir(); @@ -1138,7 +1128,7 @@ export class BackupRestore { this.removeTempBackupDir(); } catch (e) { console.error( - `host.${this.hostname} Cannot clear temporary backup directory: ${e.message}` + `host.${this.hostname} Cannot clear temporary backup directory: ${e.message}`, ); } return void this.processExit(EXIT_CODES.CANNOT_EXTRACT_FROM_ZIP); @@ -1155,7 +1145,7 @@ export class BackupRestore { console.error(`host.${this.hostname} Backup corrupted: ${err.message}`); return void this.processExit(EXIT_CODES.CANNOT_EXTRACT_FROM_ZIP); } - } + }, ); }); } @@ -1209,7 +1199,7 @@ export class BackupRestore { backups.sort((a, b) => (b > a ? 1 : b === a ? 0 : -1)); if (backups.length) { backups.forEach((backup, i) => - console.log(`${backup} or ${backup.replace(`_backup${tools.appName}.tar.gz`, '')} or ${i}`) + console.log(`${backup} or ${backup.replace(`_backup${tools.appName}.tar.gz`, '')} or ${i}`), ); } else { console.warn('No backups found'); @@ -1234,7 +1224,7 @@ export class BackupRestore { if (backups.length) { console.log('Please specify one of the backup names:'); backups.forEach((backup, i) => - console.log(`${backup} or ${backup.replace(`_backup${tools.appName}.tar.gz`, '')} or ${i}`) + console.log(`${backup} or ${backup.replace(`_backup${tools.appName}.tar.gz`, '')} or ${i}`), ); } } else { @@ -1268,7 +1258,7 @@ export class BackupRestore { try { await tar.extract({ file: name, - cwd: this.tmpDir + cwd: this.tmpDir, }); } catch (e) { console.error(`host.${this.hostname} Cannot extract from file "${name}": ${e.message}`); @@ -1280,7 +1270,7 @@ export class BackupRestore { !(await fs.pathExists(path.join(backupBasePath, 'config.json'))) ) { console.error( - `host.${this.hostname} Cannot find extracted file "${path.join(backupBasePath, 'backup.json')}" or "${path.join(backupBasePath, 'config.json')}"` + `host.${this.hostname} Cannot find extracted file "${path.join(backupBasePath, 'backup.json')}" or "${path.join(backupBasePath, 'config.json')}"`, ); return { exitCode: EXIT_CODES.CANNOT_EXTRACT_FROM_ZIP, objects: this.objects, states: this.states }; } @@ -1289,7 +1279,7 @@ export class BackupRestore { const exitCode = await this._restoreAfterStop({ restartOnFinish: false, force, - dontDeleteAdapters + dontDeleteAdapters, }); this.removeTempBackupDir(); diff --git a/packages/cli/src/lib/setup/setupInstall.ts b/packages/cli/src/lib/setup/setupInstall.ts index 7bcc74a206..0ad6b7f500 100644 --- a/packages/cli/src/lib/setup/setupInstall.ts +++ b/packages/cli/src/lib/setup/setupInstall.ts @@ -26,7 +26,7 @@ import { SYSTEM_ADAPTER_PREFIX } from '@iobroker/js-controller-common-db/constan import { createRequire } from 'node:module'; // eslint-disable-next-line unicorn/prefer-module -const require = createRequire(import.meta.url || 'file://' + __filename); +const require = createRequire(import.meta.url || `file://${__filename}`); const hostname = tools.getHostName(); const osPlatform = process.platform; @@ -133,10 +133,10 @@ export class Install { for (const instance of instances) { const updatedObj = { common: { - enabled + enabled, }, from: `system.host.${hostname}.cli`, - ts + ts, }; console.log(`host.${hostname} Adapter "${instance._id}" is ${enabled ? 'started' : 'stopped.'}`); // @ts-expect-error should be fixed with #1917 @@ -157,7 +157,7 @@ export class Install { repoUrl: string | undefined | Record, packetName: string, options?: CLIDownloadPacketOptions, - stoppedList?: ioBroker.InstanceObject[] + stoppedList?: ioBroker.InstanceObject[], ): Promise { let url; if (!options || typeof options !== 'object') { @@ -221,7 +221,7 @@ export class Install { url && packetName === 'js-controller' && fs.pathExistsSync( - `${tools.getControllerDir()}/../../node_modules/${tools.appName.toLowerCase()}.js-controller` + `${tools.getControllerDir()}/../../node_modules/${tools.appName.toLowerCase()}.js-controller`, ) ) { url = null; @@ -243,7 +243,7 @@ export class Install { await this._npmInstallWithCheck( `${tools.appName.toLowerCase()}.${packetName}${version ? `@${version}` : ''}`, options, - debug + debug, ); return { packetName, stoppedList }; @@ -265,18 +265,18 @@ export class Install { } else if (!url) { // Adapter console.warn( - `host.${hostname} Adapter "${packetName}" can be updated only together with ${tools.appName.toLowerCase()}.js-controller` + `host.${hostname} Adapter "${packetName}" can be updated only together with ${tools.appName.toLowerCase()}.js-controller`, ); return { packetName, stoppedList }; } } console.error( - `host.${hostname} Unknown packet name ${packetName}. Please install packages from outside the repository using "${tools.appNameLowerCase} url "!` + `host.${hostname} Unknown packet name ${packetName}. Please install packages from outside the repository using "${tools.appNameLowerCase} url "!`, ); throw new IoBrokerError({ code: EXIT_CODES.UNKNOWN_PACKET_NAME, - message: `Unknown packetName ${packetName}. Please install packages from outside the repository using npm!` + message: `Unknown packetName ${packetName}. Please install packages from outside the repository using npm!`, }); } @@ -290,7 +290,7 @@ export class Install { private async _npmInstallWithCheck( npmUrl: string, options: CLIDownloadPacketOptions, - debug: boolean + debug: boolean, ): Promise { // Get npm version try { @@ -310,10 +310,10 @@ export class Install { console.error('Aborting install because the npm version could not be checked!'); console.error('Please check that npm is installed correctly.'); console.error( - `Use "npm install -g npm@${RECOMMENDED_NPM_VERSION}" or "npm install -g npm@latest" to install a supported version.` + `Use "npm install -g npm@${RECOMMENDED_NPM_VERSION}" or "npm install -g npm@latest" to install a supported version.`, ); console.error( - 'You need to make sure to repeat this step after installing an update to NodeJS and/or npm' + 'You need to make sure to repeat this step after installing an update to NodeJS and/or npm', ); console.error('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'); return this.processExit(EXIT_CODES.INVALID_NPM_VERSION); @@ -321,11 +321,11 @@ export class Install { console.error('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'); console.error('NPM 5 is only supported starting with version 5.7.1!'); console.error( - `Please use "npm install -g npm@${RECOMMENDED_NPM_VERSION}" to upgrade npm to ${RECOMMENDED_NPM_VERSION}.x or ` + `Please use "npm install -g npm@${RECOMMENDED_NPM_VERSION}" to upgrade npm to ${RECOMMENDED_NPM_VERSION}.x or `, ); console.error('use "npm install -g npm@latest" to install a supported version of npm!'); console.error( - 'You need to make sure to repeat this step after installing an update to NodeJS and/or npm' + 'You need to make sure to repeat this step after installing an update to NodeJS and/or npm', ); console.error('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'); return this.processExit(EXIT_CODES.INVALID_NPM_VERSION); @@ -394,7 +394,7 @@ export class Install { const result = await tools.installNodeModule(npmUrl, { debug: !!debug, - unsafePerm: !!options.unsafePerm + unsafePerm: !!options.unsafePerm, }); // code 1 is sometimes a real error and sometimes a strange error, where everything is installed but still the error @@ -438,15 +438,14 @@ export class Install { // command succeeded return { _url: npmUrl, installDir: path.dirname(installDir) }; - } else { - if (!isRetry && result.stderr.includes('ENOTEMPTY')) { - return this.handleNpmNotEmptyError({ npmUrl, options, debug, result }); - } - - console.error(result.stderr); - console.error(`host.${hostname} Cannot install ${npmUrl}: ${result.exitCode}`); - return this.processExit(EXIT_CODES.CANNOT_INSTALL_NPM_PACKET); } + if (!isRetry && result.stderr.includes('ENOTEMPTY')) { + return this.handleNpmNotEmptyError({ npmUrl, options, debug, result }); + } + + console.error(result.stderr); + console.error(`host.${hostname} Cannot install ${npmUrl}: ${result.exitCode}`); + return this.processExit(EXIT_CODES.CANNOT_INSTALL_NPM_PACKET); } /** @@ -455,7 +454,7 @@ export class Install { * @param notEmptyErrorOptions options of package to install */ private handleNpmNotEmptyError( - notEmptyErrorOptions: NotEmptyErrorOptions + notEmptyErrorOptions: NotEmptyErrorOptions, ): Promise | void { const { debug, npmUrl, options, result } = notEmptyErrorOptions; @@ -505,7 +504,7 @@ export class Install { private async _checkDependencies( deps: Dependencies, globalDeps: Dependencies, - _options: Record + _options: Record, ): Promise { if (!deps && !globalDeps) { return; @@ -520,7 +519,7 @@ export class Install { // Get all installed adapters const objs = await this.objects.getObjectViewAsync('system', 'instance', { startkey: SYSTEM_ADAPTER_PREFIX, - endkey: `${SYSTEM_ADAPTER_PREFIX}\u9999` + endkey: `${SYSTEM_ADAPTER_PREFIX}\u9999`, }); if (objs.rows.length) { @@ -534,12 +533,11 @@ export class Install { const packJson = fs.readJSONSync(`${tools.getControllerDir()}/package.json`); if (!semver.satisfies(packJson.version, version, { includePrerelease: true })) { console.error( - `host.${hostname} Invalid version of "${dName}". Installed "${packJson.version}", required "${version}"` + `host.${hostname} Invalid version of "${dName}". Installed "${packJson.version}", required "${version}"`, ); return this.processExit(EXIT_CODES.INVALID_DEPENDENCY_VERSION); - } else { - isFound = true; } + isFound = true; } else { isFound = true; } @@ -558,7 +556,7 @@ export class Install { obj => obj.value.common && obj.value.common.name === dName && - obj.value.common.host === hostname + obj.value.common.host === hostname, ); if (locInstances.length === 0) { console.error(`host.${hostname} Required dependency "${dName}" not found on this host.`); @@ -570,32 +568,30 @@ export class Install { const instanceVersion = instance.value.common.version; if ( !semver.satisfies(instanceVersion, deps[dName], { - includePrerelease: true + includePrerelease: true, }) ) { console.error( - `host.${hostname} Invalid version of "${dName}". Installed "${instanceVersion}", required "${deps[dName]}"` + `host.${hostname} Invalid version of "${dName}". Installed "${instanceVersion}", required "${deps[dName]}"`, ); return this.processExit(EXIT_CODES.INVALID_DEPENDENCY_VERSION); - } else { - isFound = true; } + isFound = true; } for (const instance of gInstances) { const instanceVersion = instance.value.common.version; if ( !semver.satisfies(instanceVersion, globalDeps[dName], { - includePrerelease: true + includePrerelease: true, }) ) { console.error( - `host.${hostname} Invalid version of "${dName}". Installed "${instanceVersion}", required "${globalDeps[dName]}"` + `host.${hostname} Invalid version of "${dName}". Installed "${instanceVersion}", required "${globalDeps[dName]}"`, ); return this.processExit(EXIT_CODES.INVALID_DEPENDENCY_VERSION); - } else { - isFound = true; } + isFound = true; } } @@ -638,7 +634,7 @@ export class Install { await this._checkDependencies( adapterConf.common.dependencies, adapterConf.common.globalDependencies, - this.params + this.params, ); adapterConf.common.installedVersion = adapterConf.common.version; @@ -650,7 +646,7 @@ export class Install { _id: `system.adapter.${adapterConf.common.name}`, type: 'adapter', common: adapterConf.common, - native: adapterConf.native + native: adapterConf.native, }); if (objs?.length) { @@ -712,14 +708,14 @@ export class Install { if (adapterConf.common && adapterConf.common.os) { if (typeof adapterConf.common.os === 'string' && adapterConf.common.os !== osPlatform) { console.error( - `host.${hostname} Adapter does not support current os. Required ${adapterConf.common.os}. Actual platform: ${osPlatform}` + `host.${hostname} Adapter does not support current os. Required ${adapterConf.common.os}. Actual platform: ${osPlatform}`, ); return this.processExit(EXIT_CODES.INVALID_OS); } else if (Array.isArray(adapterConf.common.os) && !adapterConf.common.os.includes(osPlatform as any)) { console.error( `host.${hostname} Adapter does not support current os. Required one of ${adapterConf.common.os.join( - ', ' - )}. Actual platform: ${osPlatform}` + ', ', + )}. Actual platform: ${osPlatform}`, ); return this.processExit(EXIT_CODES.INVALID_OS); } @@ -738,7 +734,7 @@ export class Install { if (engineVersion) { if (!semver.satisfies(process.version.replace(/^v/, ''), engineVersion)) { console.error( - `host.${hostname} Adapter does not support current nodejs version. Required ${engineVersion}. Actual version: ${process.version}` + `host.${hostname} Adapter does not support current nodejs version. Required ${engineVersion}. Actual version: ${process.version}`, ); return this.processExit(EXIT_CODES.INVALID_NODE_VERSION); } @@ -834,7 +830,7 @@ export class Install { const res = await this.objects.getObjectViewAsync('system', 'instance', { startkey: `${SYSTEM_ADAPTER_PREFIX}${adapter}.`, - endkey: `${SYSTEM_ADAPTER_PREFIX}${adapter}.\u9999` + endkey: `${SYSTEM_ADAPTER_PREFIX}${adapter}.\u9999`, }); const systemConfig = await this.objects.getObject('system.config'); const defaultLogLevel = systemConfig?.common?.defaultLogLevel; @@ -894,7 +890,7 @@ export class Install { ...obj, common: { ...obj.common, host: options.host }, type: 'instance', - _id: `system.adapter.${adapter}.${instance}` + _id: `system.adapter.${adapter}.${instance}`, }; if (instanceObj.common.news) { @@ -944,16 +940,16 @@ export class Install { _id: `system.adapter.${adapter}.upload`, type: 'state', common: { - name: adapter + '.upload', + name: `${adapter}.upload`, type: 'number', read: true, write: false, role: 'indicator.state', unit: '%', def: 0, - desc: 'Upload process indicator' + desc: 'Upload process indicator', }, - native: {} + native: {}, }); } @@ -984,8 +980,8 @@ export class Install { lang => (instanceObject.common.name[lang] = instanceObject.common.name[lang].replace( '%INSTANCE%', - instance - )) + instance, + )), ); } else { instanceObject.common.name = instanceObject.common.name.replace('%INSTANCE%', instance); @@ -998,8 +994,8 @@ export class Install { lang => (instanceObject.common.desc[lang] = instanceObject.common.desc[lang].replace( '%INSTANCE%', - instance - )) + instance, + )), ); } else { instanceObject.common.desc = instanceObject.common.desc.replace('%INSTANCE%', instance); @@ -1010,7 +1006,7 @@ export class Install { objs.push(instanceObject); if (instanceObject.common && instanceObject.common.def !== undefined) { defStates.set(instanceObject._id, { - val: instanceObject.common.def + val: instanceObject.common.def, }); } } @@ -1069,7 +1065,7 @@ export class Install { knownObjIDs: string[], notDeleted: string[], adapter: string, - instance?: number + instance?: number, ): Promise { if (!notDeleted) { notDeleted = []; @@ -1087,7 +1083,7 @@ export class Install { try { const doc = await this.objects.getObjectView('system', 'instance', { startkey: `system.adapter.${adapter}${instance !== undefined ? `.${instance}` : ''}`, - endkey: `system.adapter.${adapter}${instance !== undefined ? `.${instance}` : ''}\u9999` + endkey: `system.adapter.${adapter}${instance !== undefined ? `.${instance}` : ''}\u9999`, }); // add non-duplicates to the list (if instance not given -> only for this host) @@ -1100,12 +1096,11 @@ export class Install { .filter(row => { if (instance !== undefined || !row.value.common?.host || row.value.common?.host === hostname) { return true; - } else { - if (!notDeleted.includes(row.value._id)) { - notDeleted.push(row.value._id); - } - return false; } + if (!notDeleted.includes(row.value._id)) { + notDeleted.push(row.value._id); + } + return false; }) .map(row => row.value._id) .filter(id => !knownObjIDs.includes(id)); @@ -1116,7 +1111,7 @@ export class Install { console.log( `host.${hostname} Counted ${newObjIDs.length} instances of ${adapter}${ instance !== undefined ? `.${instance}` : '' - }` + }`, ); } } catch (err) { @@ -1137,7 +1132,7 @@ export class Install { try { const doc = await this.objects.getObjectViewAsync('system', 'meta', { startkey: `${adapter}.`, - endkey: `${adapter}.\u9999` + endkey: `${adapter}.\u9999`, }); if (doc.rows.length) { @@ -1166,7 +1161,7 @@ export class Install { private async _enumerateAdapters( knownObjIDs: string[], - adapter: string + adapter: string, ): Promise { // This does not really enumerate the adapters, but finds the adapter object // if it exists and adds it to the list @@ -1176,7 +1171,7 @@ export class Install { if (obj.common && obj.common.nondeletable) { // If the adapter is non-deletable, mark it as not installed console.log( - `host.${hostname} Adapter ${adapter} cannot be deleted completely, because it is marked non-deletable.` + `host.${hostname} Adapter ${adapter} cannot be deleted completely, because it is marked non-deletable.`, ); obj.common.installedVersion = ''; obj.from = `system.host.${hostname}.cli`; @@ -1184,13 +1179,12 @@ export class Install { await this.objects.setObjectAsync(obj._id, obj); return EXIT_CODES.CANNOT_DELETE_NON_DELETABLE; - } else { - // The adapter is deletable, remember it for deletion - knownObjIDs.push(obj._id); - console.log(`host.${hostname} Counted 1 adapter for ${adapter}`); - - return EXIT_CODES.NO_ERROR; } + // The adapter is deletable, remember it for deletion + knownObjIDs.push(obj._id); + console.log(`host.${hostname} Counted 1 adapter for ${adapter}`); + + return EXIT_CODES.NO_ERROR; } } catch (err) { console.error(`host.${hostname} Cannot enumerate adapters: ${err.message}`); @@ -1210,7 +1204,7 @@ export class Install { try { const doc = await this.objects.getObjectViewAsync('system', 'device', { startkey: `${adapter}${instance !== undefined ? `.${instance}` : ''}`, - endkey: `${adapter}${instance !== undefined ? `.${instance}` : ''}\u9999` + endkey: `${adapter}${instance !== undefined ? `.${instance}` : ''}\u9999`, }); if (doc.rows.length) { @@ -1226,7 +1220,7 @@ export class Install { console.log( `host.${hostname} Counted ${newObjs.length} devices of ${adapter}${ instance !== undefined ? `.${instance}` : '' - }` + }`, ); } } @@ -1249,7 +1243,7 @@ export class Install { try { const doc = await this.objects.getObjectViewAsync('system', 'channel', { startkey: `${adapter}${instance !== undefined ? `.${instance}` : ''}`, - endkey: `${adapter}${instance !== undefined ? `.${instance}` : ''}\u9999` + endkey: `${adapter}${instance !== undefined ? `.${instance}` : ''}\u9999`, }); if (doc.rows.length) { @@ -1265,7 +1259,7 @@ export class Install { console.log( `host.${hostname} Counted ${newObjs.length} channels of ${adapter}${ instance !== undefined ? `.${instance}` : '' - }` + }`, ); } } @@ -1286,13 +1280,13 @@ export class Install { async _enumerateAdapterStateObjects(knownObjIDs: string[], adapter: string, instance?: number): Promise { const adapterRegex = new RegExp(`^${adapter}${instance !== undefined ? `\\.${instance}` : ''}\\.`); const sysAdapterRegex = new RegExp( - `^system\\.adapter\\.${adapter}${instance !== undefined ? `\\.${instance}` : ''}\\.` + `^system\\.adapter\\.${adapter}${instance !== undefined ? `\\.${instance}` : ''}\\.`, ); try { let doc = await this.objects.getObjectViewAsync('system', 'state', { startkey: `${adapter}${instance !== undefined ? `.${instance}` : ''}`, - endkey: `${adapter}${instance !== undefined ? `.${instance}` : ''}\u9999` + endkey: `${adapter}${instance !== undefined ? `.${instance}` : ''}\u9999`, }); if (doc.rows.length) { @@ -1309,14 +1303,14 @@ export class Install { console.log( `host.${hostname} Counted ${newObjs.length} states of ${adapter}${ instance !== undefined ? `.${instance}` : '' - }` + }`, ); } } doc = await this.objects.getObjectViewAsync('system', 'state', { startkey: `system.adapter.${adapter}${instance !== undefined ? `.${instance}` : ''}`, - endkey: `system.adapter.${adapter}${instance !== undefined ? `.${instance}` : ''}\u9999` + endkey: `system.adapter.${adapter}${instance !== undefined ? `.${instance}` : ''}\u9999`, }); if (doc.rows.length) { @@ -1333,7 +1327,7 @@ export class Install { console.log( `host.${hostname} Counted ${newObjs.length} states of system.adapter.${adapter}${ instance !== undefined ? `.${instance}` : '' - }` + }`, ); } } @@ -1354,7 +1348,7 @@ export class Install { private async _enumerateAdapterDocs(knownObjIDs: string[], adapter: string, instance?: number): Promise { const adapterRegex = new RegExp(`^${adapter}${instance !== undefined ? `\\.${instance}` : ''}\\.`); const sysAdapterRegex = new RegExp( - `^system\\.adapter\\.${adapter}${instance !== undefined ? `\\.${instance}` : ''}\\.` + `^system\\.adapter\\.${adapter}${instance !== undefined ? `\\.${instance}` : ''}\\.`, ); if (instance === undefined) { @@ -1375,7 +1369,7 @@ export class Install { console.log( `host.${hostname} Counted ${newObjs.length} objects of ${adapter}${ instance !== undefined ? `.${instance}` : '' - }` + }`, ); } } @@ -1395,11 +1389,11 @@ export class Install { */ async _enumerateAdapterStates(knownStateIDs: string[], adapter: string, instance?: number): Promise { for (const pattern of [ - `io.${adapter}.${instance !== undefined ? instance + '.' : ''}*`, - `messagebox.${adapter}.${instance !== undefined ? instance + '.' : ''}*`, - `log.${adapter}.${instance !== undefined ? instance + '.' : ''}*`, - `${adapter}.${instance !== undefined ? instance + '.' : ''}*`, - `system.adapter.${adapter}.${instance !== undefined ? instance + '.' : ''}*` + `io.${adapter}.${instance !== undefined ? `${instance}.` : ''}*`, + `messagebox.${adapter}.${instance !== undefined ? `${instance}.` : ''}*`, + `log.${adapter}.${instance !== undefined ? `${instance}.` : ''}*`, + `${adapter}.${instance !== undefined ? `${instance}.` : ''}*`, + `system.adapter.${adapter}.${instance !== undefined ? `${instance}.` : ''}*`, ]) { try { const ids = await this.states.getKeys(pattern); @@ -1434,7 +1428,7 @@ export class Install { { id: 'vis-2', name: `widgets/${adapter}.html` }, { id: adapter }, { id: `${adapter}.admin` }, - ...metaFilesToDelete.map(id => ({ id })) + ...metaFilesToDelete.map(id => ({ id })), ]; for (const file of filesToDelete) { @@ -1606,7 +1600,7 @@ export class Install { if (dependentInstance) { console.log( - `Cannot remove adapter "${adapter}", because instance "${dependentInstance}" depends on it!` + `Cannot remove adapter "${adapter}", because instance "${dependentInstance}" depends on it!`, ); return EXIT_CODES.CANNOT_DELETE_DEPENDENCY; } @@ -1653,7 +1647,7 @@ export class Install { if (dependentInstance) { console.log( - `Cannot remove instance "${adapter}.${instance}", because instance "${dependentInstance}" depends on it!` + `Cannot remove instance "${adapter}.${instance}", because instance "${dependentInstance}" depends on it!`, ); return EXIT_CODES.CANNOT_DELETE_DEPENDENCY; } @@ -1685,7 +1679,7 @@ export class Install { const packJson = fs.readJSONSync(path.join(tools.getRootDir(), 'package.json')); const regex = new RegExp( `^@${tools.appNameLowerCase}-${adapter}.${instance !== undefined ? instance : '\\d+'}\\/.*`, - 'g' + 'g', ); for (const packageName of Object.keys(packJson.dependencies)) { @@ -1705,7 +1699,7 @@ export class Install { // get all objects that have a custom attribute const res = await this.objects.getObjectViewAsync('system', 'custom', { startkey: '', - endkey: '\u9999' + endkey: '\u9999', }); if (res && res.rows) { @@ -1764,20 +1758,20 @@ export class Install { headers: { 'User-Agent': 'ioBroker Adapter install', // @ts-expect-error should be okay... - validateStatus: status => status === 200 - } + validateStatus: status => status === 200, + }, }); if (result.data && Array.isArray(result.data) && result.data.length >= 1 && result.data[0].sha) { url = `${user}/${repo}#${result.data[0].sha}`; } else { console.log( - `Info: Can not get current GitHub commit, only remember that we installed from GitHub.` + `Info: Can not get current GitHub commit, only remember that we installed from GitHub.`, ); url = `${user}/${repo}`; } } catch (err) { console.log( - `Info: Can not get current GitHub commit, only remember that we installed from GitHub: ${err.message}` + `Info: Can not get current GitHub commit, only remember that we installed from GitHub: ${err.message}`, ); // Install using the npm GitHub URL syntax `npm i user/repo_name`: url = `${user}/${repo}`; @@ -1827,7 +1821,7 @@ export class Install { } const options = { - packetName: name + packetName: name, }; /** list of stopped instances for windows */ @@ -1864,7 +1858,7 @@ export class Install { // lets get all instances const doc = await this.objects.getObjectViewAsync('system', 'instance', { startkey: 'system.adapter.', - endkey: 'system.adapter.\u9999' + endkey: 'system.adapter.\u9999', }); let scopedHostname: string | undefined; @@ -1873,7 +1867,7 @@ export class Install { // we need to respect host relative to the instance [scopedHostname] = doc.rows .filter(row => row.id === `system.adapter.${adapter}.${instance}`) - .map(row => row.value!.common.host); + .map(row => row.value.common.host); } // fallback is this host @@ -1892,19 +1886,18 @@ export class Install { if (instance === undefined) { // this adapter needs us locally and all instances should be deleted return `${row.value.common.name}.${row.id.split('.').pop()}`; + } + // check if another instance of us exists on this host + if (this._checkDependencyFulfilledThisHost(adapter, instance, doc.rows, scopedHostname)) { + // there are other instances of our adapter - ok + break; } else { - // check if another instance of us exists on this host - if (this._checkDependencyFulfilledThisHost(adapter, instance, doc.rows, scopedHostname)) { - // there are other instances of our adapter - ok - break; - } else { - return `${row.value.common.name}.${row.id.split('.').pop()}`; - } + return `${row.value.common.name}.${row.id.split('.').pop()}`; } } } - const globalDeps = tools.parseDependencies(row.value!.common.globalDependencies); + const globalDeps = tools.parseDependencies(row.value.common.globalDependencies); for (const globalDep of Object.keys(globalDeps)) { if (globalDep === adapter) { @@ -1913,7 +1906,7 @@ export class Install { if (this._checkDependencyFulfilledForeignHosts(adapter, doc.rows, scopedHostname)) { break; } else { - return row.value!.common.name; + return row.value.common.name; } } else if ( this._checkDependencyFulfilledForeignHosts(adapter, doc.rows, scopedHostname) || @@ -1922,7 +1915,7 @@ export class Install { // another instance of our adapter is on another host or on ours, no need to search further break; } else { - return row.value!.common.name; + return row.value.common.name; } } } @@ -1943,7 +1936,7 @@ export class Install { private _checkDependencyFulfilledForeignHosts( adapter: string, instancesRows: ioBroker.GetObjectViewItem[], - scopedHostname: string + scopedHostname: string, ): boolean { for (const row of instancesRows) { if (row.value && row.value.common.name === adapter && row.value.common.host !== scopedHostname) { @@ -1967,7 +1960,7 @@ export class Install { adapter: string, instance: number, instancesRows: ioBroker.GetObjectViewItem[], - scopedHostname: string + scopedHostname: string, ): boolean { for (const row of instancesRows) { if ( @@ -1992,7 +1985,7 @@ export class Install { const instances = []; const doc = await this.objects.getObjectListAsync({ startkey: `system.adapter.${adapter}.`, - endkey: `system.adapter.${adapter}.\u9999` + endkey: `system.adapter.${adapter}.\u9999`, }); if (doc) { diff --git a/packages/cli/src/lib/setup/setupLicense.ts b/packages/cli/src/lib/setup/setupLicense.ts index 4552d93bcc..a76b7d9026 100644 --- a/packages/cli/src/lib/setup/setupLicense.ts +++ b/packages/cli/src/lib/setup/setupLicense.ts @@ -40,9 +40,9 @@ export class License { const arr = await this.objects.getObjectListAsync( { startkey: `system.adapter.${adapter}.`, - endkey: `system.adapter.${adapter}.\u9999` + endkey: `system.adapter.${adapter}.\u9999`, }, - { checked: true } + { checked: true }, ); let updated = 0; diff --git a/packages/cli/src/lib/setup/setupList.ts b/packages/cli/src/lib/setup/setupList.ts index f5a93c17ad..67507f89a1 100644 --- a/packages/cli/src/lib/setup/setupList.ts +++ b/packages/cli/src/lib/setup/setupList.ts @@ -130,7 +130,7 @@ export class List { const ts = new Date(file.modifiedAt); time = ts.toISOString(); time = time.replace('T', ' '); - time = time.substring(0, 16) + ' '; + time = `${time.substring(0, 16)} `; } text += time.padEnd(17); @@ -146,7 +146,7 @@ export class List { group = group.substring(13); text += ` ${group.padStart(14)}`; } else { - text += (file.isDir ? 'd' : '-') + '?????????' + new Array(31).join(' '); + text += `${file.isDir ? 'd' : '-'}?????????${new Array(31).join(' ')}`; } const size = file.stats && file.stats.size ? file.stats.size.toString() : ''; @@ -191,7 +191,7 @@ export class List { adapter: string, path: string | null | undefined, allFiles?: File[] | ((allFiles: File[]) => void), - callback?: (allFiles: File[]) => void + callback?: (allFiles: File[]) => void, ): void { if (typeof path === 'function') { callback = path; @@ -259,11 +259,11 @@ export class List { sortFiles(a: File, b: File): number { let a1 = a.path + a.file.file; if (a1[0] !== '/') { - a1 = '/' + a1; + a1 = `/${a1}`; } let b1 = b.path + b.file.file; if (b1[0] !== '/') { - b1 = '/' + b1; + b1 = `/${b1}`; } return a1.localeCompare(b1); } @@ -301,7 +301,7 @@ export class List { lines: IdValueObject[], flags: FlagObject, cb: (res: any[]) => void, - _result?: any[] + _result?: any[], ): void { const result = _result || []; if (!lines || !lines.length) { @@ -338,7 +338,7 @@ export class List { name = name[lang] || name.en; } - if (!reg || reg.test(obj.value._id) || (name && reg.test(name as string))) { + if (!reg || reg.test(obj.value._id) || (name && reg.test(name))) { if (obj.value.type) { const id = obj.value._id; const type = obj.value.type; @@ -381,7 +381,7 @@ export class List { console.log( `${id.padEnd(39)}: from [${from.padEnd(29)}] (${type.padEnd(9)}) ${ state.ack ? ' ack' : 'not ack' - } ${JSON.stringify(state.val)}` + } ${JSON.stringify(state.val)}`, ); } this.processExit(); @@ -398,7 +398,7 @@ export class List { this.processExit(); return; } - const reg = filter ? new RegExp(tools.pattern2RegEx('system.adapter.' + filter)) : null; + const reg = filter ? new RegExp(tools.pattern2RegEx(`system.adapter.${filter}`)) : null; const adapterList: AdapterListEntry[] = []; for (const obj of objs.rows) { if (obj.value.type !== 'adapter') { @@ -420,14 +420,14 @@ export class List { id, name, version: obj.value.common.version, - 'upgrade policy': obj.value.common.automaticUpgrade ?? 'none' + 'upgrade policy': obj.value.common.automaticUpgrade ?? 'none', }); } } console.table(adapterList); this.processExit(); - } + }, ); break; @@ -497,15 +497,15 @@ export class List { }`; if (this.config.system && this.config.system.compact && row.value.common.compact) { - text += - ', compact ' + - (row.value.common.compact && row.value.common.runAsCompactMode + text += `, compact ${ + row.value.common.compact && row.value.common.runAsCompactMode ? `enabled (group ${ row.value.common.compactGroup !== undefined ? row.value.common.compactGroup : 1 })` - : 'disabled'); + : 'disabled' + }`; } if (row.value.native && row.value.native.port) { @@ -528,7 +528,7 @@ export class List { console.log('\n+ instance is alive'); this.processExit(); }); - } + }, ); break; @@ -545,13 +545,13 @@ export class List { return; } const reg = filter - ? new RegExp(tools.pattern2RegEx('system.user.' + filter)) + ? new RegExp(tools.pattern2RegEx(`system.user.${filter}`)) : null; console.log( - ' ID | Name | Active | Groups' + ' ID | Name | Active | Groups', ); console.log( - '---------------------------------------+-------------+----------+--------------' + '---------------------------------------+-------------+----------+--------------', ); for (const obj of objs.rows) { if (obj.value.type !== 'user') { @@ -565,7 +565,7 @@ export class List { reg.test( tools.isObject(obj.value.common.name) ? obj.value.common.name[lang] || obj.value.common.name.en - : obj.value.common.name + : obj.value.common.name, )) ) { const id = obj.value._id; @@ -593,9 +593,9 @@ export class List { } } this.processExit(); - } + }, ); - } + }, ); break; @@ -608,16 +608,16 @@ export class List { this.processExit(); return; } - const reg = filter ? new RegExp(tools.pattern2RegEx('system.group.' + filter)) : null; + const reg = filter ? new RegExp(tools.pattern2RegEx(`system.group.${filter}`)) : null; console.log(''); console.log( - ' system.group | object | state | file | user | others | users' + ' system.group | object | state | file | user | others | users', ); console.log( - ' | l r w d | l r w d | l r w c d | w c d | |' + ' | l r w d | l r w d | l r w c d | w c d | |', ); console.log( - '--------------------+---------+---------+-----------+-------+------------------------+---------' + '--------------------+---------+---------+-----------+-------+------------------------+---------', ); for (const obj of objs.rows) { if (obj.value.type !== 'group') { @@ -630,7 +630,7 @@ export class List { reg.test( tools.isObject(obj.value.common.name) ? obj.value.common.name[lang] || obj.value.common.name.en - : obj.value.common.name + : obj.value.common.name, )) ) { const id = obj.value._id.substring(13); @@ -641,74 +641,74 @@ export class List { write: true, delete: true, create: true, - list: true + list: true, }, object: { read: true, write: true, create: true, delete: true, - list: true + list: true, }, state: { read: true, write: true, delete: true, create: true, - list: true + list: true, }, users: { write: true, create: true, delete: true, list: true, - read: true + read: true, }, other: { execute: true, http: true, - sendto: true - } + sendto: true, + }, }; } let text = id.padEnd(19); text += ' | '; if (obj.value.common.acl?.object) { - text += (obj.value.common.acl.object.list ? '+' : '-') + ' '; - text += (obj.value.common.acl.object.read ? '+' : '-') + ' '; - text += (obj.value.common.acl.object.write ? '+' : '-') + ' '; - text += (obj.value.common.acl.object.delete ? '+' : '-') + ' '; + text += `${obj.value.common.acl.object.list ? '+' : '-'} `; + text += `${obj.value.common.acl.object.read ? '+' : '-'} `; + text += `${obj.value.common.acl.object.write ? '+' : '-'} `; + text += `${obj.value.common.acl.object.delete ? '+' : '-'} `; text += '|'; } else { text += ' |'; } if (obj.value.common.acl?.state) { text += ' '; - text += (obj.value.common.acl.state.list ? '+' : '-') + ' '; - text += (obj.value.common.acl.state.read ? '+' : '-') + ' '; - text += (obj.value.common.acl.state.write ? '+' : '-') + ' '; - text += (obj.value.common.acl.state.delete ? '+' : '-') + ' '; + text += `${obj.value.common.acl.state.list ? '+' : '-'} `; + text += `${obj.value.common.acl.state.read ? '+' : '-'} `; + text += `${obj.value.common.acl.state.write ? '+' : '-'} `; + text += `${obj.value.common.acl.state.delete ? '+' : '-'} `; text += '|'; } else { text += ' |'; } if (obj.value.common.acl?.file) { text += ' '; - text += (obj.value.common.acl.file.list ? '+' : '-') + ' '; - text += (obj.value.common.acl.file.read ? '+' : '-') + ' '; - text += (obj.value.common.acl.file.write ? '+' : '-') + ' '; - text += (obj.value.common.acl.file.create ? '+' : '-') + ' '; - text += (obj.value.common.acl.file.delete ? '+' : '-') + ' '; + text += `${obj.value.common.acl.file.list ? '+' : '-'} `; + text += `${obj.value.common.acl.file.read ? '+' : '-'} `; + text += `${obj.value.common.acl.file.write ? '+' : '-'} `; + text += `${obj.value.common.acl.file.create ? '+' : '-'} `; + text += `${obj.value.common.acl.file.delete ? '+' : '-'} `; text += '|'; } else { text += ' |'; } if (obj.value.common.acl?.users) { text += ' '; - text += (obj.value.common.acl.users.write ? '+' : '-') + ' '; - text += (obj.value.common.acl.users.create ? '+' : '-') + ' '; - text += (obj.value.common.acl.users.delete ? '+' : '-') + ' '; + text += `${obj.value.common.acl.users.write ? '+' : '-'} `; + text += `${obj.value.common.acl.users.create ? '+' : '-'} `; + text += `${obj.value.common.acl.users.delete ? '+' : '-'} `; text += '|'; } else { text += ' |'; @@ -717,18 +717,18 @@ export class List { text += ' '; let others = ''; for (const [r, otherPerm] of Object.entries(obj.value.common.acl.other)) { - others += r + (otherPerm ? '+' : '-') + ' '; + others += `${r + (otherPerm ? '+' : '-')} `; } text += `${others.padEnd(22)}|`; } else { - text += new Array(25).join(' ') + '|'; + text += `${new Array(25).join(' ')}|`; } if (obj.value.common.members) { for (let m = 0; m < obj.value.common.members.length; m++) { obj.value.common.members[m] = obj.value.common.members[m].substring( - 12 + 12, ) as ioBroker.ObjectIDs.User; } text += ` ${obj.value.common.members.join(', ')}`; @@ -738,11 +738,11 @@ export class List { } console.log( - '--------------------+---------+---------+-----------+-------+------------------------+---------' + '--------------------+---------+---------+-----------+-------+------------------------+---------', ); console.log('Legend: (l)ist, (r)ead, (w)rite, (c)reate, (d)elete'); this.processExit(); - } + }, ); break; @@ -767,7 +767,7 @@ export class List { } const reg = filter - ? new RegExp(tools.pattern2RegEx('system.host.' + filter)) + ? new RegExp(tools.pattern2RegEx(`system.host.${filter}`)) : null; for (const obj of objs.rows) { @@ -804,9 +804,9 @@ export class List { uptime = '-'; } const text = `${id.padEnd( - 19 + 19, )} ${name} (version: ${version}, hostname: ${hostname.padEnd( - 14 + 14, )}, ${alive}, uptime: ${uptime})`; // todo console.log(text); @@ -816,7 +816,7 @@ export class List { this.processExit(); }); }); - } + }, ); break; @@ -840,13 +840,13 @@ export class List { if (!reg || reg.test(obj.value._id) || (name && reg.test(name))) { console.log( - '\n=====================================================================================' + '\n=====================================================================================', ); const id = obj.value._id.substring(5); console.log(`${id.padEnd(19)}(${name})`); console.log( - '-------------------------------------------------------------------------------------' + '-------------------------------------------------------------------------------------', ); if (obj.value.common.members) { @@ -881,7 +881,7 @@ export class List { adapter && row.value._id !== names[0] && !row.value._id.startsWith(`${names[0]}.`) - ) + ), ) .map(row => row.value._id); diff --git a/packages/cli/src/lib/setup/setupMultihost.ts b/packages/cli/src/lib/setup/setupMultihost.ts index 957b3bf79e..b6e8cc08e3 100644 --- a/packages/cli/src/lib/setup/setupMultihost.ts +++ b/packages/cli/src/lib/setup/setupMultihost.ts @@ -40,12 +40,12 @@ export class Multihost { config = fs.readJsonSync(this.configName); } else { config = fs.readJsonSync( - path.join(tools.getControllerDir(), 'conf', `${tools.appName.toLowerCase()}-dist.json`) + path.join(tools.getControllerDir(), 'conf', `${tools.appName.toLowerCase()}-dist.json`), ); } } catch { config = fs.readJsonSync( - path.join(tools.getControllerDir(), 'conf', `${tools.appName.toLowerCase()}-dist.json`) + path.join(tools.getControllerDir(), 'conf', `${tools.appName.toLowerCase()}-dist.json`), ); } return config; @@ -59,14 +59,14 @@ export class Multihost { showHosts(list: BrowseResultEntry[]): void { if (!list || !list.length) { console.info( - 'No Multihost server found. Make sure iobroker is running on the host where you enabled multihost discovery (and it is not this host)!' + 'No Multihost server found. Make sure iobroker is running on the host where you enabled multihost discovery (and it is not this host)!', ); } else { for (let i = 0; i < list.length; i++) { console.log( `${i + 1} | ${list[i].hostname!.padStart(20)} | ${list[i].slave ? 'slave' : ' host'} | ${list[ i - ].ip!.padStart(20)} | ${JSON.stringify(list[i].info)}` + ].ip!.padStart(20)} | ${JSON.stringify(list[i].info)}`, ); } } @@ -104,12 +104,12 @@ export class Multihost { } else if (config.objects.type === 'redis') { warningShown = true; console.log( - `Please check the binding of redis service. By default it is only local: http://download.redis.io/redis-stable/redis.conf\nChange "bind 127.0.0.1" to "bind ${tools.getListenAllAddress()}" or to others.` + `Please check the binding of redis service. By default it is only local: http://download.redis.io/redis-stable/redis.conf\nChange "bind 127.0.0.1" to "bind ${tools.getListenAllAddress()}" or to others.`, ); } else { warningShown = true; console.log( - `Please check the binding of the configured ${config.objects.type} server to allow remote connections.` + `Please check the binding of the configured ${config.objects.type} server to allow remote connections.`, ); } @@ -122,12 +122,12 @@ export class Multihost { } else if (config.states.type === 'redis') { !warningShown && console.log( - `Please check the binding of redis service. By default it is only local: http://download.redis.io/redis-stable/redis.conf\nChange "bind 127.0.0.1" to "bind ${tools.getListenAllAddress()}" or to others.` + `Please check the binding of redis service. By default it is only local: http://download.redis.io/redis-stable/redis.conf\nChange "bind 127.0.0.1" to "bind ${tools.getListenAllAddress()}" or to others.`, ); } else { !warningShown && console.log( - `Please check the binding of the configured ${config.states.type} server to allow remote connections.` + `Please check the binding of the configured ${config.states.type} server to allow remote connections.`, ); } } @@ -143,7 +143,7 @@ export class Multihost { console.log( `Persistent activation: ${ config.multihostService.enabled && config.multihostService.persist ? 'enabled' : 'disabled' - }` + }`, ); console.log(`Objects: ${config.objects.type} on ${config.objects.host}`); console.log(`States: ${config.states.type} on ${config.states.host}`); @@ -165,14 +165,14 @@ export class Multihost { config.multihostService.enabled = true; config.multihostService.password = ''; console.log( - 'Multihost discovery server activated on this host. If iobroker is currently not running please start befeore trying to discover this host.' + 'Multihost discovery server activated on this host. If iobroker is currently not running please start befeore trying to discover this host.', ); console.log( - 'Important: Multihost discovery works with UDP packets. Make sure they are routed correctly in your network. If you use Docker you also need to configure this correctly.' + 'Important: Multihost discovery works with UDP packets. Make sure they are routed correctly in your network. If you use Docker you also need to configure this correctly.', ); if (!this.params.persist) { console.log( - 'Multihost discovery will be automatically deactivated after 15 minutes. If you want to activate it permanently use the --persist flag' + 'Multihost discovery will be automatically deactivated after 15 minutes. If you want to activate it permanently use the --persist flag', ); } } else if (!isEnable && config.multihostService.enabled) { @@ -206,15 +206,15 @@ export class Multihost { description: 'Enter secret phrase for connection:', pattern: /^[^'"]+$/, message: 'No " are allowed', - hidden: true + hidden: true, }, passwordRepeat: { description: 'Repeat secret phrase for connection:', pattern: /^[^'"]+$/, message: 'No " are allowed', - hidden: true - } - } + hidden: true, + }, + }, }; prompt.start(); @@ -226,7 +226,7 @@ export class Multihost { this.objects.getObject('system.config', (err, obj) => { config.multihostService.password = tools.encrypt( obj!.native.secret, - password.password as string + password.password as string, ); this.showMHState(config, changed); callback(); @@ -263,7 +263,7 @@ export class Multihost { readPassword(callback: (password: string) => void): void { const rl = readline.createInterface({ input: process.stdin, - output: process.stdout + output: process.stdout, }); function hidden(query: string, callback: (pw: string) => void): void { @@ -278,7 +278,7 @@ export class Multihost { break; default: - process.stdout.write('\x1B[2K\x1B[200D' + query + new Array(rl.line.length + 1).join('*')); + process.stdout.write(`\x1B[2K\x1B[200D${query}${new Array(rl.line.length + 1).join('*')}`); break; } }); @@ -311,15 +311,15 @@ export class Multihost { const hasLocalObjectsServer = await isLocalObjectsDbServer( config.objects.type, config.objects.host, - true + true, ); const hasLocalStatesServer = await isLocalStatesDbServer(config.states.type, config.states.host, true); if (hasLocalObjectsServer || hasLocalStatesServer) { callback( new Error( - `IP Address of the remote host is ${tools.getLocalAddress()}. Connections from this host will not be accepted. Please change the configuration of this host to accept remote connections.` - ) + `IP Address of the remote host is ${tools.getLocalAddress()}. Connections from this host will not be accepted. Please change the configuration of this host to accept remote connections.`, + ), ); } else { if (tools.isListenAllAddress(config.states.host)) { @@ -351,7 +351,7 @@ export class Multihost { async connect( index: number | null, pass: string | null, - callback: (err?: Error, list?: BrowseResultEntry[]) => void + callback: (err?: Error, list?: BrowseResultEntry[]) => void, ): Promise { if (typeof pass === 'function') { callback = pass; @@ -387,7 +387,7 @@ export class Multihost { } else if (list && list.length) { const rl = readline.createInterface({ input: process.stdin, - output: process.stdout + output: process.stdout, }); rl.question('Please select host [1]: ', answer => { if (answer === '' || answer === null || answer === undefined) { diff --git a/packages/cli/src/lib/setup/setupPacketManager.ts b/packages/cli/src/lib/setup/setupPacketManager.ts index 096f254cdc..010622fb35 100644 --- a/packages/cli/src/lib/setup/setupPacketManager.ts +++ b/packages/cli/src/lib/setup/setupPacketManager.ts @@ -6,7 +6,7 @@ enum LOG_LEVELS { log = 3, info = 2, warn = 1, - error = 0 + error = 0, } interface Logger extends InternalLogger { @@ -37,8 +37,8 @@ export class PacketManager { private readonly COMMANDS = { listUpgradeable: { apt: 'list --upgradeable', - yum: 'check-update' - } + yum: 'check-update', + }, } as const; constructor(options: PacketManagerOptions = { logLevel: LOG_LEVELS.info }) { @@ -50,7 +50,7 @@ export class PacketManager { log: text => options.logLevel >= LOG_LEVELS.log && console.log(text), warn: text => options.logLevel >= LOG_LEVELS.warn && console.warn(text), error: text => options.logLevel >= LOG_LEVELS.error && console.error(text), - debug: text => options.logLevel >= LOG_LEVELS.debug && console.log(text) + debug: text => options.logLevel >= LOG_LEVELS.debug && console.log(text), }; this.dpkg = false; this.sudo = false; @@ -110,10 +110,9 @@ export class PacketManager { (err.stderr && err.stderr.includes('dpkg --help')) ) { return true; - } else { - this.logger.error(`Cannot detect dpkg: ${err.stderr || err.stdout || err}`); - return false; } + this.logger.error(`Cannot detect dpkg: ${err.stderr || err.stdout || err}`); + return false; } } @@ -125,10 +124,9 @@ export class PacketManager { // non zero exit code, however lets check if ok if ((err.stdout && err.stdout.includes('sudo -h')) || (err.stderr && err.stderr.includes('sudo -h'))) { return true; - } else { - this.logger.error(`Cannot detect sudo: ${err.stderr || err.stdout || err}`); - return false; } + this.logger.error(`Cannot detect sudo: ${err.stderr || err.stdout || err}`); + return false; } } @@ -226,7 +224,7 @@ export class PacketManager { } const { stdout } = await execAsync( - `${(this.sudo ? 'sudo ' : '') + this.manager} ${this.COMMANDS.listUpgradeable[this.manager]}` + `${(this.sudo ? 'sudo ' : '') + this.manager} ${this.COMMANDS.listUpgradeable[this.manager]}`, ); const res = Buffer.isBuffer(stdout) ? stdout.toString('utf-8') : stdout; @@ -320,19 +318,19 @@ export class PacketManager { if (failed.length > 0) { this.logger.warn( `The following ${this.manager || 'OS'} packages could not be installed: ${failed.join( - ', ' - )}. Please install them manually.` + ', ', + )}. Please install them manually.`, ); if (notInstalled.length) { this.logger.info( - `Installed the following ${this.manager || 'OS'} packages: ${notInstalled.join(', ')}` + `Installed the following ${this.manager || 'OS'} packages: ${notInstalled.join(', ')}`, ); } if (installed.length) { this.logger.info( - `These ${this.manager || 'OS'} packages were already installed: ${installed.join(', ')}` + `These ${this.manager || 'OS'} packages were already installed: ${installed.join(', ')}`, ); } } diff --git a/packages/cli/src/lib/setup/setupRepo.ts b/packages/cli/src/lib/setup/setupRepo.ts index fba5074e8f..3ead9b1e1b 100644 --- a/packages/cli/src/lib/setup/setupRepo.ts +++ b/packages/cli/src/lib/setup/setupRepo.ts @@ -46,22 +46,22 @@ export class Repo { this.defaultSystemRepo = { common: { name: 'System repositories', - dontDelete: true + dontDelete: true, }, native: { repositories: { stable: { link: 'http://download.iobroker.net/sources-dist.json', - json: null + json: null, }, beta: { link: 'http://download.iobroker.net/sources-dist-latest.json', - json: null - } - } + json: null, + }, + }, }, _id: 'system.repositories', - type: 'config' + type: 'config', }; } @@ -77,7 +77,7 @@ export class Repo { repoName: string, force: boolean | undefined, systemConfig?: ioBroker.OtherObject, - systemRepos?: ioBroker.RepositoryObject + systemRepos?: ioBroker.RepositoryObject, ): Promise { if (!repoName) { const sysConfig = systemConfig || (await this.objects.getObject('system.config')); @@ -126,7 +126,7 @@ export class Repo { data = await axios({ url: urlOrPath, timeout: 10_000, - headers: { 'User-Agent': agent } + headers: { 'User-Agent': agent }, }); if (data.data) { data = data.data; @@ -202,7 +202,7 @@ export class Repo { systemRepos.native.repositories[url] = { link: repo, json: null, - hash: '' + hash: '', }; } @@ -211,8 +211,8 @@ export class Repo { } else { console.error( `Error: unknown repository is active - "${url}". Known: ${Object.keys( - systemRepos.native.repositories - ).join(', ')}` + systemRepos.native.repositories, + ).join(', ')}`, ); } } @@ -245,7 +245,7 @@ export class Repo { text = text.padEnd(11 + 15); if (sources[name].version) { - text += ': ' + sources[name].version; + text += `: ${sources[name].version}`; } text = text.padEnd(11 + 15 + 11); @@ -267,7 +267,7 @@ export class Repo { const isIgnored = await isVersionIgnored({ adapterName: name, objects: this.objects, - version: sources[name].version + version: sources[name].version, }); text += isIgnored ? ' [Ignored]' : ' [Updatable]'; @@ -312,7 +312,7 @@ export class Repo { const objs = await this.objects.getObjectViewAsync('system', 'instance', { startkey: 'system.adapter.admin', - endkey: 'system.adapter.admin\u9999' + endkey: 'system.adapter.admin\u9999', }); if (objs?.rows?.length) { @@ -343,9 +343,9 @@ export class Repo { return { name: key, url: value.link, - 'auto upgrade': objCfg?.common.adapterAutoUpgrade?.repositories[key] ?? false + 'auto upgrade': objCfg?.common.adapterAutoUpgrade?.repositories[key] ?? false, }; - }) + }), ); if (objCfg?.common) { @@ -381,7 +381,7 @@ export class Repo { } else { obj.native.repositories[repoName] = { link: repoUrl, - json: null + json: null, }; obj.from = `system.host.${tools.getHostName()}.cli`; obj.ts = Date.now(); diff --git a/packages/cli/src/lib/setup/setupSetup.ts b/packages/cli/src/lib/setup/setupSetup.ts index 94df689941..2289e45a10 100644 --- a/packages/cli/src/lib/setup/setupSetup.ts +++ b/packages/cli/src/lib/setup/setupSetup.ts @@ -20,7 +20,7 @@ import { isLocalObjectsDbServer, objectsDbHasServer, performObjectsInterview, - performStatesInterview + performStatesInterview, } from '@iobroker/js-controller-common'; import { resetDbConnect, dbConnectAsync } from '@/lib/setup/dbConnection.js'; import { BackupRestore } from '@/lib/setup/setupBackup.js'; @@ -36,9 +36,9 @@ import { createRequire } from 'node:module'; import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); // eslint-disable-next-line unicorn/prefer-module -const require = createRequire(import.meta.url || 'file://' + __filename); +const require = createRequire(import.meta.url || `file://${__filename}`); const COLOR_RED = '\x1b[31m'; const COLOR_YELLOW = '\x1b[33m'; @@ -144,7 +144,7 @@ export class Setup { let enabledState; try { enabledState = await this.states.getStateAsync( - `system.host.${tools.getHostName()}.plugins.${plugin}.enabled` + `system.host.${tools.getHostName()}.plugins.${plugin}.enabled`, ); } catch { // ignore @@ -174,7 +174,7 @@ export class Setup { */ async setupReady( systemConfig: ioBroker.SystemConfigObject | undefined | null, - callback: () => void + callback: () => void, ): Promise { if (!callback) { console.log(`database setup done. You can add adapters and start ${tools.appName} now`); @@ -240,7 +240,7 @@ export class Setup { numberSuccess && console.log( `${numberSuccess} file(s) successfully synchronized with ioBroker storage. -Please DO NOT copy files manually into ioBroker storage directories!` +Please DO NOT copy files manually into ioBroker storage directories!`, ); if (notifications.length) { console.log(); @@ -337,8 +337,8 @@ Please DO NOT copy files manually into ioBroker storage directories!` configObj.common.adapterAutoUpgrade = { defaultPolicy: 'none', repositories: { - [repoName]: true - } + [repoName]: true, + }, }; } @@ -394,11 +394,11 @@ Please DO NOT copy files manually into ioBroker storage directories!` // generate new certificates if (cert.certificateFilename) { console.log( - `Existing file certificate (${cert.certificateFilename}) is invalid (too old, validity longer then 345 days or keylength too short). Please check it!` + `Existing file certificate (${cert.certificateFilename}) is invalid (too old, validity longer then 345 days or keylength too short). Please check it!`, ); } else { console.log( - 'Existing earlier generated certificate is invalid (too old, validity longer then 365 days or keylength too short). Generating new Certificate!' + 'Existing earlier generated certificate is invalid (too old, validity longer then 365 days or keylength too short). Generating new Certificate!', ); cert = null; } @@ -471,8 +471,8 @@ Please DO NOT copy files manually into ioBroker storage directories!` `Please choose if this is a Master/single host (enter "m") or a Slave host (enter "S") you are about to edit. For Slave hosts the data migration will be skipped. [S/m]: `, { limit: /^[SsMm]?$/, - defaultInput: 'S' - } + defaultInput: 'S', + }, ); allowMigration = !(answer === 'S' || answer === 's'); } else { @@ -480,8 +480,8 @@ Please DO NOT copy files manually into ioBroker storage directories!` `This host appears to be a Master or a Single host system. Is this correct? [Y/n]: `, { limit: /^[YyNnJj]?$/, - defaultInput: 'Y' - } + defaultInput: 'Y', + }, ); allowMigration = answer === 'Y' || answer === 'y' || answer === 'J' || answer === 'j'; } @@ -491,8 +491,8 @@ Please DO NOT copy files manually into ioBroker storage directories!` `It appears that you want to convert this slave host into a Master or Single host system. Is this correct? [Y/n]: `, { limit: /^[YyNnJj]?$/, - defaultInput: 'Y' - } + defaultInput: 'Y', + }, ); allowMigration = answer === 'Y' || answer === 'y' || answer === 'J' || answer === 'j'; } else { @@ -500,8 +500,8 @@ Please DO NOT copy files manually into ioBroker storage directories!` `This host appears to be an ioBroker SLAVE system. Migration will be skipped. Is this correct? [Y/n]: `, { limit: /^[YyNnJj]?$/, - defaultInput: 'Y' - } + defaultInput: 'Y', + }, ); allowMigration = !(answer === 'Y' || answer === 'y' || answer === 'J' || answer === 'j'); } @@ -547,8 +547,8 @@ Please DO NOT copy files manually into ioBroker storage directories!` `Do you want to migrate objects and states from "${oldConfig.objects.type}/${oldConfig.states.type}" to "${newConfig.objects.type}/${newConfig.states.type}" [y/N]: `, { limit: /^[YyNnJj]?$/, - defaultInput: 'N' - } + defaultInput: 'N', + }, ); if ( @@ -560,8 +560,8 @@ Please DO NOT copy files manually into ioBroker storage directories!` `Migrating the objects database will overwrite all objects! Are you sure that this is not a slave host and you want to migrate the data? [y/N]: `, { limit: /^[YyNnJj]?$/, - defaultInput: 'N' - } + defaultInput: 'N', + }, ); console.log(COLOR_RESET); } @@ -587,14 +587,14 @@ Please DO NOT copy files manually into ioBroker storage directories!` objects: objectsOld, cleanDatabase: this.cleanDatabase, restartController: this.restartController, - processExit: resolve + processExit: resolve, }); console.log('Creating backup ...'); console.log(`${COLOR_GREEN}This can take some time ... please be patient!${COLOR_RESET}`); // TODO: this can call processExit internally we want to get rid of this in the future - let filePath = (await backupCreate.createBackup('', true))!; + let filePath = await backupCreate.createBackup('', true); const origBackupPath = filePath; filePath = filePath.replace('.tar.gz', '-migration.tar.gz'); try { @@ -613,12 +613,12 @@ Please DO NOT copy files manually into ioBroker storage directories!` console.log(''); console.log( - `Connecting to new DB "${newConfig.states.type}/${newConfig.objects.type}" (can take up to 20s) ...` + `Connecting to new DB "${newConfig.states.type}/${newConfig.objects.type}" (can take up to 20s) ...`, ); const { objects: objectsNew, states: statesNew } = await dbConnectAsync(true, { ...this.params, - timeout: 20_000 + timeout: 20_000, }); this.objects = objectsNew; @@ -627,7 +627,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` if (!statesNew || !objectsNew) { console.error(COLOR_RED); console.log( - `New Database could not be connected. Please check your settings. No settings have been changed.${COLOR_RESET}` + `New Database could not be connected. Please check your settings. No settings have been changed.${COLOR_RESET}`, ); console.log(`restoring conf/${tools.appName.toLowerCase()}.json`); @@ -643,14 +643,14 @@ Please DO NOT copy files manually into ioBroker storage directories!` cleanDatabase: this.cleanDatabase, restartController: this.restartController, processExit: resolve, - dbMigration: true + dbMigration: true, }); console.log('Restore backup ...'); console.log(`${COLOR_GREEN}This can take some time ... please be patient!${COLOR_RESET}`); const { objects, states, exitCode } = await backupRestore.restoreBackup({ name: filePath, force: false, - dontDeleteAdapters: true + dontDeleteAdapters: true, }); this.objects = objects; @@ -678,7 +678,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` console.log(''); console.log('No Database migration was done.'); console.log( - `${COLOR_YELLOW}If this was done on your master host please execute "iobroker setup first" to newly initialize all objects.${COLOR_RESET}` + `${COLOR_YELLOW}If this was done on your master host please execute "iobroker setup first" to newly initialize all objects.${COLOR_RESET}`, ); console.log(''); } @@ -716,7 +716,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` originalConfig.objects.sentinelName ? originalConfig.objects.sentinelName : this.DEFAULT_SENTINEL_NAME - }` + }`, ); } console.log('- States database:'); @@ -727,7 +727,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` console.log( ` - Sentinel-Master-Name: ${ originalConfig.states.sentinelName ? originalConfig.states.sentinelName : this.DEFAULT_SENTINEL_NAME - }` + }`, ); } @@ -745,8 +745,8 @@ Please DO NOT copy files manually into ioBroker storage directories!` let otype = rl.question( `Type of objects DB [(j)sonl, (f)ile, (r)edis, ...], default [${currentObjectsType}]: `, { - defaultInput: currentObjectsType - } + defaultInput: currentObjectsType, + }, ); otype = otype.toLowerCase(); @@ -780,7 +780,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` console.log('When Objects and Files are stored in a Redis database please consider the following:'); console.log('1. All data will be stored in RAM, make sure to have enough free RAM available!'); console.log( - '2. Make sure to check Redis persistence options to make sure a Redis problem will not cause data loss!' + '2. Make sure to check Redis persistence options to make sure a Redis problem will not cause data loss!', ); console.log('3. The Redis persistence files can get big, make sure not to use an SD card to store them.'); console.log(COLOR_RESET); @@ -793,8 +793,8 @@ Please DO NOT copy files manually into ioBroker storage directories!` Array.isArray(defaultObjectsHost) ? defaultObjectsHost.join(',') : defaultObjectsHost }]: `, { - defaultInput: Array.isArray(defaultObjectsHost) ? defaultObjectsHost.join(',') : defaultObjectsHost - } + defaultInput: Array.isArray(defaultObjectsHost) ? defaultObjectsHost.join(',') : defaultObjectsHost, + }, ); oHost = oHost.toLowerCase(); @@ -816,8 +816,8 @@ Please DO NOT copy files manually into ioBroker storage directories!` }]: `, { defaultInput: Array.isArray(defaultObjectsPort) ? defaultObjectsPort.join(',') : defaultObjectsPort, - limit: /^[0-9, ]+$/ - } + limit: /^[0-9, ]+$/, + }, ); let oPort: number | number[]; if (userObjPort.includes(',')) { @@ -850,7 +850,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` ? originalConfig.objects.sentinelName : this.DEFAULT_SENTINEL_NAME; oSentinelName = rl.question(`Objects Redis Sentinel Master Name [${defaultSentinelName}]: `, { - defaultInput: defaultSentinelName + defaultInput: defaultSentinelName, }); } @@ -865,8 +865,8 @@ Please DO NOT copy files manually into ioBroker storage directories!` let stype = rl.question( `Type of states DB [(j)sonl, (f)file, (r)edis, ...], default [${defaultStatesType}]: `, { - defaultInput: defaultStatesType - } + defaultInput: defaultStatesType, + }, ); stype = stype.toLowerCase(); @@ -912,8 +912,8 @@ Please DO NOT copy files manually into ioBroker storage directories!` Array.isArray(defaultStatesHost) ? defaultStatesHost.join(',') : defaultStatesHost }]: `, { - defaultInput: Array.isArray(defaultStatesHost) ? defaultStatesHost.join(',') : defaultStatesHost - } + defaultInput: Array.isArray(defaultStatesHost) ? defaultStatesHost.join(',') : defaultStatesHost, + }, ); sHost = sHost.toLowerCase(); @@ -940,8 +940,8 @@ Please DO NOT copy files manually into ioBroker storage directories!` }]: `, { defaultInput: Array.isArray(defaultStatesPort) ? defaultStatesPort.join(',') : defaultStatesPort, - limit: /^[0-9, ]+$/ - } + limit: /^[0-9, ]+$/, + }, ); let sPort: number | number[]; if (userStatePort.includes(',')) { @@ -977,7 +977,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` ? oSentinelName : this.DEFAULT_SENTINEL_NAME; sSentinelName = rl.question(`States Redis Sentinel Master Name [${defaultSentinelName}]: `, { - defaultInput: defaultSentinelName + defaultInput: defaultSentinelName, }); } @@ -992,7 +992,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` while (!validDataDir) { dir = rl.question(`Data directory (file), default[${tools.getDefaultDataDir()}]: `, { - defaultInput: tools.getDefaultDataDir() + defaultInput: tools.getDefaultDataDir(), }); const validationInfo = tools.validateDataDir(dir); @@ -1001,7 +1001,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` if (!validDataDir) { console.warn( - `${COLOR_YELLOW}The data directory is invalid. ${validationInfo.reason}${COLOR_RESET}` + `${COLOR_YELLOW}The data directory is invalid. ${validationInfo.reason}${COLOR_RESET}`, ); console.warn(`The current directory resolves to "${validationInfo.path}"`); } @@ -1014,12 +1014,12 @@ Please DO NOT copy files manually into ioBroker storage directories!` : os.hostname() }]: `, { - defaultInput: (originalConfig && originalConfig.system && originalConfig.system.hostname) || '' - } + defaultInput: (originalConfig && originalConfig.system && originalConfig.system.hostname) || '', + }, ); } else { hname = rl.question(`Host name of this machine [${os.hostname()}]: `, { - defaultInput: '' + defaultInput: '', }); } @@ -1121,7 +1121,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` if (packJson.overrides?.['@iobroker/adapter-core'] === this.SUPPORTED_ADAPTER_CORE_VERSION) { console.log( - `The supported version of "@iobroker/adapter-core" is already specified as "${this.SUPPORTED_ADAPTER_CORE_VERSION}"` + `The supported version of "@iobroker/adapter-core" is already specified as "${this.SUPPORTED_ADAPTER_CORE_VERSION}"`, ); return; } @@ -1131,7 +1131,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` await fs.writeFile(packPath, JSON.stringify(packJson)); console.log( - `Successfully specified supported "@iobroker/adapter-core" version as "${this.SUPPORTED_ADAPTER_CORE_VERSION}"` + `Successfully specified supported "@iobroker/adapter-core" version as "${this.SUPPORTED_ADAPTER_CORE_VERSION}"`, ); } @@ -1172,7 +1172,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` es: 'Adaptadores instalados', pl: 'Zainstalowane adaptery', uk: 'Встановлені адаптери', - 'zh-cn': '已安装的适配器' + 'zh-cn': '已安装的适配器', }, desc: { en: 'Installed adapters on this host', @@ -1185,15 +1185,15 @@ Please DO NOT copy files manually into ioBroker storage directories!` es: 'Adaptadores instalados en este host', pl: 'Zainstalowane karty na tym hoście', uk: 'Встановлені адаптери на цьому хості', - 'zh-cn': '该主机上已安装的适配器' - } + 'zh-cn': '该主机上已安装的适配器', + }, }, - native: {} + native: {}, }); const adaptersView = await this.objects.getObjectViewAsync('system', 'adapter', { startkey: SYSTEM_ADAPTER_PREFIX, - endkey: `${SYSTEM_ADAPTER_PREFIX}\u9999` + endkey: `${SYSTEM_ADAPTER_PREFIX}\u9999`, }); const rootPackJson = await fs.readJSON(path.join(tools.getRootDir(), 'package.json')); @@ -1275,7 +1275,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` const hostsView = await this.objects.getObjectViewAsync('system', 'host', { startkey: SYSTEM_HOST_PREFIX, - endkey: `${SYSTEM_HOST_PREFIX}\u9999` + endkey: `${SYSTEM_HOST_PREFIX}\u9999`, }); const hostIds = hostsView.rows.map(row => row.id); @@ -1285,7 +1285,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` if (!hasAdapters) { console.log( - `Skipping cleanup leftover adapters, because host "${hostId}" is not yet migrated to a supporting controller version` + `Skipping cleanup leftover adapters, because host "${hostId}" is not yet migrated to a supporting controller version`, ); return; } @@ -1293,14 +1293,14 @@ Please DO NOT copy files manually into ioBroker storage directories!` const adaptersViewPerHost = await this.objects.getObjectViewAsync('system', 'adapter', { startkey: SYSTEM_HOST_PREFIX, - endkey: `${SYSTEM_HOST_PREFIX}\u9999` + endkey: `${SYSTEM_HOST_PREFIX}\u9999`, }); const installedAdapterNames = adaptersViewPerHost.rows.map(row => row.value.common.name); const adaptersView = await this.objects.getObjectViewAsync('system', 'adapter', { startkey: SYSTEM_ADAPTER_PREFIX, - endkey: `${SYSTEM_ADAPTER_PREFIX}\u9999` + endkey: `${SYSTEM_ADAPTER_PREFIX}\u9999`, }); for (const row of adaptersView.rows) { @@ -1378,7 +1378,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` const hostsView = await this.objects.getObjectViewAsync('system', 'host', { startkey: SYSTEM_HOST_PREFIX, - endkey: `${SYSTEM_HOST_PREFIX}\u9999` + endkey: `${SYSTEM_HOST_PREFIX}\u9999`, }); const hostIds = hostsView.rows.map(row => row.id); @@ -1397,7 +1397,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` const statesView = await this.objects.getObjectViewAsync('system', 'state', { startkey: '', - endkey: '\u9999' + endkey: '\u9999', }); for (const row of statesView.rows) { @@ -1424,11 +1424,11 @@ Please DO NOT copy files manually into ioBroker storage directories!` for (const group of groupView.rows) { // reference for readability - const groupMembers = group.value!.common.members; + const groupMembers = group.value.common.members; if (!Array.isArray(groupMembers)) { // fix legacy objects - const obj = group.value!; + const obj = group.value; obj.common.members = []; await this.objects.setObjectAsync(obj._id, obj); continue; @@ -1440,13 +1440,13 @@ Please DO NOT copy files manually into ioBroker storage directories!` if (!existingUsers.includes(groupMembers[i])) { // we have found a non-existing user, so remove it changed = true; - console.log(`Removed non-existing user "${groupMembers[i]}" from group "${group.value!._id}"`); + console.log(`Removed non-existing user "${groupMembers[i]}" from group "${group.value._id}"`); groupMembers.splice(i, 1); } } if (changed) { - await this.objects.setObjectAsync(group.value!._id, group.value!); + await this.objects.setObjectAsync(group.value._id, group.value); } } } @@ -1470,7 +1470,7 @@ Please DO NOT copy files manually into ioBroker storage directories!` if (fs.existsSync(path.join(CONTROLLER_DIR, 'reinstall.js'))) { fs.writeFileSync( path.join(CONTROLLER_DIR, '..', '..', 'reinstall.js'), - fs.readFileSync(path.join(CONTROLLER_DIR, 'reinstall.js')) + fs.readFileSync(path.join(CONTROLLER_DIR, 'reinstall.js')), ); } } catch (e) { @@ -1487,21 +1487,21 @@ Please DO NOT copy files manually into ioBroker storage directories!` // copy scripts to root directory if (fs.existsSync(path.join(CONTROLLER_DIR, '..', '..', 'node_modules'))) { const startFile = `#!/usr/bin/env node -require('${path.normalize(thisDir + '/..')}/setup').execute();`; +require('${path.normalize(`${thisDir}/..`)}/setup').execute();`; try { if (fs.existsSync(path.join(CONTROLLER_DIR, 'killall.sh'))) { fs.writeFileSync( path.join(CONTROLLER_DIR, '..', '..', 'killall.sh'), fs.readFileSync(path.join(CONTROLLER_DIR, 'killall.sh')), - { mode: 492 /* 0754 */ } + { mode: 492 /* 0754 */ }, ); } if (fs.existsSync(path.join(CONTROLLER_DIR, 'reinstall.sh'))) { fs.writeFileSync( path.join(CONTROLLER_DIR, '..', '..', 'reinstall.sh'), fs.readFileSync(path.join(CONTROLLER_DIR, 'reinstall.sh')), - { mode: 492 /* 0754 */ } + { mode: 492 /* 0754 */ }, ); } if (!fs.existsSync(path.join(CONTROLLER_DIR, '..', '..', `${tools.appName.substring(0, 3)}`))) { @@ -1509,13 +1509,13 @@ require('${path.normalize(thisDir + '/..')}/setup').execute();`; path.join(CONTROLLER_DIR, '..', '..', `${tools.appName.substring(0, 3)}`), startFile, { - mode: 492 /* 0754 */ - } + mode: 492 /* 0754 */, + }, ); } if (!fs.existsSync(path.join(CONTROLLER_DIR, '..', '..', `${tools.appName}`))) { fs.writeFileSync(path.join(CONTROLLER_DIR, '..', '..', `${tools.appName}`), startFile, { - mode: 492 /* 0754 */ + mode: 492 /* 0754 */, }); } } catch (e) { diff --git a/packages/cli/src/lib/setup/setupUpgrade.ts b/packages/cli/src/lib/setup/setupUpgrade.ts index 273df2bf6e..0fb3b1f059 100644 --- a/packages/cli/src/lib/setup/setupUpgrade.ts +++ b/packages/cli/src/lib/setup/setupUpgrade.ts @@ -57,7 +57,7 @@ export class Upgrade { repo: Record, list: string[], forceDowngrade: boolean, - autoConfirm: boolean + autoConfirm: boolean, ): Promise { const relevantAdapters = []; // check which adapters are upgradeable and sort them according to their dependencies @@ -93,7 +93,7 @@ export class Upgrade { } else { const allDeps: Record = { ...tools.parseDependencies(repo[relAdapter].dependencies), - ...tools.parseDependencies(repo[relAdapter].globalDependencies) + ...tools.parseDependencies(repo[relAdapter].globalDependencies), }; // we have to check if the deps are there @@ -157,20 +157,15 @@ export class Upgrade { const allDeps = { ...deps, ...globalDeps }; // Get all installed adapters - let objs; - try { - objs = await this.objects.getObjectViewAsync( - 'system', - 'instance', - { - startkey: 'system.adapter.', - endkey: 'system.adapter.\u9999' - }, - undefined - ); - } catch (e) { - return Promise.reject(e); - } + const objs = await this.objects.getObjectViewAsync( + 'system', + 'instance', + { + startkey: 'system.adapter.', + endkey: 'system.adapter.\u9999', + }, + undefined, + ); if (objs?.rows?.length) { for (const dName in allDeps) { @@ -183,16 +178,16 @@ export class Upgrade { if (!semver.satisfies(iopkg_.version, version, { includePrerelease: true })) { return Promise.reject( new Error( - `Invalid version of "${dName}". Installed "${iopkg_.version}", required "${version}` - ) + `Invalid version of "${dName}". Installed "${iopkg_.version}", required "${version}`, + ), ); } } catch (e) { console.log(`Can not check js-controller dependency requirement: ${e.message}`); return Promise.reject( new Error( - `Invalid version of "${dName}". Installed "${iopkg_.version}", required "${version}` - ) + `Invalid version of "${dName}". Installed "${iopkg_.version}", required "${version}`, + ), ); } } @@ -209,7 +204,7 @@ export class Upgrade { obj => obj.value.common && obj.value.common.name === dName && - obj.value.common.host === this.hostname + obj.value.common.host === this.hostname, ); if (locInstances.length === 0) { return Promise.reject(new Error(`Required dependency "${dName}" not found on this host.`)); @@ -223,21 +218,21 @@ export class Upgrade { try { if ( !semver.satisfies(instanceVersion, deps[dName], { - includePrerelease: true + includePrerelease: true, }) ) { return Promise.reject( new Error( - `Invalid version of "${dName}". Installed "${instanceVersion}", required "${deps[dName]}` - ) + `Invalid version of "${dName}". Installed "${instanceVersion}", required "${deps[dName]}`, + ), ); } } catch (e) { console.log(`Can not check dependency requirement: ${e.message}`); return Promise.reject( new Error( - `Invalid version of "${dName}". Installed "${instanceVersion}", required "${deps[dName]}` - ) + `Invalid version of "${dName}". Installed "${instanceVersion}", required "${deps[dName]}`, + ), ); } isFound = true; @@ -248,21 +243,21 @@ export class Upgrade { try { if ( !semver.satisfies(instanceVersion, globalDeps[dName], { - includePrerelease: true + includePrerelease: true, }) ) { return Promise.reject( new Error( - `Invalid version of "${dName}". Installed "${instanceVersion}", required "${globalDeps[dName]}` - ) + `Invalid version of "${dName}". Installed "${instanceVersion}", required "${globalDeps[dName]}`, + ), ); } } catch (e) { console.log(`Can not check dependency requirement: ${e.message}`); return Promise.reject( new Error( - `Invalid version of "${dName}". Installed "${instanceVersion}", required "${globalDeps[dName]}` - ) + `Invalid version of "${dName}". Installed "${instanceVersion}", required "${globalDeps[dName]}`, + ), ); } isFound = true; @@ -290,7 +285,7 @@ export class Upgrade { adapter: string, forceDowngrade: boolean, autoConfirm: boolean, - upgradeAll: boolean + upgradeAll: boolean, ): Promise { let sources: Record; if (!repoUrlOrObject || !tools.isObject(repoUrlOrObject)) { @@ -358,7 +353,7 @@ export class Upgrade { return console.log( `Adapter "${adapter}"${ adapter.length < 15 ? new Array(15 - adapter.length).join(' ') : '' - } is not installed.` + } is not installed.`, ); } // Get the url of io-package.json or direct the version @@ -368,7 +363,7 @@ export class Upgrade { } if (repoAdapter.controller) { return console.log( - `Cannot update ${adapter} using this command. Please use "iobroker upgrade self" instead!` + `Cannot update ${adapter} using this command. Please use "iobroker upgrade self" instead!`, ); } @@ -423,10 +418,10 @@ export class Upgrade { console.log( `\nThis upgrade of "${adapter}" will ${ noMissingNews ? '' : 'at least ' - }introduce the following changes:` + }introduce the following changes:`, ); console.log( - '==========================================================================' + '==========================================================================', ); first = false; } else if (first === false) { @@ -448,10 +443,10 @@ export class Upgrade { console.log( `\nThis downgrade of "${adapter}" will ${ noMissingNews ? '' : 'at least ' - }remove the following changes:` + }remove the following changes:`, ); console.log( - '==========================================================================' + '==========================================================================', ); first = false; } else if (first === false) { @@ -479,7 +474,7 @@ export class Upgrade { console.log( `BE CAREFUL: THIS IS A MAJOR ${ isUpgrade ? 'UPGRADE' : 'DOWNGRADE' - }, WHICH WILL MOST LIKELY INTRODUCE BREAKING CHANGES!` + }, WHICH WILL MOST LIKELY INTRODUCE BREAKING CHANGES!`, ); } answer = rl.question( @@ -489,8 +484,8 @@ export class Upgrade { version || repoAdapter.version } now? [(y)es, (n)o]: `, { - defaultInput: 'n' - } + defaultInput: 'n', + }, ); } else { answer = rl.question( @@ -498,8 +493,8 @@ export class Upgrade { version || repoAdapter.version } of ${adapter} now? [(y)es, (n)o]: `, { - defaultInput: 'n' - } + defaultInput: 'n', + }, ); } @@ -529,52 +524,51 @@ export class Upgrade { return console.log( `Adapter "${adapter}"${ adapter.length < 15 ? new Array(15 - adapter.length).join(' ') : '' - } is up to date.` + } is up to date.`, ); - } else { - const targetVersion = version || repoAdapter.version; + } + const targetVersion = version || repoAdapter.version; - const isIgnored = await isVersionIgnored({ - adapterName: adapter, - version: targetVersion, - objects: this.objects - }); + const isIgnored = await isVersionIgnored({ + adapterName: adapter, + version: targetVersion, + objects: this.objects, + }); - if (isIgnored) { - console.log( - `No upgrade of "${adapter}" desired, because version "${targetVersion}" is configured to be ignored by the user. Run "${tools.appNameLowerCase} version ${adapter} --recognize" to allow this upgrade!` - ); - return; - } + if (isIgnored) { + console.log( + `No upgrade of "${adapter}" desired, because version "${targetVersion}" is configured to be ignored by the user. Run "${tools.appNameLowerCase} version ${adapter} --recognize" to allow this upgrade!`, + ); + return; + } - try { - if (!showUpgradeDialog(installedVersion, targetVersion, adapter)) { - console.log(`No upgrade of "${adapter}" desired.`); - return; - } - } catch (e) { - console.log(`Can not check version information to display upgrade infos: ${e.message}`); + try { + if (!showUpgradeDialog(installedVersion, targetVersion, adapter)) { + console.log(`No upgrade of "${adapter}" desired.`); + return; } - console.log(`Update ${adapter} from @${installedVersion} to @${targetVersion}`); - const npmPacketName = `${tools.appNameLowerCase}.${adapter}`; + } catch (e) { + console.log(`Can not check version information to display upgrade infos: ${e.message}`); + } + console.log(`Update ${adapter} from @${installedVersion} to @${targetVersion}`); + const npmPacketName = `${tools.appNameLowerCase}.${adapter}`; - try { - if (!semver.diff(installedVersion, targetVersion)) { - console.log(`Uninstall npm packet "${npmPacketName}" for a clean re-installation`); - await tools.uninstallNodeModule(npmPacketName, { debug: process.argv.includes('--debug') }); - } - } catch (e) { - console.warn(`Could not uninstall npm packet "${npmPacketName}": ${e.message}`); + try { + if (!semver.diff(installedVersion, targetVersion)) { + console.log(`Uninstall npm packet "${npmPacketName}" for a clean re-installation`); + await tools.uninstallNodeModule(npmPacketName, { debug: process.argv.includes('--debug') }); } - - // Get the adapter from website - const { packetName, stoppedList } = await this.install.downloadPacket( - sources, - `${adapter}@${targetVersion}` - ); - await finishUpgrade(packetName); - await this.install.enableInstances(stoppedList, true); + } catch (e) { + console.warn(`Could not uninstall npm packet "${npmPacketName}": ${e.message}`); } + + // Get the adapter from website + const { packetName, stoppedList } = await this.install.downloadPacket( + sources, + `${adapter}@${targetVersion}`, + ); + await finishUpgrade(packetName); + await this.install.enableInstances(stoppedList, true); } else if (repoAdapter.meta) { // Read repository from url or file const ioPack = (await tools.getJsonAsync(repoAdapter.meta)) as ioBroker.AdapterObject; @@ -601,7 +595,7 @@ export class Upgrade { console.log( `Adapter "${adapter}"${ adapter.length < 15 ? new Array(15 - adapter.length).join(' ') : '' - } is up to date.` + } is up to date.`, ); } else { // Get the adapter from website @@ -610,12 +604,12 @@ export class Upgrade { const isIgnored = await isVersionIgnored({ adapterName: adapter, version: targetVersion, - objects: this.objects + objects: this.objects, }); if (isIgnored) { console.log( - `No upgrade of "${adapter}" desired, because version "${targetVersion}" is configured to be ignored by the user. Run "${tools.appNameLowerCase} version ${adapter} --recognize" to allow this upgrade!` + `No upgrade of "${adapter}" desired, because version "${targetVersion}" is configured to be ignored by the user. Run "${tools.appNameLowerCase} version ${adapter} --recognize" to allow this upgrade!`, ); return; } @@ -631,7 +625,7 @@ export class Upgrade { console.log(`Update ${adapter} from @${installedVersion} to @${targetVersion}`); const { packetName, stoppedList } = await this.install.downloadPacket( sources, - `${adapter}@${targetVersion}` + `${adapter}@${targetVersion}`, ); await finishUpgrade(packetName, ioPack); await this.install.enableInstances(stoppedList, true); @@ -681,7 +675,7 @@ export class Upgrade { return console.error( `Host "${this.hostname}"${ this.hostname.length < 15 ? ''.padStart(15 - this.hostname.length) : '' - } is not installed.` + } is not installed.`, ); } @@ -703,7 +697,7 @@ export class Upgrade { console.log( `Host "${this.hostname}"${ this.hostname.length < 15 ? new Array(15 - this.hostname.length).join(' ') : '' - } is up to date.` + } is up to date.`, ); } else if (controllerRunning) { console.warn(`Controller is running. Please stop ioBroker first.`); @@ -711,14 +705,14 @@ export class Upgrade { console.log(`Update ${controllerName} from @${installed.common.version} to @${repoController.version}`); // Get the controller from website await this.install.downloadPacket(sources, `${controllerName}@${repoController.version}`, { - stopDb: true + stopDb: true, }); } } else { const ioPack = await tools.getJsonAsync(repoController.meta); if ((!ioPack || !ioPack.common) && !forceDowngrade) { return console.warn( - `Cannot read version. Write "${tools.appName} upgrade self --force" to upgrade controller anyway.` + `Cannot read version. Write "${tools.appName} upgrade self --force" to upgrade controller anyway.`, ); } let version = ioPack?.common ? ioPack.common.version : ''; @@ -733,7 +727,7 @@ export class Upgrade { console.log( `Host "${this.hostname}"${ this.hostname.length < 15 ? new Array(15 - this.hostname.length).join(' ') : '' - } is up to date.` + } is up to date.`, ); } else if (controllerRunning) { console.warn(`Controller is running. Please stop ioBroker first.`); diff --git a/packages/cli/src/lib/setup/setupUpload.ts b/packages/cli/src/lib/setup/setupUpload.ts index fec1c3b749..a4baf43316 100644 --- a/packages/cli/src/lib/setup/setupUpload.ts +++ b/packages/cli/src/lib/setup/setupUpload.ts @@ -40,7 +40,7 @@ type MinimalLogger = Omit; export class Upload { private readonly states: StatesRedisClient; private readonly objects: ObjectsRedisClient; - private readonly regApp = new RegExp('/' + tools.appName.replace(/\./g, '\\.') + '\\.', 'i'); + private readonly regApp = new RegExp(`/${tools.appName.replace(/\./g, '\\.')}\\.`, 'i'); private callbackId = 1; private readonly sendToHostFromCliAsync: (...args: any[]) => Promise; private callbacks: Record = {}; @@ -79,7 +79,7 @@ export class Upload { try { const arr = await this.objects.getObjectListAsync({ startkey: 'system.host.', - endkey: 'system.host.\u9999' + endkey: 'system.host.\u9999', }); if (arr?.rows) { for (const row of arr.rows) { @@ -96,9 +96,8 @@ export class Upload { if (onlyAlive) { return this.checkHostsIfAlive(hosts); - } else { - return hosts; } + return hosts; } // Check if some adapters must be restarted and restart them @@ -158,7 +157,7 @@ export class Upload { host: string, command: string, message: ioBroker.MessagePayload, - callback: ioBroker.MessageCallback | null + callback: ioBroker.MessageCallback | null, ): void { const time = Date.now(); const from = `system.host.${hostname}_cli_${time}`; @@ -199,8 +198,8 @@ export class Upload { message, id: this.callbackId++, ack: false, - time - } + time, + }, } as const; if (this.callbackId > 0xffffffff) { @@ -245,7 +244,7 @@ export class Upload { const adapterDir = tools.getAdapterDir(adapter); if (!adapterDir || !fs.existsSync(adapterDir)) { console.warn( - `No alive host found which has the adapter ${adapter} installed! No upload possible. Skipped.` + `No alive host found which has the adapter ${adapter} installed! No upload possible. Skipped.`, ); continue; } @@ -289,7 +288,7 @@ export class Upload { try { const result = await axios(source, { responseType: 'arraybuffer', - validateStatus: status => status === 200 + validateStatus: status => status === 200, }); if (result?.data) { await this.objects.writeFileAsync(adapter, target, result.data); @@ -349,8 +348,11 @@ export class Upload { async collectExistingFilesToDelete( adapter: string, path: string, - logger: MinimalLogger | typeof console - ): Promise<{ filesToDelete: File[]; dirs: File[] }> { + logger: MinimalLogger | typeof console, + ): Promise<{ + filesToDelete: File[]; + dirs: File[]; + }> { let _files: File[] = []; let _dirs: File[] = []; let files: ioBroker.ReadDirResult[]; @@ -395,7 +397,7 @@ export class Upload { isAdmin: boolean, files: string[], id: string, - logger: MinimalLogger | typeof console + logger: MinimalLogger | typeof console, ): Promise { const uploadID = `system.adapter.${adapter}.upload`; @@ -438,7 +440,7 @@ export class Upload { this.lastProgressUpdate = now; await this.states.setState(uploadID, { val: Math.round((1_000 * (files.length - f)) / files.length) / 10, - ack: true + ack: true, }); } } @@ -497,7 +499,7 @@ export class Upload { isAdmin: boolean, forceUpload: boolean, subTree?: string, - _logger?: MinimalLogger + _logger?: MinimalLogger, ): Promise { const id = adapter + (isAdmin ? '.admin' : ''); const adapterDir = tools.getAdapterDir(adapter); @@ -512,7 +514,7 @@ export class Upload { console.log( `INFO: Directory "${ adapterDir || `for ${adapter}${isAdmin ? '.admin' : ''}` - }" does not exist. Nothing was uploaded or deleted.` + }" does not exist. Nothing was uploaded or deleted.`, ); return adapter; } @@ -532,15 +534,14 @@ export class Upload { console.log( `INFO: Directory "${ dir || `for ${adapter}${isAdmin ? '.admin' : ''}` - }" was not found! Nothing was uploaded or deleted.` + }" was not found! Nothing was uploaded or deleted.`, ); if (isAdmin) { return adapter; - } else { - await this.checkRestartOther(adapter); - return adapter; } + await this.checkRestartOther(adapter); + return adapter; } // check for common.wwwDontUpload (required for legacy adapters and admin) @@ -571,11 +572,11 @@ export class Upload { def: 0, desc: 'Upload process indicator', read: true, - write: false + write: false, }, from: `system.host.${tools.getHostName()}.cli`, ts: Date.now(), - native: {} + native: {}, }); } // Set indicator to 0 @@ -596,11 +597,11 @@ export class Upload { type: 'meta', common: { name: id.split('.').pop()!, - type: isAdmin ? 'admin' : 'www' + type: isAdmin ? 'admin' : 'www', }, from: `system.host.${tools.getHostName()}.cli`, ts: Date.now(), - native: {} + native: {}, }); forceUpload = true; } @@ -616,7 +617,7 @@ export class Upload { const { filesToDelete } = await this.collectExistingFilesToDelete( isAdmin ? `${adapter}.admin` : adapter, '/', - logger + logger, ); // delete old files, before upload of new await this.eraseFiles(filesToDelete, logger); @@ -655,7 +656,7 @@ export class Upload { extendCommon( target: Record, additional: Record, - instance: string + instance: string, ): ioBroker.InstanceCommon { if (tools.isObject(additional)) { const preserveAttributes = [ @@ -666,7 +667,7 @@ export class Upload { 'loglevel', 'enabled', 'custom', - 'tier' + 'tier', ]; for (const [attr, attrData] of Object.entries(additional)) { @@ -711,12 +712,12 @@ export class Upload { name: string, ioPack: ioBroker.AdapterObject, hostname: string, - logger: MinimalLogger | typeof console + logger: MinimalLogger | typeof console, ): Promise { // Update all instances of this host const res = await this.objects.getObjectViewAsync('system', 'instance', { startkey: `system.adapter.${name}.`, - endkey: `system.adapter.${name}.\u9999` + endkey: `system.adapter.${name}.\u9999`, }); if (res) { @@ -731,7 +732,7 @@ export class Upload { newObject.common = this.extendCommon( newObject.common, ioPack.common, - newObject._id.split('.').pop()! + newObject._id.split('.').pop()!, ); newObject.native = this.extendNative(newObject.native, ioPack.native); @@ -808,7 +809,7 @@ export class Upload { async upgradeAdapterObjects( name: string, ioPack?: ioBroker.AdapterObject, - logger: MinimalLogger | typeof console = console + logger: MinimalLogger | typeof console = console, ): Promise { const adapterDir = tools.getAdapterDir(name); let ioPackFile; @@ -827,7 +828,7 @@ export class Upload { if (ioPack) { logger.log( - `Updating objects from io-package.json for adapter "${name}" with version "${ioPack.common.version}"` + `Updating objects from io-package.json for adapter "${name}" with version "${ioPack.common.version}"`, ); // Always update installedFrom from File on disk if exists and set if (ioPackFile?.common?.installedFrom) { @@ -846,7 +847,7 @@ export class Upload { native: ioPack.native, type: 'adapter', instanceObjects: [], - objects: [] + objects: [], }; obj.common = ioPack.common || {}; @@ -877,7 +878,7 @@ export class Upload { await this.objects.setObject(`system.host.${hostname}.adapter.${name}`, obj); } catch (e) { logger.error( - `Cannot set "system.adapter.${name}" and "system.host.${hostname}.adapters.${name}": ${e.message}` + `Cannot set "system.adapter.${name}" and "system.host.${hostname}.adapters.${name}": ${e.message}`, ); } diff --git a/packages/cli/src/lib/setup/setupUsers.ts b/packages/cli/src/lib/setup/setupUsers.ts index d875d93f63..8376baec45 100644 --- a/packages/cli/src/lib/setup/setupUsers.ts +++ b/packages/cli/src/lib/setup/setupUsers.ts @@ -8,8 +8,8 @@ export interface CLIUsersOptions { objects: ObjectsRedisClient; } -/** Return type of prompt.get() for user */ -type UsernamePromptProps = { password: string; username: string }; +/** Map a prompt.Schema to properties of type string */ +type SchemaPropsToString = { [Property in keyof TSchema['properties']]: string }; export class Users { private readonly objects: ObjectsRedisClient; @@ -40,29 +40,28 @@ export class Users { this.objects.getObject(`system.user.${_user}`, (err, obj) => { if (obj) { return tools.maybeCallbackWithError(callback, 'User yet exists'); - } else { - this.objects.setObject( - `system.user.${_user}`, - { - type: 'user', - common: { - name: username, - enabled: true, - password: '' - }, - from: `system.host.${tools.getHostName()}.cli`, - ts: Date.now(), - native: {} + } + this.objects.setObject( + `system.user.${_user}`, + { + type: 'user', + common: { + name: username, + enabled: true, + password: '', }, - err => { - if (!err) { - this.setPassword(username, pw, callback); - } else { - return tools.maybeCallbackWithError(callback, err); - } + from: `system.host.${tools.getHostName()}.cli`, + ts: Date.now(), + native: {}, + }, + err => { + if (!err) { + this.setPassword(username, pw, callback); + } else { + return tools.maybeCallbackWithError(callback, err); } - ); - } + }, + ); }); } @@ -149,59 +148,51 @@ export class Users { this.objects.getObject(`system.user.${_user}`, (err, obj) => { if (err || !obj) { return tools.maybeCallbackWithError(callback, 'User does not exist'); - } else { - if (obj.common.dontDelete) { - return tools.maybeCallbackWithError(callback, 'Cannot delete user, while is system user'); - } else { - this.objects.delObject('system.user.' + _user, err => { - // Remove this user from all groups - if (!err) { - this.objects.getObjectList( - { startkey: 'system.group.', endkey: 'system.group.\u9999' }, - (err, groups) => { - if (!groups) { - return tools.maybeCallback(callback); - } - - let count = 0; - for (let i = 0; i < groups.rows.length; i++) { - if (groups.rows[i].value.type !== 'group') { - continue; - } - // find all groups - if ( - groups.rows[i].value.common.members && - groups.rows[i].value.common.members.indexOf('system.user.' + _user) !== -1 - ) { - const pos = groups.rows[i].value.common.members.indexOf( - 'system.user.' + _user - ); - groups.rows[i].value.common.members.splice(pos, 1); - count++; - groups.rows[i].value.from = 'system.host.' + tools.getHostName() + '.cli'; - groups.rows[i].value.ts = Date.now(); - this.objects.setObject( - groups.rows[i].value._id, - groups.rows[i].value, - err => { - if (!--count) { - return tools.maybeCallbackWithError(callback, err); - } - } - ); + } + if (obj.common.dontDelete) { + return tools.maybeCallbackWithError(callback, 'Cannot delete user, while is system user'); + } + this.objects.delObject(`system.user.${_user}`, err => { + // Remove this user from all groups + if (!err) { + this.objects.getObjectList( + { startkey: 'system.group.', endkey: 'system.group.\u9999' }, + (err, groups) => { + if (!groups) { + return tools.maybeCallback(callback); + } + + let count = 0; + for (let i = 0; i < groups.rows.length; i++) { + if (groups.rows[i].value.type !== 'group') { + continue; + } + // find all groups + if ( + groups.rows[i].value.common.members && + groups.rows[i].value.common.members.indexOf(`system.user.${_user}`) !== -1 + ) { + const pos = groups.rows[i].value.common.members.indexOf(`system.user.${_user}`); + groups.rows[i].value.common.members.splice(pos, 1); + count++; + groups.rows[i].value.from = `system.host.${tools.getHostName()}.cli`; + groups.rows[i].value.ts = Date.now(); + this.objects.setObject(groups.rows[i].value._id, groups.rows[i].value, err => { + if (!--count) { + return tools.maybeCallbackWithError(callback, err); } - } - if (!count) { - return tools.maybeCallback(callback); - } + }); } - ); - } else { - return tools.maybeCallbackWithError(callback, err); - } - }); + } + if (!count) { + return tools.maybeCallback(callback); + } + }, + ); + } else { + return tools.maybeCallbackWithError(callback, err); } - } + }); }); } @@ -234,7 +225,7 @@ export class Users { if (obj.common.members.indexOf(_user) === -1) { obj.common.members.push(_user); - obj.from = 'system.host.' + tools.getHostName() + '.cli'; + obj.from = `system.host.${tools.getHostName()}.cli`; obj.ts = Date.now(); this.objects.setObject(groupName, obj, err => { return tools.maybeCallbackWithError(callback, err); @@ -277,37 +268,35 @@ export class Users { description: 'Enter your password:', pattern: /^[^'"]+$/, message: 'No " are allowed', - hidden: true + hidden: true, }, repeatPassword: { description: 'Repeat your password:', pattern: /^[^'"]+$/, message: 'No " are allowed', - hidden: true - } - } - }; + hidden: true, + }, + }, + } as const satisfies prompt.Schema; prompt.start(); - prompt.get(schema, (err, result) => { + prompt.get>(schema, (err, result) => { if (result) { if (result.password !== result.repeatPassword) { console.log('Passwords are not identical!'); return void this.processExit(EXIT_CODES.INVALID_PASSWORD); } - // @ts-expect-error external types problem? + this.addUser(username, result.password, err => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - this.addUserToGroup(username, groupName, err => { - if (err) { - return tools.maybeCallbackWithError(callback, err); - } else { - return tools.maybeCallback(callback); - } - }); } + this.addUserToGroup(username, groupName, err => { + if (err) { + return tools.maybeCallbackWithError(callback, err); + } + return tools.maybeCallback(callback); + }); }); } else { return tools.maybeCallbackWithError(callback, err); @@ -317,15 +306,13 @@ export class Users { this.addUser(username, password, err => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - this.addUserToGroup(username, groupName, err => { - if (err) { - return tools.maybeCallbackWithError(callback, err); - } else { - return tools.maybeCallback(callback); - } - }); } + this.addUserToGroup(username, groupName, err => { + if (err) { + return tools.maybeCallbackWithError(callback, err); + } + return tools.maybeCallback(callback); + }); }); } }); @@ -346,55 +333,52 @@ export class Users { const isExisting = await this.isUser(username); if (!isExisting) { return tools.maybeCallbackWithError(callback, `User "${username}" does not exist.`); - } else { - // Check group - if (!password) { - prompt.message = ''; - prompt.delimiter = ''; - const schema = { - properties: { - password: { - description: 'Enter your password:', - pattern: /^[^'"]*$/, - message: 'No " are allowed', - hidden: true - }, - repeatPassword: { - description: 'Repeat your password:', - pattern: /^[^'"]*$/, - message: 'No " are allowed', - hidden: true - } + } + // Check group + if (!password) { + prompt.message = ''; + prompt.delimiter = ''; + const schema = { + properties: { + password: { + description: 'Enter your password:', + pattern: /^[^'"]*$/, + message: 'No " are allowed', + hidden: true, + }, + repeatPassword: { + description: 'Repeat your password:', + pattern: /^[^'"]*$/, + message: 'No " are allowed', + hidden: true, + }, + }, + } as const satisfies prompt.Schema; + prompt.start(); + + prompt.get>(schema, (err, result) => { + if (result) { + if (result.password !== result.repeatPassword) { + return tools.maybeCallbackWithError(callback, 'Passwords are not identical!'); } - }; - prompt.start(); - prompt.get(schema, (err, result) => { - if (result) { - if (result.password !== result.repeatPassword) { - return tools.maybeCallbackWithError(callback, 'Passwords are not identical!'); + this.setPassword(username, result.password, err => { + if (err) { + return tools.maybeCallbackWithError(callback, err); } - // @ts-expect-error external types problem? - this.setPassword(username, result.password, err => { - if (err) { - return tools.maybeCallbackWithError(callback, err); - } else { - return tools.maybeCallback(callback); - } - }); - } else { - return tools.maybeCallbackWithError(callback, 'No password entered!'); - } - }); - } else { - this.setPassword(username, password, err => { - if (err) { - return tools.maybeCallbackWithError(callback, err); - } else { return tools.maybeCallback(callback); - } - }); - } + }); + } else { + return tools.maybeCallbackWithError(callback, 'No password entered!'); + } + }); + } else { + this.setPassword(username, password, err => { + if (err) { + return tools.maybeCallbackWithError(callback, err); + } + return tools.maybeCallback(callback); + }); } } @@ -423,14 +407,13 @@ export class Users { } if (!obj) { return tools.maybeCallbackWithError(callback, `User "${username}" not found`); - } else { - obj.common.enabled = enable; - obj.from = `system.host.${tools.getHostName()}.cli`; - obj.ts = Date.now(); - this.objects.setObject(obj._id, obj, err => { - return tools.maybeCallbackWithError(callback, err); - }); } + obj.common.enabled = enable; + obj.from = `system.host.${tools.getHostName()}.cli`; + obj.ts = Date.now(); + this.objects.setObject(obj._id, obj, err => { + return tools.maybeCallbackWithError(callback, err); + }); }); } @@ -442,65 +425,62 @@ export class Users { * @param callback */ checkUserPassword(username: string, password: string, callback: ioBroker.ErrorCallback): void { - let schema; if (!username && !password) { prompt.message = ''; prompt.delimiter = ''; - schema = { + const schema = { properties: { username: { description: 'Enter username to check password:', pattern: /^[^'"]+$/, message: 'No " are allowed', - hidden: false + hidden: false, }, password: { description: 'Enter current password:', pattern: /^[^'"]+$/, message: 'No " are allowed', - hidden: true - } - } - }; + hidden: true, + }, + }, + } as const satisfies prompt.Schema; prompt.start(); - prompt.get(schema, (err, result) => { + prompt.get>(schema, (err, result) => { this.checkPassword(result.username, result.password, (err, res) => { if (err || !res) { return tools.maybeCallbackWithError( callback, - `Password for user "${result.username as string}" does not match${err ? `: ${err.message}` : ''}` + `Password for user "${result.username}" does not match${err ? `: ${err.message}` : ''}`, ); - } else { - return tools.maybeCallbackWithError(callback, null); } + return tools.maybeCallbackWithError(callback, null); }); }); } else if (!password) { prompt.message = ''; prompt.delimiter = ''; - schema = { + const schema = { properties: { password: { description: 'Enter current password:', pattern: /^[^'"]+$/, message: 'No " are allowed', - hidden: true - } - } - }; + hidden: true, + }, + }, + } as const satisfies prompt.Schema; prompt.start(); - prompt.get(schema, (err, result) => { + prompt.get>(schema, (err, result) => { this.checkPassword(username, result.password, (err, res) => { if (err || !res) { return tools.maybeCallbackWithError( callback, - `Password for user "${username}" does not match${err ? `: ${err.message}` : ''}` + `Password for user "${username}" does not match${err ? `: ${err.message}` : ''}`, ); - } else { - return tools.maybeCallbackWithError(callback, null); } + return tools.maybeCallbackWithError(callback, null); }); }); } else { @@ -508,11 +488,10 @@ export class Users { if (err || !res) { return tools.maybeCallbackWithError( callback, - `Password for user "${username}" does not match${err ? `: ${err.message}` : ''}` + `Password for user "${username}" does not match${err ? `: ${err.message}` : ''}`, ); - } else { - return tools.maybeCallbackWithError(callback, null); } + return tools.maybeCallbackWithError(callback, null); }); } } @@ -530,9 +509,8 @@ export class Users { } if (!obj) { return tools.maybeCallbackWithError(callback, `User "${username}" not found`); - } else { - return tools.maybeCallbackWithError(callback, null, obj.common.enabled); } + return tools.maybeCallbackWithError(callback, null, obj.common.enabled); }); } @@ -549,9 +527,8 @@ export class Users { } if (!obj) { return tools.maybeCallbackWithError(callback, `Group "${group}" not found`); - } else { - return tools.maybeCallbackWithError(callback, null, obj.common.enabled, obj.common.members); } + return tools.maybeCallbackWithError(callback, null, obj.common.enabled, obj.common.members); }); } @@ -580,14 +557,13 @@ export class Users { } if (!obj) { return tools.maybeCallbackWithError(callback, `Group "${group}" not found`); - } else { - obj.common.enabled = enable; - obj.from = `system.host.${tools.getHostName()}.cli`; - obj.ts = Date.now(); - this.objects.setObject(obj._id, obj, err => { - return tools.maybeCallbackWithError(callback, err); - }); } + obj.common.enabled = enable; + obj.from = `system.host.${tools.getHostName()}.cli`; + obj.ts = Date.now(); + this.objects.setObject(obj._id, obj, err => { + return tools.maybeCallbackWithError(callback, err); + }); }); } @@ -608,11 +584,11 @@ export class Users { common: { name: group, enabled: true, - members: [] + members: [], }, from: `system.host.${tools.getHostName()}.cli`, ts: Date.now(), - native: {} + native: {}, } as any); } } @@ -628,17 +604,15 @@ export class Users { if (group === 'administrator') { return tools.maybeCallbackWithError(callback, 'Group "administrator" cannot be deleted'); - } else { - this.objects.getObject(`system.group.${_group}`, (err, obj) => { - if (!obj) { - return tools.maybeCallbackWithError(callback, 'Group does not exists'); - } else { - this.objects.delObject(`system.group.${_group}`, err => { - return tools.maybeCallbackWithError(callback, err); - }); - } - }); } + this.objects.getObject(`system.group.${_group}`, (err, obj) => { + if (!obj) { + return tools.maybeCallbackWithError(callback, 'Group does not exists'); + } + this.objects.delObject(`system.group.${_group}`, err => { + return tools.maybeCallbackWithError(callback, err); + }); + }); } /** @@ -653,19 +627,17 @@ export class Users { this.objects.getObject(`system.group.${_group}`, (err, obj) => { if (!obj) { return tools.maybeCallbackWithError(callback, 'Group does not exists'); - } else { - const pos = obj.common.members.indexOf(`system.user.${username}`); - if (pos === -1) { - return tools.maybeCallbackWithError(callback, 'User not in group'); - } else { - obj.common.members.splice(pos, 1); - obj.from = `system.host.${tools.getHostName()}.cli`; - obj.ts = Date.now(); - this.objects.setObject(obj._id, obj, err => { - return tools.maybeCallbackWithError(callback, err); - }); - } } + const pos = obj.common.members.indexOf(`system.user.${username}`); + if (pos === -1) { + return tools.maybeCallbackWithError(callback, 'User not in group'); + } + obj.common.members.splice(pos, 1); + obj.from = `system.host.${tools.getHostName()}.cli`; + obj.ts = Date.now(); + this.objects.setObject(obj._id, obj, err => { + return tools.maybeCallbackWithError(callback, err); + }); }); } } diff --git a/packages/cli/src/lib/setup/setupVendor.ts b/packages/cli/src/lib/setup/setupVendor.ts index 38911e1d7c..6b52556a0f 100644 --- a/packages/cli/src/lib/setup/setupVendor.ts +++ b/packages/cli/src/lib/setup/setupVendor.ts @@ -49,7 +49,7 @@ export class Vendor { debug: (text: string) => console.log(text), info: (text: string) => console.log(text), error: (text: string) => console.error(text), - warn: (text: string) => console.warn(text) + warn: (text: string) => console.warn(text), }; file = file || VENDOR_FILE; @@ -94,13 +94,13 @@ export class Vendor { type: 'meta', common: { name: 'uuid', - type: 'uuid' + type: 'uuid', }, ts: new Date().getTime(), from: `system.host.${tools.getHostName()}.tools`, native: { - uuid: uuid - } + uuid: uuid, + }, }); logger.info(`object system.meta.uuid created: ${uuid}`); } catch (e) { @@ -178,9 +178,9 @@ export class Vendor { const arr = await this.objects.getObjectListAsync( { startkey: id, - endkey: id + '\u9999' + endkey: `${id}\u9999`, }, - { checked: true } + { checked: true }, ); if (arr && arr.rows && arr.rows.length) { diff --git a/packages/cli/src/lib/setup/setupVisDebug.ts b/packages/cli/src/lib/setup/setupVisDebug.ts index 71f73fd77d..e0d3df9ee9 100644 --- a/packages/cli/src/lib/setup/setupVisDebug.ts +++ b/packages/cli/src/lib/setup/setupVisDebug.ts @@ -187,7 +187,7 @@ FALLBACK: if (pckg.native && pckg.native.dependencies && pckg.native.dependencies.length) { json.push({ name: widgetset, - depends: pckg.native.dependencies + depends: pckg.native.dependencies, }); } else { json.push(widgetset); diff --git a/packages/cli/src/lib/setup/utils.ts b/packages/cli/src/lib/setup/utils.ts index 96dc75499f..ce271639a5 100644 --- a/packages/cli/src/lib/setup/utils.ts +++ b/packages/cli/src/lib/setup/utils.ts @@ -22,13 +22,13 @@ export async function getRepository(options: GetRepositoryOptions): Promise `"${repo}"`) .join(', ')}.`; } else { message = `ERROR: No repositories defined. Please define one repository as active: "iob repo set <${Object.keys( - systemRepos.native.repositories + systemRepos.native.repositories, ).join(' | ')}>"`; } diff --git a/packages/common-db/src/lib/common/aliasProcessing.ts b/packages/common-db/src/lib/common/aliasProcessing.ts index a1aa578ebe..e419e0bcf9 100644 --- a/packages/common-db/src/lib/common/aliasProcessing.ts +++ b/packages/common-db/src/lib/common/aliasProcessing.ts @@ -42,7 +42,7 @@ export function applyAliasTransformer(options: ApplyAliasTransformerOptions): io `${prefix}Type`, `${prefix}Min`, `${prefix}Max`, - `return ${transformer}` + `return ${transformer}`, ); return func( @@ -52,7 +52,7 @@ export function applyAliasTransformer(options: ApplyAliasTransformerOptions): io firstCommon.max, secondCommon.type, secondCommon.min, - secondCommon.max + secondCommon.max, ); } @@ -69,10 +69,9 @@ export function applyAliasConvenienceConversion(options: ApplyAliasConvenienceCo const lowerVal = typeof state.val === 'string' ? state.val.toLowerCase() : state.val; if (lowerVal === 'off' || lowerVal === 'aus' || state.val === '0') { return false; - } else { - // this also handles strings like "EIN" or such that will be true - return !!state.val; } + // this also handles strings like "EIN" or such that will be true + return !!state.val; } else if (targetCommon.type === 'number' && typeof state.val === 'string') { return parseFloat(state.val); } else if (targetCommon.type === 'string') { diff --git a/packages/common-db/src/lib/common/exitCodes.ts b/packages/common-db/src/lib/common/exitCodes.ts index b1fc1bb8bc..4d7d887edc 100644 --- a/packages/common-db/src/lib/common/exitCodes.ts +++ b/packages/common-db/src/lib/common/exitCodes.ts @@ -54,5 +54,5 @@ export enum EXIT_CODES { CANNOT_GET_UUID = 101, CANNOT_GET_REPO_LIST = 102, START_IMMEDIATELY_AFTER_STOP = 156, - FILE_NOT_FOUND = 404 + FILE_NOT_FOUND = 404, } diff --git a/packages/common-db/src/lib/common/interview.ts b/packages/common-db/src/lib/common/interview.ts index efc3ee9187..e48186cd43 100644 --- a/packages/common-db/src/lib/common/interview.ts +++ b/packages/common-db/src/lib/common/interview.ts @@ -19,13 +19,13 @@ interface DefaultRedisInterviewOptions { * @param options config and type information */ export async function defaultRedisInterview( - options: DefaultRedisInterviewOptions + options: DefaultRedisInterviewOptions, ): Promise { const { type, config } = options; let answer = rl.question(`Do you use a TLS connection for your "${type}" redis-server? [y/N]:`, { limit: YES_NO_REGEX, - defaultInput: 'N' + defaultInput: 'N', }); if (answer.toLowerCase() === 'n') { @@ -36,7 +36,7 @@ export async function defaultRedisInterview this.emit('logged', msg)); callback(); @@ -143,10 +143,10 @@ export function logger( level: string | UserOptions, files?: string[] | string, noStdout?: boolean, - prefix?: string + prefix?: string, ): winston.Logger { const options: Options = { - transports: [] + transports: [], }; //var defaultMaxSize;// = 10 * 1024 * 1024; @@ -197,7 +197,7 @@ export function logger( transport.level = transport.level || level; if (transport.type === 'file' && transport.enabled !== false) { - transport.filename = transport.filename || 'log/' + tools.appName; + transport.filename = transport.filename || `log/${tools.appName}`; if (!transport.fileext && transport.filename.indexOf('.log') === -1) { transport.fileext = '.log'; @@ -215,7 +215,7 @@ export function logger( transport.filename = path.normalize(transport.filename); } else { transport.filename = path.normalize( - `${tools.getControllerDir()}${isNpm ? '/../../' : '/'}${transport.filename}` + `${tools.getControllerDir()}${isNpm ? '/../../' : '/'}${transport.filename}`, ); } transport.auditFile = `${transport.filename}-audit.json`; @@ -368,7 +368,7 @@ export function logger( const opt = { name: i ? `dailyRotateFile${i}` : tools.appName, filename: path.normalize( - isNpm ? `${thisDir}/../../../log/${files[i]}` : `${thisDir}/../log/${files[i]}` + isNpm ? `${thisDir}/../../../log/${files[i]}` : `${thisDir}/../log/${files[i]}`, ), extension: '.log', datePattern: 'YYYY-MM-DD', @@ -379,7 +379,7 @@ export function logger( //colorize: (userOptions.colorize === undefined) ? true : userOptions.colorize, // TODO format.colorize() //timestamp: timestamp, // TODO: format.timestamp() //label: prefix || '', // TODO format.label() - handleExceptions: false + handleExceptions: false, //maxSize: defaultMaxSize }; @@ -392,11 +392,11 @@ export function logger( new winston.transports.Console({ level, silent: false, - format: winston.format.combine(winston.format.printf(formatter)) + format: winston.format.combine(winston.format.printf(formatter)), //colorize: (userOptions.colorize === undefined) ? true : userOptions.colorize, // TODO format.colorize() //timestamp: timestamp, // TODO: format.timestamp() //label: prefix || '' // TODO format.label() - }) + }), ); } @@ -404,8 +404,8 @@ export function logger( options.transports.push( new NotifierTransport({ level, - silent: false - }) + silent: false, + }), ); const log = winston.createLogger(options); @@ -419,9 +419,8 @@ export function logger( transport = transport.transport ? transport.transport : transport; /** @ts-expect-error we use undocumented stuff here TODO */ return `${transport.dirname}/${transport.filename.replace('%DATE%', getDate())}`; - } else { - return ''; } + return ''; }; log.on('error', error => { @@ -483,7 +482,7 @@ export function logger( try { this.log({ level: 'info', - message: `host.${hostname} Delete log file ${files[i]}` + message: `host.${hostname} Delete log file ${files[i]}`, }); console.log(`host.${hostname} Delete log file ${files[i]}`); /** @ts-expect-error we use undocumented stuff here TODO */ @@ -494,14 +493,14 @@ export function logger( level: os.platform().startsWith('win') ? 'info' : 'error', message: `host.${hostname} Cannot delete file "${path.normalize( /** @ts-expect-error we use undocumented stuff here TODO */ - `${transport.dirname}/${files[i]}` - )}": ${e}` + `${transport.dirname}/${files[i]}`, + )}": ${e}`, }); console.log( `host.${hostname} Cannot delete file "${path.normalize( /** @ts-expect-error we use undocumented stuff here TODO */ - `${transport.dirname}/${files[i]}` - )}": ${e.message}` + `${transport.dirname}/${files[i]}`, + )}": ${e.message}`, ); } } diff --git a/packages/common-db/src/lib/common/maybeCallback.test.ts b/packages/common-db/src/lib/common/maybeCallback.test.ts index 8d35ff3825..28eacb0200 100644 --- a/packages/common-db/src/lib/common/maybeCallback.test.ts +++ b/packages/common-db/src/lib/common/maybeCallback.test.ts @@ -1,4 +1,3 @@ -/* eslint-disable require-await */ /* eslint-disable @typescript-eslint/no-unused-vars */ import { maybeCallback, maybeCallbackWithError, maybeCallbackWithRedisError } from '@/lib/common/maybeCallback.js'; @@ -6,7 +5,7 @@ import { maybeCallback, maybeCallbackWithError, maybeCallbackWithRedisError } fr // ============================================================ // maybeCallbackWithError => Callback -async () => { +() => { // maybeCallbackWithError, empty callback const cb = (): void => {}; @@ -29,7 +28,7 @@ async () => { maybeCallbackWithError(cb, 'this is an error', 'why', 'are', 'you', 'calling', 'me', 'with', 'arguments'); }; -async () => { +() => { // maybeCallbackWithError, callback only takes an error argument const cb = (err?: Error | null): void => {}; @@ -52,14 +51,14 @@ async () => { maybeCallbackWithError(cb, 'this is an error', 'why', 'are', 'you', 'calling', 'me', 'with', 'arguments'); }; -async () => { +() => { // maybeCallbackWithError, callback only takes an argument that's not compatible with Error const cb = (err?: number): void => {}; // @ts-expect-error maybeCallbackWithError(cb, null); }; -async () => { +() => { // maybeCallbackWithError, callback takes an error and some additional args const cb = (err: Error | null | undefined, arg1: number, arg2: string): void => {}; @@ -96,7 +95,7 @@ async () => { // ============================================================ // maybeCallbackWithError => Promise -async () => { +() => { // maybeCallbackWithError, empty callback, or maybe no callback const cb = undefined as (() => void) | undefined; @@ -146,14 +145,14 @@ async () => { 'calling', 'me', 'with', - 'arguments' + 'arguments', ); }; // ============================================================ // maybeCallbackWithRedisError => Callback -async () => { +() => { // maybeCallbackWithRedisError, empty callback const cb = (): void => {}; @@ -176,7 +175,7 @@ async () => { maybeCallbackWithRedisError(cb, 'this is an error', 'why', 'are', 'you', 'calling', 'me', 'with', 'arguments'); }; -async () => { +() => { // maybeCallbackWithRedisError, callback only takes an error argument const cb = (err?: Error | null): void => {}; @@ -199,14 +198,14 @@ async () => { maybeCallbackWithRedisError(cb, 'this is an error', 'why', 'are', 'you', 'calling', 'me', 'with', 'arguments'); }; -async () => { +() => { // maybeCallbackWithRedisError, callback only takes an argument that's not compatible with Error const cb = (err?: number): void => {}; // @ts-expect-error maybeCallbackWithRedisError(cb, null); }; -async () => { +() => { // maybeCallbackWithRedisError, callback takes an error and some additional args const cb = (err: Error | null | undefined, arg1: number, arg2: string): void => {}; @@ -243,7 +242,7 @@ async () => { // ============================================================ // maybeCallback => Callback -async () => { +() => { // maybeCallback, empty callback const cb = (): void => {}; @@ -255,7 +254,7 @@ async () => { maybeCallback(cb, 'why', 'are', 'you', 'calling', 'me', 'with', 'arguments'); }; -async () => { +() => { // maybeCallback, callback takes some args const cb = (arg1: number, arg2?: string): void => {}; @@ -277,7 +276,7 @@ async () => { // ============================================================ // maybeCallback => Promise -async () => { +() => { // maybeCallback, empty callback, or maybe no callback const cb = undefined as (() => void) | undefined; diff --git a/packages/common-db/src/lib/common/maybeCallback.ts b/packages/common-db/src/lib/common/maybeCallback.ts index 981154c1da..c3ae4d553f 100644 --- a/packages/common-db/src/lib/common/maybeCallback.ts +++ b/packages/common-db/src/lib/common/maybeCallback.ts @@ -11,7 +11,7 @@ type MaybeCbErrCallback = (error: Error | null | undefined, ... type MaybeCbErrReturnType< TCb extends MaybeCbErrCallback | null | undefined, TErr extends Error | string | null | undefined, - TArgs extends any[] + TArgs extends any[], > = TCb extends MaybeCbErrCallback ? void @@ -31,7 +31,7 @@ type MaybeCbErrReturnType< // If a callback is given, they must match its arguments. Otherwise, they are inferred and default to any[] type MaybeCbErrCallbackParameters< CB extends MaybeCbErrCallback | null | undefined, - TErr extends Error | string | null | undefined + TErr extends Error | string | null | undefined, > = Exclude extends MaybeCbErrCallback ? // If the error argument is given, @@ -71,7 +71,7 @@ export function maybeCallback< // Limit the callback type to a valid callback type TCb extends MaybeCbCallback | null | undefined, // The callback arguments must match the callback args - TArgs extends MaybeCbCallbackParameters = MaybeCbCallbackParameters + TArgs extends MaybeCbCallbackParameters = MaybeCbCallbackParameters, >( callback: TCb, // Infer the arguments with lower priority than the callback - they need to match it. @@ -85,10 +85,7 @@ export function maybeCallback< * @param args - as many arguments as needed, which will be returned by the callback function or by the Promise * @returns if Promise is resolved with multiple arguments, an array is returned */ -export function maybeCallback( - callback?: MaybeCbCallback | null | undefined, - ...args: T -): Promise | void { +export function maybeCallback(callback?: MaybeCbCallback | null, ...args: T): Promise | void { if (typeof callback === 'function') { // if function we call it with given param setImmediate(callback, ...args); @@ -105,7 +102,7 @@ export function maybeCallbackWithError< // And the error to either an error or sting, or null/undefined TErr extends Error | string | null | undefined, // The callback arguments must match the callback args - TArgs extends MaybeCbErrCallbackParameters = MaybeCbErrCallbackParameters + TArgs extends MaybeCbErrCallbackParameters = MaybeCbErrCallbackParameters, >( callback: TCb, error: TErr, @@ -150,7 +147,7 @@ export function maybeCallbackWithRedisError< // And the error to either an error or sting, or null/undefined TErr extends Error | string | null | undefined, // The callback arguments must match the callback args - TArgs extends MaybeCbErrCallbackParameters = MaybeCbErrCallbackParameters + TArgs extends MaybeCbErrCallbackParameters = MaybeCbErrCallbackParameters, >( callback: TCb, error: TErr, diff --git a/packages/common-db/src/lib/common/password.ts b/packages/common-db/src/lib/common/password.ts index b07cdda537..966c3f9796 100644 --- a/packages/common-db/src/lib/common/password.ts +++ b/packages/common-db/src/lib/common/password.ts @@ -10,22 +10,22 @@ * The created hash is of the following format: $$$ * * Usage Example: - + var password = require('./lib/password.js'); - + password('test').hash(null, null, function (err, res) { console.log(res); - + password('test').check(res, function (err, res) { console.log('test: ' + res); }); - + password('muh').check(res, function (err, res) { console.log('muh: ' + res); }); - + }); - + * */ @@ -37,7 +37,7 @@ export interface PasswordReturnValue { hash: ( salt: string | null, iterations: number | null, - callback: (err?: Error | null, hash?: string) => void + callback: (err?: Error | null, hash?: string) => void, ) => void; } @@ -86,6 +86,6 @@ export function password(pw: string): PasswordReturnValue { } typeof callback === 'function' && callback(result); return result; // true if the complexity OK - } + }, }; } diff --git a/packages/common-db/src/lib/common/tools.ts b/packages/common-db/src/lib/common/tools.ts index 678de55bf9..b531225c30 100644 --- a/packages/common-db/src/lib/common/tools.ts +++ b/packages/common-db/src/lib/common/tools.ts @@ -26,7 +26,7 @@ import { setDefaultResultOrder } from 'node:dns'; import { applyAliasAutoScaling, applyAliasConvenienceConversion, - applyAliasTransformer + applyAliasTransformer, } from '@/lib/common/aliasProcessing.js'; import type * as DiskUsage from 'diskusage'; import * as url from 'node:url'; @@ -34,9 +34,9 @@ import { createRequire } from 'node:module'; import type { WithRequired } from '@iobroker/types-dev'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); // eslint-disable-next-line unicorn/prefer-module -const require = createRequire(import.meta.url || 'file://' + __filename); +const require = createRequire(import.meta.url || `file://${__filename}`); type DockerInformation = | { @@ -114,7 +114,7 @@ interface DockerHubResponse { /** Timestamp of last update of this image, like 2024-08-29T01:26:32.378554Z */ last_updated: string; [other: string]: unknown; - } + }, ]; [other: string]: unknown; } @@ -132,7 +132,7 @@ export enum ERRORS { ERROR_NOT_FOUND = 'Not exists', ERROR_EMPTY_OBJECT = 'null object', ERROR_NO_OBJECT = 'no object', - ERROR_DB_CLOSED = 'DB closed' + ERROR_DB_CLOSED = 'DB closed', } events.EventEmitter.prototype.setMaxListeners(100); @@ -179,7 +179,7 @@ export function copyAttributes( oldObj: Record, newObj: Record, originalObj?: Record, - isNonEdit?: boolean + isNonEdit?: boolean, ): void { for (const attr of Object.keys(oldObj)) { if ( @@ -207,7 +207,7 @@ export function copyAttributes( oldObj[attr], newObj[attr], originalObj && originalObj[attr], - isNonEdit || attr === 'nonEdit' + isNonEdit || attr === 'nonEdit', ); } } @@ -221,7 +221,7 @@ export function copyAttributes( */ export function checkNonEditable( oldObject: ioBroker.SettableObject | null, - newObject: ioBroker.SettableObject + newObject: ioBroker.SettableObject, ): boolean { if (!oldObject) { return true; @@ -238,13 +238,12 @@ export function checkNonEditable( if (oldObject.nonEdit.passHash !== hash) { delete newObject.nonEdit; return false; - } else { - oldObject.nonEdit = deepClone(newObject.nonEdit); - delete oldObject.nonEdit.password; - delete newObject.nonEdit.password; - oldObject.nonEdit.passHash = hash; - newObject.nonEdit.passHash = hash; } + oldObject.nonEdit = deepClone(newObject.nonEdit); + delete oldObject.nonEdit.password; + delete newObject.nonEdit.password; + oldObject.nonEdit.passHash = hash; + newObject.nonEdit.passHash = hash; copyAttributes(newObject.nonEdit, newObject, newObject); @@ -256,9 +255,8 @@ export function checkNonEditable( } return true; - } else { - newObject.nonEdit = oldObject.nonEdit; } + newObject.nonEdit = oldObject.nonEdit; } else if (newObject.nonEdit) { oldObject.nonEdit = deepClone(newObject.nonEdit); if (newObject.nonEdit.password) { @@ -329,7 +327,7 @@ export function decryptPhrase(password: string, data: any, callback: (decrypted? export async function isSingleHost(objects: any): Promise { const res: { rows: ioBroker.GetObjectListItem[] } = await objects.getObjectList({ startkey: 'system.host.', - endkey: 'system.host.\u9999' + endkey: 'system.host.\u9999', }); const hostObjs = res.rows.filter(obj => obj.value && obj.value.type === 'host'); return hostObjs.length <= 1; // on setup no host object is there yet @@ -347,7 +345,7 @@ export async function isHostRunning(objects: any, states: any): Promise // const res = await objects.getObjectViewAsync('system', 'host', { startkey: '', endkey: '\u9999' }); const res: GetObjectViewResult = await objects.getObjectList({ startkey: 'system.host.', - endkey: 'system.host.\u9999' + endkey: 'system.host.\u9999', }); // TODO: this check should be redundant as soon as we go back to the object view approach @@ -410,17 +408,14 @@ function findPath(path: string, url: string): string { } if (url.startsWith('http://') || url.startsWith('https://')) { return url; - } else { - if (path.startsWith('http://') || path.startsWith('https://')) { - return (path + url).replace(/\/\//g, '/').replace('http:/', 'http://').replace('https:/', 'https://'); - } else { - if (url[0] === '/') { - return `${thisDir}/..${url}`; - } else { - return `${thisDir}/../${path}${url}`; - } - } } + if (path.startsWith('http://') || path.startsWith('https://')) { + return (path + url).replace(/\/\//g, '/').replace('http:/', 'http://').replace('https:/', 'https://'); + } + if (url[0] === '/') { + return `${thisDir}/..${url}`; + } + return `${thisDir}/../${path}${url}`; } /** @@ -630,13 +625,13 @@ async function updateUuid(newUuid: string, _objects: any): Promise { type: 'meta', common: { name: 'uuid', - type: 'uuid' + type: 'uuid', }, ts: new Date().getTime(), from: `system.host.${getHostName()}.tools`, native: { - uuid: _uuid - } + uuid: _uuid, + }, }); } catch (e) { throw new Error(`Object system.meta.uuid cannot be updated: ${e.message}`); @@ -674,11 +669,11 @@ export async function createUuid(objects: any): Promise { name: 'admin', password: res, dontDelete: true, - enabled: true + enabled: true, }, ts: new Date().getTime(), from: `system.host.${getHostName()}.tools`, - native: {} + native: {}, }); console.log('object system.user.admin created'); @@ -699,7 +694,7 @@ export async function createUuid(objects: any): Promise { 'deb6f2a8-fe69-5491-0a50-a9f9b8f3419c', 'ec66c85e-fc36-f6f9-f1c9-f5a2882d23c7', 'e6203b03-f5f4-253a-e4f6-b295fc543ab7', - 'd659fa3d-7ef9-202a-ea23-acd0aff67b24' + 'd659fa3d-7ef9-202a-ea23-acd0aff67b24', ]; // check if COMMON invalid docker uuid @@ -711,30 +706,25 @@ export async function createUuid(objects: any): Promise { const licObj: ioBroker.Object = objects.getObject('system.adapter.vis.0'); if (!licObj || !licObj.native || !licObj.native.license) { return updateUuid('', objects); - } else { - // decode obj.native.license - let data; - try { - data = jwt.decode(licObj.native.license); - } catch { - data = null; - } + } + // decode obj.native.license + let data; + try { + data = jwt.decode(licObj.native.license); + } catch { + data = null; + } - if (!data || typeof data === 'string' || !data.uuid) { - // generate new UUID - return updateUuid('', objects); - } else { - if (data.uuid !== obj.native.uuid) { - return updateUuid(data.correct ? data.uuid : '', objects); - } else { - // Show error - console.warn( - `Your iobroker.vis license must be updated. Please contact info@iobroker.net to get a new license!` - ); - console.warn(`Provide following information in email: ${data.email}, invoice: ${data.invoice}`); - } - } + if (!data || typeof data === 'string' || !data.uuid) { + // generate new UUID + return updateUuid('', objects); } + if (data.uuid !== obj.native.uuid) { + return updateUuid(data.correct ? data.uuid : '', objects); + } + // Show error + console.warn(`Your iobroker.vis license must be updated. Please contact info@iobroker.net to get a new license!`); + console.warn(`Provide following information in email: ${data.email}, invoice: ${data.invoice}`); } /** @@ -758,8 +748,8 @@ export async function getFile(urlOrPath: string, fileName: string, callback: (fi responseType: 'stream', headers: { 'User-Agent': `${appName}, RND: ${randomID}, N: ${process.version}`, - 'Accept-Encoding': 'gzip' - } + 'Accept-Encoding': 'gzip', + }, }); res.data.pipe(fs.createWriteStream(tmpFile)).on('close', () => { @@ -793,7 +783,7 @@ export async function getFile(urlOrPath: string, fileName: string, callback: (fi export async function getJson( urlOrPath: string, agent: string, - callback: (sources?: Record | null, urlOrPath?: string | null) => void + callback: (sources?: Record | null, urlOrPath?: string | null) => void, ): Promise { if (typeof agent === 'function') { callback = agent; @@ -819,7 +809,7 @@ export async function getJson( ) { try { const res = await axios.get(urlOrPath, { - headers: { 'Accept-Encoding': 'gzip', timeout: 10000, 'User-Agent': agent } + headers: { 'Accept-Encoding': 'gzip', timeout: 10000, 'User-Agent': agent }, }); if (res.status !== 200 || !res.data) { @@ -904,48 +894,46 @@ export async function getJsonAsync(urlOrPath: string, agent?: string): Promise status !== 200, + }); + return result.data; + } catch (e) { + console.warn(`Cannot download json from ${urlOrPath}. Error: ${e.message}`); + return null; + } } else { - if (urlOrPath.startsWith('http://') || urlOrPath.startsWith('https://')) { + if (fs.existsSync(urlOrPath)) { try { - const result = await axios(urlOrPath, { - timeout: 10000, - headers: { 'User-Agent': agent }, - validateStatus: status => status !== 200 - }); - return result.data; + sources = fs.readJSONSync(urlOrPath); } catch (e) { - console.warn(`Cannot download json from ${urlOrPath}. Error: ${e.message}`); + console.warn(`Cannot parse json file from ${urlOrPath}. Error: ${e.message}`); return null; } - } else { - if (fs.existsSync(urlOrPath)) { - try { - sources = fs.readJSONSync(urlOrPath); - } catch (e) { - console.warn(`Cannot parse json file from ${urlOrPath}. Error: ${e.message}`); - return null; - } - return sources; - } else if (fs.existsSync(thisDir + '/../' + urlOrPath)) { - try { - sources = fs.readJSONSync(`${thisDir}/../${urlOrPath}`); - } catch (e) { - console.warn(`Cannot parse json file from ${thisDir}/../${urlOrPath}. Error: ${e.message}`); - return null; - } - return sources; - } else if (fs.existsSync(`${thisDir}/../tmp/${urlOrPath}`)) { - try { - sources = fs.readJSONSync(`${thisDir}/../tmp/${urlOrPath}`); - } catch (e) { - console.log(`Cannot parse json file from ${thisDir}/../tmp/${urlOrPath}. Error: ${e.message}`); - return null; - } - return sources; - } else { + return sources; + } else if (fs.existsSync(`${thisDir}/../${urlOrPath}`)) { + try { + sources = fs.readJSONSync(`${thisDir}/../${urlOrPath}`); + } catch (e) { + console.warn(`Cannot parse json file from ${thisDir}/../${urlOrPath}. Error: ${e.message}`); + return null; + } + return sources; + } else if (fs.existsSync(`${thisDir}/../tmp/${urlOrPath}`)) { + try { + sources = fs.readJSONSync(`${thisDir}/../tmp/${urlOrPath}`); + } catch (e) { + console.log(`Cannot parse json file from ${thisDir}/../tmp/${urlOrPath}. Error: ${e.message}`); return null; } + return sources; } + return null; } } @@ -994,7 +982,7 @@ function scanDirectory(dirName: string, list: Record : package_.licenses && package_.licenses.length ? package_.licenses[0].type : '', - licenseUrl: package_.licenses && package_.licenses.length ? package_.licenses[0].url : '' + licenseUrl: package_.licenses && package_.licenses.length ? package_.licenses[0].url : '', }; } } catch (e) { @@ -1095,7 +1083,7 @@ export function getInstalledInfo(hostRunningVersion?: string): Record, name: string, - callback: (sources: Record, name: string) => void + callback: (sources: Record, name: string) => void, ): void { getJson(sources[name].meta, '', ioPack => { const packUrl = sources[name].meta.replace('io-package.json', 'package.json'); @@ -1232,7 +1220,7 @@ function getIoPack( function _getRepositoryFile( sources: Record, path: string, - callback?: (err?: Error, sources?: Record) => void + callback?: (err?: Error, sources?: Record) => void, ): void { if (!sources._helper) { let count = 0; @@ -1324,7 +1312,7 @@ function _getRepositoryFile( async function _checkRepositoryFileHash( urlOrPath: string, additionalInfo: Record, - callback: (err?: null | Error, sources?: Record | null, hash?: string | number) => void + callback: (err?: null | Error, sources?: Record | null, hash?: string | number) => void, ): Promise { // read hash of file if (urlOrPath.startsWith('http://') || urlOrPath.startsWith('https://')) { @@ -1374,7 +1362,7 @@ async function _checkRepositoryFileHash( export function getRepositoryFile( urlOrPath: string, additionalInfo: Record, - callback: (err?: Error | null, sources?: Record, actualHash?: string | number | undefined) => void + callback: (err?: Error | null, sources?: Record, actualHash?: string | number) => void, ): void { let sources: Record = {}; let _path = ''; @@ -1456,20 +1444,20 @@ export function getRepositoryFile( _getRepositoryFile(sources, _path, err => { err && console.error(`[${new Date().toString()}] ${err.message}`); typeof callback === 'function' && callback(err, sources, actualSourcesHash); - }) + }), ); } else { // return cached sources, because no sources found console.log( `failed to download new sources, ${ additionalInfo.sources ? 'use cached sources' : 'no cached sources available' - }` + }`, ); return maybeCallbackWithError( callback, `Cannot read "${urlOrPath}"`, additionalInfo.sources, - '' + '', ); } }); @@ -1496,7 +1484,7 @@ export async function getRepositoryFileAsync( url: string, hash?: string, force?: boolean, - _actualRepo?: ioBroker.RepositoryJson | null + _actualRepo?: ioBroker.RepositoryJson | null, ): Promise { let _hash; let data; @@ -1518,7 +1506,7 @@ export async function getRepositoryFileAsync( data = await axios({ url, timeout: 10_000, - headers: { 'User-Agent': agent } + headers: { 'User-Agent': agent }, }); data = data.data; } catch (e) { @@ -1540,7 +1528,7 @@ export async function getRepositoryFileAsync( return { json: data, changed: _hash?.data ? hash !== _hash.data.hash : true, - hash: _hash && _hash.data ? _hash.data.hash : '' + hash: _hash && _hash.data ? _hash.data.hash : '', }; } @@ -1556,7 +1544,7 @@ export async function sendDiagInfo(obj: Record): Promise { params.append('data', objStr); const config = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - timeout: 4000 + timeout: 4000, }; try { @@ -1605,11 +1593,10 @@ export function getAdapterDir(adapter: string): string | null { if (!adapterPath) { return null; // inactive - } else { - const parts = path.normalize(adapterPath).split(/[\\/]/g); - parts.pop(); - return parts.join('/'); } + const parts = path.normalize(adapterPath).split(/[\\/]/g); + parts.pop(); + return parts.join('/'); } /** @@ -1678,7 +1665,7 @@ function getSystemNpmVersion(callback?: (err?: Error, version?: string | null) = callback(error, stdout); callback = undefined; } - } + }, ); } catch (e) { if (callback) { @@ -1715,8 +1702,8 @@ export async function detectPackageManagerWithFallback(cwd?: string): Promise { // Figure out which package manager is in charge (probably npm at this point) const pak = await detectPackageManagerWithFallback(options.cwd); @@ -1750,7 +1737,7 @@ export async function installNodeModule( // And install the module const installOpts: WithRequired = { - additionalArgs: [] + additionalArgs: [], }; // Set up streams to pass the command output through @@ -1787,7 +1774,7 @@ export interface UninstallNodeModuleOptions { */ export async function uninstallNodeModule( packageName: string, - options: UninstallNodeModuleOptions = {} + options: UninstallNodeModuleOptions = {}, ): Promise { // Figure out which package manager is in charge (probably npm at this point) const pak = await detectPackageManagerWithFallback(options.cwd); @@ -1887,7 +1874,7 @@ export async function getDiskInfo(): Promise { const parts = line.split(/\s+/); return { 'Disk size': parseInt(parts[2]), - 'Disk free': parseInt(parts[1]) + 'Disk free': parseInt(parts[1]), }; } } @@ -1901,7 +1888,7 @@ export async function getDiskInfo(): Promise { const parts = stdout.split('\n')[1].split(/\s+/); return { 'Disk size': parseInt(parts[1]) * 1024, - 'Disk free': parseInt(parts[3]) * 1024 + 'Disk free': parseInt(parts[3]) * 1024, }; } } catch { @@ -1928,7 +1915,10 @@ export interface CertificateInfo { /** subject that is signed */ subject: Record; /** server name this certificate belong to */ - dnsNames: { type: number; value: string }[]; + dnsNames: { + type: number; + value: string; + }[]; /** this certificate can be used for the following purposes */ keyUsage: Record; /** usable or client, server or ... */ @@ -1976,7 +1966,7 @@ export function getCertificateInfo(cert: string): null | CertificateInfo { keyUsage: crt.getExtension('keyUsage'), extKeyUsage: crt.getExtension('extKeyUsage'), validityNotBefore: crt.validity.notBefore, - validityNotAfter: crt.validity.notAfter + validityNotAfter: crt.validity.notAfter, }; // do not return info about values @@ -2022,13 +2012,13 @@ export function generateDefaultCertificates(): DefaultCertificates { const subAttrs = [ { name: 'commonName', value: getHostName() }, { name: 'organizationName', value: 'ioBroker GmbH' }, - { shortName: 'OU', value: 'iobroker' } + { shortName: 'OU', value: 'iobroker' }, ]; const issAttrs = [ { name: 'commonName', value: 'iobroker' }, { name: 'organizationName', value: 'ioBroker GmbH' }, - { shortName: 'OU', value: 'iobroker' } + { shortName: 'OU', value: 'iobroker' }, ]; cert.setSubject(subAttrs); @@ -2038,7 +2028,7 @@ export function generateDefaultCertificates(): DefaultCertificates { { name: 'basicConstraints', critical: true, - cA: false + cA: false, }, { name: 'keyUsage', @@ -2051,19 +2041,19 @@ export function generateDefaultCertificates(): DefaultCertificates { keyCertSign: true, cRLSign: true, encipherOnly: true, - decipherOnly: true + decipherOnly: true, }, { name: 'subjectAltName', altNames: [ { type: 2, - value: os.hostname() - } - ] + value: os.hostname(), + }, + ], }, { - name: 'subjectKeyIdentifier' + name: 'subjectKeyIdentifier', }, { name: 'extKeyUsage', @@ -2071,11 +2061,11 @@ export function generateDefaultCertificates(): DefaultCertificates { clientAuth: true, codeSigning: false, emailProtection: false, - timeStamping: false + timeStamping: false, }, { - name: 'authorityKeyIdentifier' - } + name: 'authorityKeyIdentifier', + }, ]); cert.sign(keys.privateKey, forge.md.sha256.create()); @@ -2085,7 +2075,7 @@ export function generateDefaultCertificates(): DefaultCertificates { return { defaultPrivate: pem_pkey, - defaultPublic: pem_cert + defaultPublic: pem_cert, }; } @@ -2156,7 +2146,7 @@ export async function getHostInfo(objects: any): Promise { time: dateObj.getTime(), timeOffset: dateObj.getTimezoneOffset(), NPM: npmVersion, - 'adapters count': Object.keys(allRepos).length + 'adapters count': Object.keys(allRepos).length, }; if (data.Platform === 'win32') { @@ -2331,7 +2321,7 @@ function sliceArgs(argsObj: IArguments, startIndex = 0): any[] { export function promisify( fn: (...args: any[]) => void, context?: any, - returnArgNames?: string[] + returnArgNames?: string[], ): (...args: any[]) => Promise { return function () { // eslint-disable-next-line prefer-rest-params @@ -2342,43 +2332,43 @@ export function promisify( return new Promise | any[]>(async (resolve, reject) => { try { // await this to allow streamlining errors not passed via callback by async methods + // eslint-disable-next-line @typescript-eslint/await-thenable await fn.apply( context, args.concat([ function (error: string | Error, result: any) { if (error) { return reject(error instanceof Error ? error : new Error(error)); - } else { - // decide on how we want to return the callback arguments - switch (arguments.length) { - case 1: // only an error was given - return resolve(); // Promise - case 2: // a single value (result) was returned - return resolve(result); - default: { - // multiple values should be returned - let ret: Record | any[]; - // eslint-disable-next-line prefer-rest-params - const extraArgs = sliceArgs(arguments, 1); - if (returnArgNames && returnArgNames.length === extraArgs.length) { - // we can build an object - ret = {}; - for (let i = 0; i < returnArgNames.length; i++) { - ret[returnArgNames[i]] = extraArgs[i]; - } - } else { - // we return the raw array - ret = extraArgs; + } + // decide on how we want to return the callback arguments + switch (arguments.length) { + case 1: // only an error was given + return resolve(); // Promise + case 2: // a single value (result) was returned + return resolve(result); + default: { + // multiple values should be returned + let ret: Record | any[]; + // eslint-disable-next-line prefer-rest-params + const extraArgs = sliceArgs(arguments, 1); + if (returnArgNames && returnArgNames.length === extraArgs.length) { + // we can build an object + ret = {}; + for (let i = 0; i < returnArgNames.length; i++) { + ret[returnArgNames[i]] = extraArgs[i]; } - return resolve(ret); + } else { + // we return the raw array + ret = extraArgs; } + return resolve(ret); } } - } - ]) + }, + ]), ); } catch (e) { - reject(e); + reject(e as Error); } }); }; @@ -2396,7 +2386,7 @@ export function promisify( export function promisifyNoError( fn: (...args: any[]) => void, context?: any, - returnArgNames?: string[] + returnArgNames?: string[], ): (...args: any[]) => Promise { return function () { // eslint-disable-next-line prefer-rest-params @@ -2432,8 +2422,8 @@ export function promisifyNoError( return resolve(ret); } } - } - ]) + }, + ]), ); }); }; @@ -2457,7 +2447,7 @@ export function setQualityForInstance(objects: any, states: any, namespace: stri { startkey: `${namespace}.`, endkey: `${namespace}.\u9999`, - include_docs: false + include_docs: false, }, (err: Error | null, _states?: GetObjectViewResult) => { if (err) { @@ -2483,7 +2473,7 @@ export function setQualityForInstance(objects: any, states: any, namespace: stri resolve(); }); } - } + }, ); }); } @@ -2717,7 +2707,7 @@ export function formatAliasValue(options: FormatAliasValueOptions): ioBroker.Sta if (targetCommon?.alias?.read) { if (!sourceCommon) { logger.error( - `${logNamespace}source in "${targetId}" does not exist for "read" function: "${targetCommon.alias.read}"` + `${logNamespace}source in "${targetId}" does not exist for "read" function: "${targetCommon.alias.read}"`, ); return null; } @@ -2727,11 +2717,11 @@ export function formatAliasValue(options: FormatAliasValueOptions): ioBroker.Sta firstCommon: targetCommon, secondCommon: sourceCommon, isRead: true, - state + state, }); } catch (e) { logger.error( - `${logNamespace}Invalid read function for "${targetId}": "${targetCommon.alias.read}" => ${e.message}` + `${logNamespace}Invalid read function for "${targetId}": "${targetCommon.alias.read}" => ${e.message}`, ); return null; } @@ -2740,7 +2730,7 @@ export function formatAliasValue(options: FormatAliasValueOptions): ioBroker.Sta if (sourceCommon?.alias?.write) { if (!targetCommon) { logger.error( - `${logNamespace}target for "${sourceId}" does not exist for "write" function: "${sourceCommon.alias.write}"` + `${logNamespace}target for "${sourceId}" does not exist for "write" function: "${sourceCommon.alias.write}"`, ); return null; } @@ -2750,11 +2740,11 @@ export function formatAliasValue(options: FormatAliasValueOptions): ioBroker.Sta firstCommon: sourceCommon, secondCommon: targetCommon, isRead: false, - state + state, }); } catch (e) { logger.error( - `${logNamespace}Invalid write function for "${sourceId}": "${sourceCommon.alias.write}" => ${e.message}` + `${logNamespace}Invalid write function for "${sourceId}": "${sourceCommon.alias.write}" => ${e.message}`, ); return null; } @@ -2808,7 +2798,7 @@ export async function removeIdFromAllEnums(objects: any, id: string, allEnums?: * @returns parsedDeps parsed dependencies */ export function parseDependencies( - dependencies: string[] | Record[] | string | Record | undefined + dependencies: string[] | Record[] | string | Record | undefined, ): Record { let adapters: Record = {}; if (Array.isArray(dependencies)) { @@ -2870,12 +2860,12 @@ export function validateGeneralObjectProperties(obj: any, extend?: boolean): voi 'chart', 'folder', 'schedule', - 'design' + 'design', ]; if (obj.type !== undefined && !allowedObjectTypes.includes(obj.type)) { throw new Error( - `obj.type has an invalid value (${obj.type}) but has to be one of ${allowedObjectTypes.join(', ')}` + `obj.type has an invalid value (${obj.type}) but has to be one of ${allowedObjectTypes.join(', ')}`, ); } @@ -2886,7 +2876,7 @@ export function validateGeneralObjectProperties(obj: any, extend?: boolean): voi if (obj.common.name !== undefined && typeof obj.common.name !== 'string' && typeof obj.common.name !== 'object') { throw new Error( - `obj.common.name has an invalid type! Expected "string" or "object", received "${typeof obj.common.name}"` + `obj.common.name has an invalid type! Expected "string" or "object", received "${typeof obj.common.name}"`, ); } else if (['adapter'].includes(obj.type) && typeof obj.common.name !== 'string') { // TODO: we need this for group/user too, but have to solve problems described in #1266 @@ -2897,7 +2887,7 @@ export function validateGeneralObjectProperties(obj: any, extend?: boolean): voi if (obj.common.type !== undefined) { if (typeof obj.common.type !== 'string') { throw new Error( - `obj.common.type has an invalid type! Expected "string", received "${typeof obj.common.type}"` + `obj.common.type has an invalid type! Expected "string", received "${typeof obj.common.type}"`, ); } @@ -2908,7 +2898,7 @@ export function validateGeneralObjectProperties(obj: any, extend?: boolean): voi throw new Error( `obj.common.type has an invalid value (${ obj.common.type - }) but has to be one of ${allowedStateTypes.join(', ')}` + }) but has to be one of ${allowedStateTypes.join(', ')}`, ); } @@ -2916,13 +2906,13 @@ export function validateGeneralObjectProperties(obj: any, extend?: boolean): voi if (obj.common.min !== undefined) { if (typeof obj.common.min !== 'number') { throw new Error( - `obj.common.min has an invalid type! Expected "number", received "${typeof obj.common.min}"` + `obj.common.min has an invalid type! Expected "number", received "${typeof obj.common.min}"`, ); } if (obj.common.type !== 'number' && obj.common.type !== 'mixed') { throw new Error( - `obj.common.min is only allowed on obj.common.type "number" or "mixed", received "${obj.common.type}"` + `obj.common.min is only allowed on obj.common.type "number" or "mixed", received "${obj.common.type}"`, ); } } @@ -2930,19 +2920,19 @@ export function validateGeneralObjectProperties(obj: any, extend?: boolean): voi if (obj.common.max !== undefined) { if (typeof obj.common.max !== 'number') { throw new Error( - `obj.common.max has an invalid type! Expected "number", received "${typeof obj.common.max}"` + `obj.common.max has an invalid type! Expected "number", received "${typeof obj.common.max}"`, ); } if (obj.common.type !== 'number' && obj.common.type !== 'mixed') { throw new Error( - `obj.common.max is only allowed on obj.common.type "number" or "mixed", received "${obj.common.type}"` + `obj.common.max is only allowed on obj.common.type "number" or "mixed", received "${obj.common.type}"`, ); } if (obj.common.min !== undefined && obj.common.min > obj.common.max) { throw new Error( - `obj.common.min (${obj.common.min}) needs to be less than or equal to obj.common.max (${obj.common.max})` + `obj.common.min (${obj.common.min}) needs to be less than or equal to obj.common.max (${obj.common.max})`, ); } } @@ -2963,7 +2953,7 @@ export function validateGeneralObjectProperties(obj: any, extend?: boolean): voi // 'array', 'object', 'json' need to be string if (['object', 'json', 'array'].includes(obj.common.type)) { throw new Error( - `Default value has to be stringified but received type "${typeof obj.common.def}"` + `Default value has to be stringified but received type "${typeof obj.common.def}"`, ); } else { throw new Error( @@ -2971,7 +2961,7 @@ export function validateGeneralObjectProperties(obj: any, extend?: boolean): voi obj.common.type === 'mixed' ? `one of type "string", "number", "boolean"` : `type "${obj.common.type}"` - } but received type "${typeof obj.common.def}"` + } but received type "${typeof obj.common.def}"`, ); } } @@ -2981,13 +2971,13 @@ export function validateGeneralObjectProperties(obj: any, extend?: boolean): voi if (obj.common.read !== undefined && typeof obj.common.read !== 'boolean') { throw new Error( - `obj.common.read has an invalid type! Expected "boolean", received "${typeof obj.common.read}"` + `obj.common.read has an invalid type! Expected "boolean", received "${typeof obj.common.read}"`, ); } if (obj.common.write !== undefined && typeof obj.common.write !== 'boolean') { throw new Error( - `obj.common.write has an invalid type! Expected "boolean", received "${typeof obj.common.write}"` + `obj.common.write has an invalid type! Expected "boolean", received "${typeof obj.common.write}"`, ); } @@ -2997,7 +2987,7 @@ export function validateGeneralObjectProperties(obj: any, extend?: boolean): voi if (obj.common.desc !== undefined && typeof obj.common.desc !== 'string' && typeof obj.common.desc !== 'object') { throw new Error( - `obj.common.desc has an invalid type! Expected "string" or "object", received "${typeof obj.common.desc}"` + `obj.common.desc has an invalid type! Expected "string" or "object", received "${typeof obj.common.desc}"`, ); } @@ -3008,7 +2998,7 @@ export function validateGeneralObjectProperties(obj: any, extend?: boolean): voi !isObject(obj.common.custom) ) { throw new Error( - `obj.common.custom has an invalid type! Expected "object", received "${typeof obj.common.custom}"` + `obj.common.custom has an invalid type! Expected "object", received "${typeof obj.common.custom}"`, ); } @@ -3020,7 +3010,7 @@ export function validateGeneralObjectProperties(obj: any, extend?: boolean): voi !Array.isArray(obj.common.states) ) { throw new Error( - `obj.common.states has an invalid type! Expected "object", received "${typeof obj.common.states}"` + `obj.common.states has an invalid type! Expected "object", received "${typeof obj.common.states}"`, ); } } @@ -3071,7 +3061,7 @@ export async function getAllEnums(objects: any): Promise = {}; const res: GetObjectViewResult = await objects.getObjectViewAsync('system', 'enum', { startkey: 'enum.', - endkey: 'enum.\u9999' + endkey: 'enum.\u9999', }); if (res?.rows) { for (const row of res.rows) { @@ -3092,11 +3082,11 @@ export async function getAllEnums(objects: any): Promise( adapter: string, objects: any, - withObjects: TWithObjects + withObjects: TWithObjects, ): Promise { const arr = await objects.getObjectListAsync({ startkey: `system.adapter.${adapter}.`, - endkey: `system.adapter.${adapter}.\u9999` + endkey: `system.adapter.${adapter}.\u9999`, }); const instances = []; @@ -3130,7 +3120,7 @@ export function execAsync(command: string, execOptions?: ExecOptions): ChildProc // we do not want to show the node.js window on Windows windowsHide: true, // And we want to capture stdout/stderr - encoding: 'utf8' + encoding: 'utf8', }; return cpExecAsync(command, { ...defaultOptions, ...execOptions }); @@ -3145,7 +3135,7 @@ export function execAsync(command: string, execOptions?: ExecOptions): ChildProc export function pipeLinewise(input: NodeJS.ReadableStream, output: NodeJS.WritableStream): void { const rl = createInterface({ input, - crlfDelay: Infinity + crlfDelay: Infinity, }); rl.on('line', line => { try { @@ -3247,7 +3237,7 @@ export function getDefaultNodeArgs(mainFile: string): string[] { export function getDefaultRequireResolvePaths(callerModule: NodeModule): string[] { const ret: string[] = [ // This is the default for require.resolve - ...callerModule.paths + ...callerModule.paths, ]; // If JS-controller was started with --preserve-symlinks, start looking where the process entry point was if (process.execArgv.includes('--preserve-symlinks') && require.main) { @@ -3287,7 +3277,7 @@ export function parseShortGithubUrl(url: string): ParsedGithubUrl | null { return { user: match.groups.user, repo: match.groups.repo, - commit: match.groups.commit + commit: match.groups.commit, }; } @@ -3317,7 +3307,7 @@ export function parseGithubPathname(pathname: string): ParsedGithubUrl | null { return { user: match.groups.user, repo: match.groups.repo, - commit: match.groups.commit + commit: match.groups.commit, }; } @@ -3331,7 +3321,7 @@ export function parseGithubPathname(pathname: string): ParsedGithubUrl | null { export function removePreservedProperties( preserve: Record, oldObj: Record, - newObj: Record + newObj: Record, ): void { for (const prop of Object.keys(preserve)) { if (isObject(preserve[prop]) && isObject(newObj[prop])) { @@ -3371,9 +3361,9 @@ export function getInstanceIndicatorObjects(namespace: string): ioBroker.StateOb type: 'boolean', read: true, write: true, - role: 'indicator.state' + role: 'indicator.state', }, - native: {} + native: {}, }, { _id: `${id}.connected`, @@ -3383,9 +3373,9 @@ export function getInstanceIndicatorObjects(namespace: string): ioBroker.StateOb type: 'boolean', read: true, write: false, - role: 'indicator.state' + role: 'indicator.state', }, - native: {} + native: {}, }, { _id: `${id}.compactMode`, @@ -3395,9 +3385,9 @@ export function getInstanceIndicatorObjects(namespace: string): ioBroker.StateOb type: 'boolean', read: true, write: false, - role: 'indicator.state' + role: 'indicator.state', }, - native: {} + native: {}, }, { _id: `${id}.cpu`, @@ -3408,22 +3398,22 @@ export function getInstanceIndicatorObjects(namespace: string): ioBroker.StateOb read: true, write: false, role: 'indicator.state', - unit: '% of one core' + unit: '% of one core', }, - native: {} + native: {}, }, { _id: `${id}.cputime`, type: 'state', common: { - name: namespace + '.cputime', + name: `${namespace}.cputime`, type: 'number', read: true, write: false, role: 'indicator.state', - unit: 'seconds' + unit: 'seconds', }, - native: {} + native: {}, }, { _id: `${id}.memHeapUsed`, @@ -3434,9 +3424,9 @@ export function getInstanceIndicatorObjects(namespace: string): ioBroker.StateOb read: true, write: false, role: 'indicator.state', - unit: 'MB' + unit: 'MB', }, - native: {} + native: {}, }, { _id: `${id}.memHeapTotal`, @@ -3447,9 +3437,9 @@ export function getInstanceIndicatorObjects(namespace: string): ioBroker.StateOb write: false, type: 'number', role: 'indicator.state', - unit: 'MB' + unit: 'MB', }, - native: {} + native: {}, }, { _id: `${id}.memRss`, @@ -3461,9 +3451,9 @@ export function getInstanceIndicatorObjects(namespace: string): ioBroker.StateOb write: false, type: 'number', role: 'indicator.state', - unit: 'MB' + unit: 'MB', }, - native: {} + native: {}, }, { _id: `${id}.uptime`, @@ -3474,9 +3464,9 @@ export function getInstanceIndicatorObjects(namespace: string): ioBroker.StateOb read: true, write: false, role: 'indicator.state', - unit: 'seconds' + unit: 'seconds', }, - native: {} + native: {}, }, { _id: `${id}.inputCount`, @@ -3488,9 +3478,9 @@ export function getInstanceIndicatorObjects(namespace: string): ioBroker.StateOb read: true, write: false, role: 'state', - unit: 'events/15 seconds' + unit: 'events/15 seconds', }, - native: {} + native: {}, }, { _id: `${id}.outputCount`, @@ -3502,9 +3492,9 @@ export function getInstanceIndicatorObjects(namespace: string): ioBroker.StateOb read: true, write: false, role: 'state', - unit: 'events/15 seconds' + unit: 'events/15 seconds', }, - native: {} + native: {}, }, { _id: `${id}.eventLoopLag`, @@ -3516,9 +3506,9 @@ export function getInstanceIndicatorObjects(namespace: string): ioBroker.StateOb read: true, write: false, role: 'state', - unit: 'ms' + unit: 'ms', }, - native: {} + native: {}, }, { _id: `${id}.sigKill`, @@ -3529,9 +3519,9 @@ export function getInstanceIndicatorObjects(namespace: string): ioBroker.StateOb read: true, write: false, desc: 'Process id that must survive. All other IDs must terminate itself', - role: 'state' + role: 'state', }, - native: {} + native: {}, }, { _id: `${id}.logLevel`, @@ -3542,10 +3532,10 @@ export function getInstanceIndicatorObjects(namespace: string): ioBroker.StateOb read: true, write: true, desc: 'Loglevel of the adapter. Will be set on start with defined value but can be overridden during runtime', - role: 'state' + role: 'state', }, - native: {} - } + native: {}, + }, ]; } @@ -3568,7 +3558,7 @@ export function getLogger(log: any): InternalLogger { }, error: function (msg: string) { console.log(msg); - } + }, }; } else if (!log.silly) { log.silly = log.debug; @@ -3590,7 +3580,7 @@ export async function setExecutableCapabilities( capabilities: string[], modeEffective?: boolean, modePermitted?: boolean, - modeInherited?: boolean + modeInherited?: boolean, ): Promise { // if not linux do nothing and silent exit if (os.platform() !== 'linux') { @@ -3655,7 +3645,7 @@ export async function setExecutableCapabilities( async function _readLicenses(login: string, password: string): Promise { const config = { headers: { Authorization: `Basic ${Buffer.from(`${login}:${password}`).toString('base64')}` }, - timeout: 4_000 + timeout: 4_000, }; try { @@ -3666,7 +3656,7 @@ async function _readLicenses(login: string, password: string): Promise { (license: { validTill: string | number }) => !license.validTill || license.validTill === '0000-00-00 00:00:00' || - new Date(license.validTill).getTime() > now + new Date(license.validTill).getTime() > now, ); } @@ -3695,78 +3685,74 @@ export async function updateLicenses(objects: any, login: string, password: stri // if login and password provided in the message, just try to read without saving it in system.licenses if (login && password) { return _readLicenses(login, password); - } else { - // get actual object - const systemLicenses: ioBroker.Object = await objects.getObjectAsync('system.licenses'); - // If password and login exist - if (systemLicenses && systemLicenses.native && systemLicenses.native.password && systemLicenses.native.login) { - try { - // get the secret to decode the password - const systemConfig: ioBroker.Object = await objects.getObjectAsync('system.config'); + } + // get actual object + const systemLicenses: ioBroker.Object = await objects.getObjectAsync('system.licenses'); + // If password and login exist + if (systemLicenses && systemLicenses.native && systemLicenses.native.password && systemLicenses.native.login) { + try { + // get the secret to decode the password + const systemConfig: ioBroker.Object = await objects.getObjectAsync('system.config'); - // decode the password - let password; - try { - password = decrypt(systemConfig.native.secret, systemLicenses.native.password); - } catch (err) { - throw new Error(`Cannot decode password: ${err.message}`); - } + // decode the password + let password; + try { + password = decrypt(systemConfig.native.secret, systemLicenses.native.password); + } catch (err) { + throw new Error(`Cannot decode password: ${err.message}`); + } - // read licenses from iobroker.net - const licenses = await _readLicenses(systemLicenses.native.login, password); - // save licenses to system.licenses and remember the time. - // merge the information together - const oldLicenses: any[] = systemLicenses.native.licenses || []; - systemLicenses.native.licenses = licenses; - oldLicenses.forEach(oldLicense => { - if (oldLicense.usedBy) { - const newLicense = licenses.find(item => item.json === oldLicense.json); - if (newLicense) { - newLicense.usedBy = oldLicense.usedBy; - } + // read licenses from iobroker.net + const licenses = await _readLicenses(systemLicenses.native.login, password); + // save licenses to system.licenses and remember the time. + // merge the information together + const oldLicenses: any[] = systemLicenses.native.licenses || []; + systemLicenses.native.licenses = licenses; + oldLicenses.forEach(oldLicense => { + if (oldLicense.usedBy) { + const newLicense = licenses.find(item => item.json === oldLicense.json); + if (newLicense) { + newLicense.usedBy = oldLicense.usedBy; } - }); + } + }); - systemLicenses.native.readTime = new Date().toISOString(); + systemLicenses.native.readTime = new Date().toISOString(); - // update read time - await objects.setObjectAsync('system.licenses', systemLicenses); - return licenses; - } catch (err) { - // if password is invalid + // update read time + await objects.setObjectAsync('system.licenses', systemLicenses); + return licenses; + } catch (err) { + // if password is invalid + if (err.message.includes('Authentication required') || err.message.includes('Cannot decode password:')) { + // clear existing licenses if exist if ( - err.message.includes('Authentication required') || - err.message.includes('Cannot decode password:') + systemLicenses && + systemLicenses.native && + systemLicenses.native.licenses && + systemLicenses.native.licenses.length ) { - // clear existing licenses if exist - if ( - systemLicenses && - systemLicenses.native && - systemLicenses.native.licenses && - systemLicenses.native.licenses.length - ) { - systemLicenses.native.licenses = []; - systemLicenses.native.readTime = new Date().toISOString(); - await objects.setObjectAsync('system.licenses', systemLicenses); - } + systemLicenses.native.licenses = []; + systemLicenses.native.readTime = new Date().toISOString(); + await objects.setObjectAsync('system.licenses', systemLicenses); } - - throw err; - } - } else { - // if password or login are empty => clear existing licenses if exist - if ( - systemLicenses && - systemLicenses.native && - systemLicenses.native.licenses && - systemLicenses.native.licenses.length - ) { - systemLicenses.native.licenses = []; - systemLicenses.native.readTime = new Date().toISOString(); - await objects.setObjectAsync('system.licenses', systemLicenses); } - throw new Error('No password or login'); + + throw err; } + } else { + // if password or login are empty => clear existing licenses if exist + if ( + systemLicenses && + systemLicenses.native && + systemLicenses.native.licenses && + systemLicenses.native.licenses.length + ) { + systemLicenses.native.licenses = []; + systemLicenses.native.readTime = new Date().toISOString(); + await objects.setObjectAsync('system.licenses', systemLicenses); + } + throw new Error('No password or login'); } } @@ -3784,7 +3770,7 @@ export interface GZipFileOptions { export function compressFileGZip( inputFilename: string, outputFilename: string, - options: GZipFileOptions = {} + options: GZipFileOptions = {}, ): Promise { const { deleteInput = false } = options; @@ -3843,7 +3829,7 @@ export function validateDataDir(dataDir: string): DataDirValidation { return { valid: isValid, path: dataDir, - reason: isValid ? 'Valid data directory' : 'Data directory is not allowed to point into node_modules folder' + reason: isValid ? 'Valid data directory' : 'Data directory is not allowed to point into node_modules folder', }; } @@ -3963,13 +3949,13 @@ export function getHostObject(oldObj?: ioBroker.HostObject | null): ioBroker.Hos .join(' ')}`, hostname, address: findIPs(), - type: ioPackage.common.name + type: ioPackage.common.name, }, native: { process: { title: process.title, versions: process.versions, - env: process.env + env: process.env, }, os: { hostname: hostname, @@ -3978,14 +3964,14 @@ export function getHostObject(oldObj?: ioBroker.HostObject | null): ioBroker.Hos arch: os.arch(), release: os.release(), endianness: os.endianness(), - tmpdir: os.tmpdir() + tmpdir: os.tmpdir(), }, hardware: { cpus: os.cpus(), totalmem: os.totalmem(), - networkInterfaces: {} - } - } + networkInterfaces: {}, + }, + }, }; if (oldObj?.common?.icon) { diff --git a/packages/common/package.json b/packages/common/package.json index 793c2714c0..c4d9a073af 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -17,7 +17,8 @@ "@iobroker/db-states-jsonl": "file:../db-states-jsonl", "@iobroker/db-states-redis": "file:../db-states-redis", "@iobroker/js-controller-common-db": "file:../common-db", - "fs-extra": "^11.1.0" + "fs-extra": "^11.1.0", + "jszip": "^3.10.1" }, "keywords": [ "ioBroker" diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 83a80a46c7..7171417fe3 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -2,13 +2,13 @@ export { getStatesConstructor, statesDbHasServer, isLocalStatesDbServer, - performStatesInterview + performStatesInterview, } from '@/lib/common/states.js'; export { getObjectsConstructor, objectsDbHasServer, isLocalObjectsDbServer, - performObjectsInterview + performObjectsInterview, } from '@/lib/common/objects.js'; export { NotificationHandler } from '@/lib/common/notificationHandler.js'; export * as zipFiles from '@/lib/common/zipFiles.js'; diff --git a/packages/common/src/lib/common/notificationHandler.ts b/packages/common/src/lib/common/notificationHandler.ts index a4ac6bf5c0..a41c6ad8ab 100644 --- a/packages/common/src/lib/common/notificationHandler.ts +++ b/packages/common/src/lib/common/notificationHandler.ts @@ -163,10 +163,10 @@ export class NotificationHandler { es: 'Notificaciones', pl: 'Powiadomienia', uk: 'Сповіщення', - 'zh-cn': '通知事项' - } + 'zh-cn': '通知事项', + }, }, - native: {} + native: {}, }); } catch (e) { this.log.error(`${this.logPrefix} Could not create notifications object: ${e.message}`); @@ -178,7 +178,7 @@ export class NotificationHandler { try { const res = await this.objects.getObjectViewAsync('system', 'instance', { startkey: 'system.adapter.', - endkey: 'system.adapter.\u9999' + endkey: 'system.adapter.\u9999', }); for (const entry of res.rows) { @@ -240,13 +240,13 @@ export class NotificationHandler { read: true, write: false, name: scopeObj.name, - desc: scopeObj.description + desc: scopeObj.description, }, - native: {} + native: {}, }); } catch (e) { this.log.error( - `${this.logPrefix} Could not create notifications object for scope "${scopeObj.scope}": ${e.message}` + `${this.logPrefix} Could not create notifications object for scope "${scopeObj.scope}": ${e.message}`, ); } } @@ -256,7 +256,7 @@ export class NotificationHandler { this.setup[scopeObj.scope] = this.setup[scopeObj.scope] || { name: scopeObj.name, description: scopeObj.description, - categories: {} + categories: {}, }; for (const categoryObj of scopeObj.categories) { @@ -279,13 +279,13 @@ export class NotificationHandler { limit: categoryObj.limit, name: categoryObj.name, severity: categoryObj.severity, - description: categoryObj.description + description: categoryObj.description, }; } catch (e) { this.log.error( `${this.logPrefix} Cannot store ${JSON.stringify(categoryObj.regex)} for scope "${ scopeObj.scope - }", category "${categoryObj.category}": ${e.message}` + }", category "${categoryObj.category}": ${e.message}`, ); } } @@ -305,7 +305,7 @@ export class NotificationHandler { if (typeof instance !== 'string') { this.log.error( - `${this.logPrefix} [addMessage] Instance has to be of type "string", got "${typeof instance}"` + `${this.logPrefix} [addMessage] Instance has to be of type "string", got "${typeof instance}"`, ); return; } @@ -341,7 +341,7 @@ export class NotificationHandler { if (!this.setup[scope]?.categories[_category]) { // no setup for this instance/category combination found - so we have nothing to add this.log.warn( - `${this.logPrefix} No configuration found for scope "${scope}" and category "${_category}"` + `${this.logPrefix} No configuration found for scope "${scope}" and category "${_category}"`, ); continue; } @@ -372,7 +372,7 @@ export class NotificationHandler { try { await this.states.setState(`system.host.${this.host}.notifications.${scope}`, { val: JSON.stringify(stateVal), - ack: true + ack: true, }); } catch (e) { this.log.error(`${this.logPrefix} Could not set notifications state for scope "${scope}": ${e.message}`); @@ -396,11 +396,11 @@ export class NotificationHandler { try { await this.states.setStateAsync(`system.host.${this.host}.notifications.${scope}`, { val: JSON.stringify(stateVal), - ack: true + ack: true, }); } catch (e) { this.log.error( - `${this.logPrefix} Could not set notifications state for scope "${scope}": ${e.message}` + `${this.logPrefix} Could not set notifications state for scope "${scope}": ${e.message}`, ); } } @@ -464,7 +464,7 @@ export class NotificationHandler { getFilteredInformation( scopeFilter: string | null | undefined, categoryFilter: string | null | undefined, - instanceFilter: string | null | undefined + instanceFilter: string | null | undefined, ): FilteredNotificationInformation { const res: FilteredNotificationInformation = {}; for (const scope of Object.keys(this.currentNotifications)) { @@ -481,7 +481,7 @@ export class NotificationHandler { res[scope] = { categories: {}, description: this.setup[scope].description, - name: this.setup[scope].name + name: this.setup[scope].name, }; for (const category of Object.keys(this.currentNotifications[scope])) { @@ -501,7 +501,7 @@ export class NotificationHandler { instances: {}, description: categoryObj.description, name: categoryObj.name, - severity: categoryObj.severity + severity: categoryObj.severity, }; for (const instance of Object.keys(this.currentNotifications[scope][category])) { @@ -511,12 +511,12 @@ export class NotificationHandler { } res[scope].categories[category].instances[instance] = { - messages: this.currentNotifications[scope][category][instance] + messages: this.currentNotifications[scope][category][instance], }; } } } - return res as FilteredNotificationInformation; + return res; } /** @@ -529,7 +529,7 @@ export class NotificationHandler { async clearNotifications( scopeFilter: string | null | undefined, categoryFilter: string | null | undefined, - instanceFilter: string | null | undefined + instanceFilter: string | null | undefined, ): Promise { for (const scope of Object.keys(this.currentNotifications)) { if (!this.currentNotifications[scope]) { @@ -585,11 +585,11 @@ export class NotificationHandler { try { await this.states.setStateAsync(`system.host.${this.host}.notifications.${scope}`, { val: JSON.stringify(stateVal), - ack: true + ack: true, }); } catch (e) { this.log.error( - `${this.logPrefix} Could not set notifications state for scope "${scope}": ${e.message}` + `${this.logPrefix} Could not set notifications state for scope "${scope}": ${e.message}`, ); } } diff --git a/packages/common/src/lib/common/objects.ts b/packages/common/src/lib/common/objects.ts index ea9c753c8e..f55de32378 100644 --- a/packages/common/src/lib/common/objects.ts +++ b/packages/common/src/lib/common/objects.ts @@ -29,7 +29,7 @@ export async function getObjectsConstructor(): Promise { export async function isLocalObjectsDbServer( dbType: string, host: string | string[], - checkIfLocalOnly: boolean = false + checkIfLocalOnly: boolean = false, ): Promise { const hasServer = await objectsDbHasServer(dbType); if (!hasServer) { @@ -79,7 +79,7 @@ interface PerformObjectsInterviewOptions { * @returns the database options obtained by the answered questionnaire */ export async function performObjectsInterview( - options: PerformObjectsInterviewOptions + options: PerformObjectsInterviewOptions, ): Promise { const { dbType, config } = options; diff --git a/packages/common/src/lib/common/states.ts b/packages/common/src/lib/common/states.ts index 6148bbe8c5..1e0bdbe33b 100644 --- a/packages/common/src/lib/common/states.ts +++ b/packages/common/src/lib/common/states.ts @@ -44,7 +44,7 @@ export async function statesDbHasServer(dbType: string): Promise { export async function isLocalStatesDbServer( dbType: string, host: string | string[], - checkIfLocalOnly = false + checkIfLocalOnly = false, ): Promise { const hasServer = await statesDbHasServer(dbType); if (!hasServer) { @@ -78,7 +78,7 @@ interface PerformStatesInterviewOptions { * @returns the database options obtained by the answered questionnaire */ export async function performStatesInterview( - options: PerformStatesInterviewOptions + options: PerformStatesInterviewOptions, ): Promise { const { dbType, config } = options; diff --git a/packages/common/src/lib/common/tools.ts b/packages/common/src/lib/common/tools.ts index aefab532fe..fa4f26ea70 100644 --- a/packages/common/src/lib/common/tools.ts +++ b/packages/common/src/lib/common/tools.ts @@ -19,7 +19,7 @@ export interface OrderedInstancesObject { export async function getInstancesOrderedByStartPrio( objects: ObjectsClient, logger: InternalLogger | typeof console, - logPrefix = '' + logPrefix = '', ): Promise { const instances: OrderedInstancesObject = { 1: [], 2: [], 3: [], admin: [] }; const allowedTiers = [1, 2, 3]; @@ -33,7 +33,7 @@ export async function getInstancesOrderedByStartPrio( try { doc = await objects.getObjectViewAsync('system', 'instance', { startkey: 'system.adapter.', - endkey: 'system.adapter.\u9999' + endkey: 'system.adapter.\u9999', }); } catch (e) { if (e.message?.startsWith('Cannot find ')) { diff --git a/packages/common/src/lib/common/zipFiles.ts b/packages/common/src/lib/common/zipFiles.ts index 0ec720ec57..2d3edb55e5 100644 --- a/packages/common/src/lib/common/zipFiles.ts +++ b/packages/common/src/lib/common/zipFiles.ts @@ -8,7 +8,7 @@ function _getAllFilesInDir( name: string, options: any, callback: (errs: null | string[], res: string[]) => void, - result?: string[] + result?: string[], ): void { objects.readDir(id, name, options, (err, files) => { result = result || []; @@ -30,7 +30,7 @@ function _getAllFilesInDir( callback(errors.length ? errors : null, _result); } }, - result + result, ); } else { result.push(`${name}/${file.file}`); @@ -50,7 +50,7 @@ function _addFile( name: string, options: any, zip: JSZip, - callback: (err: Error | null | undefined) => void + callback: (err: Error | null | undefined) => void, ): void { objects.readFile(id, name, options, (err, data, _mime) => { if (err) { @@ -86,7 +86,7 @@ export async function readDirAsZip( id: string, name: string, options: any, - callback: (err?: Error | null, base64?: string) => void + callback: (err?: Error | null, base64?: string) => void, ): Promise { if (typeof options === 'function') { callback = options; @@ -154,7 +154,7 @@ async function _checkDir(_options: CheckDirOptions): Promise { return; } - root += '/' + parts.shift(); + root += `/${parts.shift()}`; try { await objects.readDirAsync(id, root, options); @@ -173,7 +173,7 @@ async function _writeOneFile( id: string, name: string, filename: string, - options: any + options: any, ): Promise { let data = await zip.files[filename].async('nodebuffer'); @@ -193,7 +193,7 @@ export async function writeDirAsZip( id: string, name: string, data: Buffer, - options: any + options: any, ): Promise { const zip = new JSZip(); @@ -236,7 +236,7 @@ export async function readObjectsAsZip( objects: ObjectsClient, rootId: string, adapter: string, - options: any = {} + options: any = {}, ): Promise { if (adapter) { // try to load processor of adapter @@ -262,10 +262,10 @@ export async function readObjectsAsZip( try { data = options.stringify(data, options ? options.settings : null); } catch { - data.id = keys[f].replace(/\./g, '/').substring(rootId.length + 1) + '.json'; + data.id = `${keys[f].replace(/\./g, '/').substring(rootId.length + 1)}.json`; } } else { - data.id = keys[f].replace(/\./g, '/').substring(rootId.length + 1) + '.json'; + data.id = `${keys[f].replace(/\./g, '/').substring(rootId.length + 1)}.json`; } if (typeof data.data === 'object') { data.data = JSON.stringify(data.data, null, 2); @@ -284,7 +284,7 @@ async function _writeOneObject( rootId: string, filename: string, options: any, - callback: (err?: Error | null) => void + callback: (err?: Error | null) => void, ): Promise { try { const bufferData = await zip.files[filename].async('nodebuffer'); @@ -329,7 +329,7 @@ export async function writeObjectsAsZip( adapter: string, data: Buffer, options: any, - callback: (err?: Error | null) => void + callback: (err?: Error | null) => void, ): Promise { options = options || {}; diff --git a/packages/controller/package.json b/packages/controller/package.json index 9aed0a3a7b..4f18a3eb56 100644 --- a/packages/controller/package.json +++ b/packages/controller/package.json @@ -29,7 +29,6 @@ "deep-clone": "^3.0.3", "fs-extra": "^11.1.0", "jsonwebtoken": "^9.0.0", - "jszip": "^3.10.1", "loadavg-windows": "^1.1.1", "node-schedule": "^2.1.1", "pidusage": "^3.0.2", diff --git a/packages/controller/src/lib/adapterAutoUpgradeManager.ts b/packages/controller/src/lib/adapterAutoUpgradeManager.ts index 58abb21670..72605a7407 100644 --- a/packages/controller/src/lib/adapterAutoUpgradeManager.ts +++ b/packages/controller/src/lib/adapterAutoUpgradeManager.ts @@ -53,7 +53,7 @@ export class AdapterAutoUpgradeManager { none: '', patch: '~', minor: '^', - major: '>' + major: '>', } as const; /** Prefix for log messages */ private readonly logPrefix: string; @@ -114,7 +114,7 @@ export class AdapterAutoUpgradeManager { semver.satisfies( repoAdapterInfo.version, `${this.SEMVER_RANGE_MAPPING[adapterConfig.upgradePolicy]}${adapterConfig.version}`, - { includePrerelease: true } + { includePrerelease: true }, ) ) { try { @@ -122,19 +122,19 @@ export class AdapterAutoUpgradeManager { upgradedAdapters.push({ name: repoAdapterInfo.name, newVersion: repoAdapterInfo.version, - oldVersion: adapterConfig.version + oldVersion: adapterConfig.version, }); this.logger.info( - `${this.logPrefix} Successfully upgraded adapter "${repoAdapterInfo.name}" to ${repoAdapterInfo.version}` + `${this.logPrefix} Successfully upgraded adapter "${repoAdapterInfo.name}" to ${repoAdapterInfo.version}`, ); } catch (e) { this.logger.error( - `${this.logPrefix} Could not upgrade adapter "${repoAdapterInfo.name}" to ${repoAdapterInfo.version}: ${e.message}` + `${this.logPrefix} Could not upgrade adapter "${repoAdapterInfo.name}" to ${repoAdapterInfo.version}: ${e.message}`, ); failedAdapters.push({ name: repoAdapterInfo.name, newVersion: repoAdapterInfo.version, - oldVersion: adapterConfig.version + oldVersion: adapterConfig.version, }); } } @@ -157,7 +157,7 @@ export class AdapterAutoUpgradeManager { objects: this.objects, states: this.states, params: {}, - processExit: () => undefined + processExit: () => undefined, }); await upgrade.upgradeAdapter(repoName, `${name}@${version}`, false, true, false); @@ -184,8 +184,12 @@ export class AdapterAutoUpgradeManager { private async getRepository(name: string): Promise> { const obj = await this.objects.getObjectAsync('system.repositories'); - const jsonContent: (ioBroker.RepositoryJson & { _repoInfo?: any }) | null | undefined = - obj?.native?.repositories?.[name]?.json; + const jsonContent: + | (ioBroker.RepositoryJson & { + _repoInfo?: any; + }) + | null + | undefined = obj?.native?.repositories?.[name]?.json; if (!jsonContent) { throw new Error(`Could not get repository information for "${name}"`); @@ -201,7 +205,7 @@ export class AdapterAutoUpgradeManager { private async getAutoUpdateConfiguration(): Promise { const res = await this.objects.getObjectViewAsync('system', 'adapter', { startkey: 'system.adapter.', - endkey: 'system.adapter.\u9999' + endkey: 'system.adapter.\u9999', }); if (!res) { @@ -214,14 +218,14 @@ export class AdapterAutoUpgradeManager { .filter( row => (defaultPolicy && defaultPolicy !== 'none') || - (row.value?.common.automaticUpgrade && row.value.common.automaticUpgrade !== 'none') + (row.value?.common.automaticUpgrade && row.value.common.automaticUpgrade !== 'none'), ) .map(row => { return { // ts can not infer, that we filtered out falsy row.value entries - name: row.value!.common.name, - version: row.value!.common.version, - upgradePolicy: row.value!.common.automaticUpgrade! || defaultPolicy + name: row.value.common.name, + version: row.value.common.version, + upgradePolicy: row.value.common.automaticUpgrade! || defaultPolicy, }; }); } diff --git a/packages/controller/src/lib/adapterUpgradeManager.ts b/packages/controller/src/lib/adapterUpgradeManager.ts index 4031641108..fdb92ebd7d 100644 --- a/packages/controller/src/lib/adapterUpgradeManager.ts +++ b/packages/controller/src/lib/adapterUpgradeManager.ts @@ -72,7 +72,7 @@ export class AdapterUpgradeManager { private readonly response: ServerResponse = { running: true, stderr: [], - stdout: [] + stdout: [], }; /** Used to stop the stop shutdown timeout */ private shutdownAbortController?: AbortController; @@ -142,10 +142,10 @@ export class AdapterUpgradeManager { for (const instance of instances) { const updatedObj = { common: { - enabled + enabled, }, from: `system.host.${this.hostname}`, - ts + ts, } as Partial; await this.objects.extendObjectAsync(instance, updatedObj); @@ -164,7 +164,7 @@ export class AdapterUpgradeManager { objects: this.objects, processExit: processExitHandler, states: this.states, - params: {} + params: {}, }); try { @@ -188,7 +188,7 @@ export class AdapterUpgradeManager { certPublicName: this.certPublicName, certPrivateName: this.certPrivateName, port: this.port, - useHttps: true + useHttps: true, }); } else { this.startInsecureWebServer({ port: this.port, useHttps: false }); @@ -247,7 +247,7 @@ export class AdapterUpgradeManager { async getAllEnabledInstances(): Promise { const res = await this.objects.getObjectListAsync({ startkey: `system.adapter.${this.adapterName}.`, - endkey: `system.adapter.${this.adapterName}.\u9999` + endkey: `system.adapter.${this.adapterName}.\u9999`, }); let enabledInstances: string[] = []; diff --git a/packages/controller/src/lib/blocklistManager.ts b/packages/controller/src/lib/blocklistManager.ts index 6cef113478..28c27be8e9 100644 --- a/packages/controller/src/lib/blocklistManager.ts +++ b/packages/controller/src/lib/blocklistManager.ts @@ -3,7 +3,7 @@ import { HIGHEST_UNICODE_SYMBOL, SYSTEM_ADAPTER_PREFIX, SYSTEM_CONFIG_ID, - SYSTEM_REPOSITORIES_ID + SYSTEM_REPOSITORIES_ID, } from '@iobroker/js-controller-common-db/constants'; import semver from 'semver'; @@ -52,7 +52,7 @@ export class BlocklistManager { const instancesView = await this.objects.getObjectViewAsync('system', 'instance', { startkey: SYSTEM_ADAPTER_PREFIX, - endkey: SYSTEM_ADAPTER_PREFIX + HIGHEST_UNICODE_SYMBOL + endkey: SYSTEM_ADAPTER_PREFIX + HIGHEST_UNICODE_SYMBOL, }); for (const row of instancesView.rows) { @@ -66,7 +66,7 @@ export class BlocklistManager { systemConfigObj, systemRepoObj, adapterName: obj.common.name, - version: obj.common.version + version: obj.common.version, }); if (!isBlocked) { diff --git a/packages/controller/src/lib/multihostServer.js b/packages/controller/src/lib/multihostServer.js index a66f68fdc7..4a12158316 100644 --- a/packages/controller/src/lib/multihostServer.js +++ b/packages/controller/src/lib/multihostServer.js @@ -13,7 +13,16 @@ import { tools as dbTools } from '@iobroker/js-controller-common-db'; const PORT = 50005; const MULTICAST_ADDR = '239.255.255.250'; -/** @class */ +/** + * The Multihost Server allows connection from other ioBroker hosts + * + * @param hostname + * @param logger + * @param config + * @param info + * @param ips + * @param secret + */ export function MHServer(hostname, logger, config, info, ips, secret) { const count = 0; const buffer = {}; @@ -35,7 +44,7 @@ export function MHServer(hostname, logger, config, info, ips, secret) { user: config.objects.user, pass: config.objects.pass, options: config.objects.options, - maxQueue: config.objects.maxQueue + maxQueue: config.objects.maxQueue, }; } @@ -47,7 +56,7 @@ export function MHServer(hostname, logger, config, info, ips, secret) { user: config.states.user, pass: config.states.pass, options: config.states.options, - maxQueue: config.states.maxQueue + maxQueue: config.states.maxQueue, }; } @@ -59,7 +68,7 @@ export function MHServer(hostname, logger, config, info, ips, secret) { server.send(text, 0, text.length, rinfo.port, rinfo.address); } catch (e) { logger.warn( - `host.${hostname} Multi-host discovery server: cannot send answer to ${rinfo.address}:${rinfo.port}: ${e}` + `host.${hostname} Multi-host discovery server: cannot send answer to ${rinfo.address}:${rinfo.port}: ${e}`, ); } }); @@ -85,7 +94,9 @@ export function MHServer(hostname, logger, config, info, ips, secret) { hash.on('readable', () => { const data = hash.read(); - data && callback(data.toString('hex')); + if (data) { + callback(data.toString('hex')); + } }); hash.write(secret + salt); @@ -101,7 +112,7 @@ export function MHServer(hostname, logger, config, info, ips, secret) { const ts = new Date().getTime(); checkAuthList(ts); - const id = rinfo.address + ':' + rinfo.port; + const id = `${rinfo.address}:${rinfo.port}`; switch (msg.cmd) { case 'browse': @@ -113,9 +124,9 @@ export function MHServer(hostname, logger, config, info, ips, secret) { auth: config.multihostService.secure, cmd: msg.cmd, id: msg.id, - result: 'invalid password' + result: 'invalid password', }, - rinfo + rinfo, ); } else { authList[id].auth = true; @@ -129,9 +140,9 @@ export function MHServer(hostname, logger, config, info, ips, secret) { info: info, hostname: hostname, slave: !dbTools.isLocalObjectsDbServer(config.objects.type, config.objects.host), - result: 'ok' + result: 'ok', }, - rinfo + rinfo, ); } }); @@ -148,15 +159,15 @@ export function MHServer(hostname, logger, config, info, ips, secret) { info: info, hostname: hostname, slave: !dbTools.isLocalObjectsDbServer(config.objects.type, config.objects.host), - result: 'ok' + result: 'ok', }, - rinfo + rinfo, ); } else { authList[id] = { time: ts, salt: (Math.random() * 1000000 + ts).toString().substring(0, 16), - auth: false + auth: false, }; // padding if (authList[id].salt.length < 16) { @@ -168,9 +179,9 @@ export function MHServer(hostname, logger, config, info, ips, secret) { cmd: msg.cmd, id: msg.id, result: 'not authenticated', - salt: authList[id].salt + salt: authList[id].salt, }, - rinfo + rinfo, ); } break; @@ -180,9 +191,9 @@ export function MHServer(hostname, logger, config, info, ips, secret) { { cmd: msg.cmd, id: msg.id, - result: 'unknown command' + result: 'unknown command', }, - rinfo + rinfo, ); break; } @@ -197,14 +208,14 @@ export function MHServer(hostname, logger, config, info, ips, secret) { if (count > 10) { return logger.warn( - 'host.' + hostname + ' Multi-host discovery server: Port ' + PORT + ' is occupied. Service stopped.' + `host.${hostname} Multi-host discovery server: Port ${PORT} is occupied. Service stopped.`, ); } server = dgram.createSocket({ type: 'udp4', reuseAddr: true }); server.on('error', err => { - logger.error('host.' + hostname + ' Multi-host discovery server: error: ' + err.stack); + logger.error(`host.${hostname} Multi-host discovery server: error: ${err.stack}`); server.close(); server = null; @@ -216,7 +227,7 @@ export function MHServer(hostname, logger, config, info, ips, secret) { }, 5000); }); - server.on('close', _err => { + server.on('close', () => { server = null; if (!initTimer && !stopped) { @@ -231,7 +242,7 @@ export function MHServer(hostname, logger, config, info, ips, secret) { // following messages are allowed const text = msg.toString(); const now = new Date().getTime(); - const id = rinfo.address + ':' + rinfo.port; + const id = `${rinfo.address}:${rinfo.port}`; for (const ids in buffer) { if (!lastFrame[ids]) { @@ -251,7 +262,7 @@ export function MHServer(hostname, logger, config, info, ips, secret) { if (!buffer[id] && text[0] !== '{') { // ignore message logger.debug( - `host.${hostname} Multi-host discovery server: Message from ${rinfo.address} ignored: ${text}` + `host.${hostname} Multi-host discovery server: Message from ${rinfo.address} ignored: ${text}`, ); } else { buffer[id] = (buffer[id] || '') + msg.toString(); @@ -277,7 +288,7 @@ export function MHServer(hostname, logger, config, info, ips, secret) { } const address = server.address(); logger.info( - `host.${hostname} Multi-host discovery server: service started on ${address.address}:${address.port}` + `host.${hostname} Multi-host discovery server: service started on ${address.address}:${address.port}`, ); }); @@ -296,7 +307,9 @@ export function MHServer(hostname, logger, config, info, ips, secret) { server = null; } catch { server = null; - callback && callback(); + if (callback) { + callback(); + } } } else if (callback) { callback(); diff --git a/packages/controller/src/lib/objects.ts b/packages/controller/src/lib/objects.ts index cbb951b493..c620cec143 100644 --- a/packages/controller/src/lib/objects.ts +++ b/packages/controller/src/lib/objects.ts @@ -13,7 +13,9 @@ interface GetHostOptions { config: ioBroker.IoBrokerJson; } -export type TaskObject = ioBroker.SettableObject & { state?: ioBroker.SettableState }; +export type TaskObject = ioBroker.SettableObject & { + state?: ioBroker.SettableState; +}; /** * Get all ioBroker objects which should be created in the `system.host.` scope @@ -34,9 +36,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { type: 'boolean', read: true, write: false, - role: 'indicator' + role: 'indicator', }, - native: {} + native: {}, }); objs.push({ @@ -49,9 +51,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { write: false, min: 0, role: 'value', - unit: 'processes' + unit: 'processes', }, - native: {} + native: {}, }); objs.push({ @@ -63,9 +65,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, desc: 'Node.js version of the host process.', - role: 'state' + role: 'state', }, - native: {} + native: {}, }); objs.push({ @@ -77,9 +79,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, desc: 'The output of the "update" command from the package manager like apt or yum', - role: 'state' + role: 'state', }, - native: {} + native: {}, }); } @@ -93,9 +95,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { write: false, min: 0, role: 'value', - unit: 'processes' + unit: 'processes', }, - native: {} + native: {}, }); objs.push({ @@ -108,9 +110,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { write: false, min: 0, role: 'value', - unit: 'instances' + unit: 'instances', }, - native: {} + native: {}, }); objs.push({ @@ -123,9 +125,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { write: false, min: 0, role: 'value', - unit: '% of one core' + unit: '% of one core', }, - native: {} + native: {}, }); objs.push({ @@ -138,9 +140,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { write: false, min: 0, role: 'value', - unit: 'seconds' + unit: 'seconds', }, - native: {} + native: {}, }); objs.push({ @@ -154,9 +156,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, min: 0, - max: 100 + max: 100, }, - native: {} + native: {}, }); objs.push({ @@ -169,9 +171,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, min: 0, - unit: 'MB' + unit: 'MB', }, - native: {} + native: {}, }); if (fs.existsSync('/proc/meminfo')) { @@ -185,9 +187,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, min: 0, - unit: 'MB' + unit: 'MB', }, - native: {} + native: {}, }); } @@ -201,9 +203,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, min: 0, - unit: 'MB' + unit: 'MB', }, - native: {} + native: {}, }); objs.push({ @@ -217,9 +219,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, min: 0, - unit: 'MB' + unit: 'MB', }, - native: {} + native: {}, }); objs.push({ @@ -232,9 +234,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, min: 0, - unit: 'seconds' + unit: 'seconds', }, - native: {} + native: {}, }); objs.push({ @@ -246,9 +248,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { role: 'value', read: true, write: false, - name: `${hostname} - load average 1min` + name: `${hostname} - load average 1min`, }, - native: {} + native: {}, }); objs.push({ @@ -259,9 +261,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, type: 'boolean', - role: 'indicator' + role: 'indicator', }, - native: {} + native: {}, }); objs.push({ @@ -273,9 +275,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, type: 'number', - role: 'value' + role: 'value', }, - native: {} + native: {}, }); objs.push({ @@ -288,9 +290,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, role: 'value', - unit: 'events/15 seconds' + unit: 'events/15 seconds', }, - native: {} + native: {}, }); objs.push({ @@ -303,9 +305,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, role: 'value', - unit: 'events/15 seconds' + unit: 'events/15 seconds', }, - native: {} + native: {}, }); objs.push({ @@ -318,9 +320,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, role: 'value', - unit: 'ms' + unit: 'ms', }, - native: {} + native: {}, }); objs.push({ @@ -332,9 +334,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: true, desc: 'Loglevel of the host process. Will be set on start with defined value but can be overridden during runtime', - role: 'state' + role: 'state', }, - native: {} + native: {}, }); objs.push({ @@ -345,13 +347,13 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { type: 'number', read: true, write: false, - role: 'value' + role: 'value', }, native: {}, state: { val: process.pid, - ack: true - } + ack: true, + }, }); if (config.system.checkDiskInterval) { @@ -365,9 +367,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, role: 'value', - unit: 'MiB' + unit: 'MiB', }, - native: {} + native: {}, }); objs.push({ @@ -380,9 +382,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { read: true, write: false, role: 'value', - unit: 'MiB' + unit: 'MiB', }, - native: {} + native: {}, }); objs.push({ @@ -396,9 +398,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { write: true, def: DEFAULT_DISK_WARNING_LEVEL, role: 'level', - unit: '%' + unit: '%', }, - native: {} + native: {}, }); } @@ -412,9 +414,9 @@ export function getHostObjects(options: GetHostOptions): TaskObject[] { type: 'string', read: true, write: false, - role: 'date' + role: 'date', }, - native: {} + native: {}, }); } diff --git a/packages/controller/src/lib/objects/objectsInMemServer.ts b/packages/controller/src/lib/objects/objectsInMemServer.ts index 2cefc642ba..f52e323df1 100644 --- a/packages/controller/src/lib/objects/objectsInMemServer.ts +++ b/packages/controller/src/lib/objects/objectsInMemServer.ts @@ -1,6 +1,6 @@ // Deprecated. This is only for back compatibility by tests! console.warn( - 'Deprecated! Please use require("@iobroker/db-objects-file").Server in tests to start a server and then use require("@iobroker/db-objects-file").Client to connect with a client against this server!' + 'Deprecated! Please use require("@iobroker/db-objects-file").Server in tests to start a server and then use require("@iobroker/db-objects-file").Client to connect with a client against this server!', ); import { Server } from '@iobroker/db-objects-file'; diff --git a/packages/controller/src/lib/preinstallCheck.ts b/packages/controller/src/lib/preinstallCheck.ts index 520b791dce..7d68a25df8 100644 --- a/packages/controller/src/lib/preinstallCheck.ts +++ b/packages/controller/src/lib/preinstallCheck.ts @@ -57,31 +57,31 @@ function checkNpmVersion(): Promise { for (const unsupportedVersion of UNSUPPORTED_NPM_VERSION_RANGES) { if (gte(npmVersion, unsupportedVersion.start) && lt(npmVersion, unsupportedVersion.end)) { console.warn( - '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!', ); console.warn('WARNING:'); console.warn('You are using an unsupported npm version!'); console.warn('This can lead to problems when installing further packages'); console.warn(); console.warn( - `Please use "npm install -g npm@${RECOMMENDED_NPM_VERSION}" to upgrade npm to ${RECOMMENDED_NPM_VERSION}.x or ` + `Please use "npm install -g npm@${RECOMMENDED_NPM_VERSION}" to upgrade npm to ${RECOMMENDED_NPM_VERSION}.x or `, ); console.warn('use "npm install -g npm@latest" to install a supported version of npm!'); console.warn( - 'You need to make sure to repeat this step after installing an update to NodeJS and/or npm.' + 'You need to make sure to repeat this step after installing an update to NodeJS and/or npm.', ); console.warn( - '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' + '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!', ); process.exit(EXIT_CODE_CANNOT_INSTALL_NPM_PACKET); } } resolve(npmVersion); } - } + }, ); } catch (e) { - reject(e); + reject(e as Error); } }); } @@ -113,7 +113,7 @@ function parseVersion(version: string): VersionObject { return { major: parseInt(parsed[1]), minor: parseInt(parsed[2]), - build: parseInt(parsed[3]) + build: parseInt(parsed[3]), }; } diff --git a/packages/controller/src/lib/restart.ts b/packages/controller/src/lib/restart.ts index ae2628a3fd..4e672a554d 100644 --- a/packages/controller/src/lib/restart.ts +++ b/packages/controller/src/lib/restart.ts @@ -44,7 +44,7 @@ export default async function restart(callback?: () => void): Promise { const child = spawn(cmd, args, { detached: true, stdio: ['ignore', 'ignore', 'ignore'], - windowsHide: true + windowsHide: true, }); child.unref(); } @@ -56,7 +56,7 @@ export default async function restart(callback?: () => void): Promise { } // eslint-disable-next-line unicorn/prefer-module -const modulePath = url.fileURLToPath(import.meta.url || 'file://' + __filename); +const modulePath = url.fileURLToPath(import.meta.url || `file://${__filename}`); if (process.argv[1] === modulePath) { restart(); } diff --git a/packages/controller/src/lib/states/statesInMemServer.ts b/packages/controller/src/lib/states/statesInMemServer.ts index 9b22290ef9..124f5851f0 100644 --- a/packages/controller/src/lib/states/statesInMemServer.ts +++ b/packages/controller/src/lib/states/statesInMemServer.ts @@ -1,6 +1,6 @@ // Deprecated. This is only for back compatibility by tests! console.warn( - 'Deprecated! Please use require("@iobroker/db-states-file").Server in tests to start a server and then use require("@iobroker/db-states-file").Client to connect with a client against this server!' + 'Deprecated! Please use require("@iobroker/db-states-file").Server in tests to start a server and then use require("@iobroker/db-states-file").Client to connect with a client against this server!', ); import { Server } from '@iobroker/db-states-file'; diff --git a/packages/controller/src/lib/upgradeManager.ts b/packages/controller/src/lib/upgradeManager.ts index d2c85a903e..d9a0c04ad7 100644 --- a/packages/controller/src/lib/upgradeManager.ts +++ b/packages/controller/src/lib/upgradeManager.ts @@ -67,7 +67,7 @@ class UpgradeManager { private readonly response: ServerResponse = { running: true, stderr: [], - stdout: [] + stdout: [], }; /** Used to stop the stop shutdown timeout */ private shutdownAbortController?: AbortController; @@ -172,7 +172,7 @@ class UpgradeManager { async npmInstall(): Promise { const res = await tools.installNodeModule(`iobroker.js-controller@${this.version}`, { cwd: '/opt/iobroker', - debug: true + debug: true, }); this.response.stderr.push(...res.stderr.split('\n')); @@ -238,7 +238,7 @@ class UpgradeManager { */ webServerCallback(res: http.ServerResponse): void { res.writeHead(200, { - 'Access-Control-Allow-Origin': '*' + 'Access-Control-Allow-Origin': '*', }); res.end(JSON.stringify(this.response)); @@ -339,20 +339,20 @@ class UpgradeManager { const { certPublic, certPrivate } = await this.getCertificates({ objects, certPublicName, - certPrivateName + certPrivateName, }); return { useHttps: obj.native.secure, port: obj.native.port, certPublic, - certPrivate + certPrivate, }; } return { useHttps: false, - port: obj.native.port + port: obj.native.port, }; } @@ -428,7 +428,7 @@ function registerErrorHandlers(upgradeManager: UpgradeManager): void { * else it will be canceled when the file itself stops the controller */ // eslint-disable-next-line unicorn/prefer-module -const modulePath = url.fileURLToPath(import.meta.url || 'file://' + __filename); +const modulePath = url.fileURLToPath(import.meta.url || `file://${__filename}`); if (process.argv[1] === modulePath) { main(); } diff --git a/packages/controller/src/lib/vis/states.ts b/packages/controller/src/lib/vis/states.ts index ba2375d707..c35ea8f612 100644 --- a/packages/controller/src/lib/vis/states.ts +++ b/packages/controller/src/lib/vis/states.ts @@ -56,7 +56,7 @@ async function calcProject(options: CalculateProjectOptions): Promise[] | string | Record; @@ -255,7 +255,7 @@ function getConfig(): ioBroker.IoBrokerJson | never { logger = toolsLogger('info', [tools.appName]); } logger.error( - `${hostLogPrefix} conf/${tools.appName.toLowerCase()}.json missing - call node ${tools.appName.toLowerCase()}.js setup` + `${hostLogPrefix} conf/${tools.appName.toLowerCase()}.json missing - call node ${tools.appName.toLowerCase()}.js setup`, ); process.exit(EXIT_CODES.MISSING_CONFIG_JSON); } else { @@ -292,10 +292,10 @@ async function _startMultihost(_config: ioBroker.IoBrokerJson, secret: string | model: cpus && cpus[0] && cpus[0].model ? cpus[0].model : 'unknown', cpus: cpus ? cpus.length : 1, mem: os.totalmem(), - ostype: os.type() + ostype: os.type(), }, tools.findIPs(), - secret + secret, ); } @@ -333,12 +333,12 @@ async function startMultihost(__config?: ioBroker.IoBrokerJson): Promise - _startMultihost(_config, secret!) + _startMultihost(_config, secret!), ); } else { try { @@ -367,18 +367,18 @@ async function startMultihost(__config?: ioBroker.IoBrokerJson): Promise void): void { logger.info( `${hostLogPrefix} instance "${obj._id}" ${ obj.common.enabled ? 'enabled' : 'disabled' - } via .alive` + } via .alive`, ); obj.from = hostObjectPrefix; obj.ts = Date.now(); @@ -583,7 +583,7 @@ function createStates(onConnect: () => void): void { if ( typeof state.val === 'string' && state.val !== currentLevel && - ['silly', 'debug', 'info', 'warn', 'error'].includes(state.val as string) + ['silly', 'debug', 'info', 'warn', 'error'].includes(state.val) ) { config.log.level = state.val; for (const transport in logger.transports) { @@ -592,7 +592,7 @@ function createStates(onConnect: () => void): void { // @ts-expect-error it's our custom property !logger.transports[transport]._defaultConfigLoglevel ) { - logger.transports[transport].level = state.val as string; + logger.transports[transport].level = state.val; } } logger.info(`${hostLogPrefix} Loglevel changed from "${currentLevel}" to "${state.val}"`); @@ -603,7 +603,7 @@ function createStates(onConnect: () => void): void { await states.setState(`${hostObjectPrefix}.logLevel`, { val: currentLevel, ack: true, - from: hostObjectPrefix + from: hostObjectPrefix, }); } else if (id.startsWith(`${hostObjectPrefix}.plugins.`) && id.endsWith('.enabled')) { const state = stateOrMessage as ioBroker.State; @@ -626,7 +626,7 @@ function createStates(onConnect: () => void): void { pluginHandler.instantiatePlugin( pluginName, pluginHandler.getPluginConfig(pluginName)!, - controllerDir + controllerDir, ); pluginHandler.setDatabaseForPlugin(pluginName, objects, states); pluginHandler.initPlugin(pluginName, ioPackage); @@ -634,7 +634,7 @@ function createStates(onConnect: () => void): void { } else { if (!pluginHandler.destroy(pluginName)) { logger.info( - `${hostLogPrefix} Plugin ${pluginName} could not be disabled. Please restart ioBroker to disable it.` + `${hostLogPrefix} Plugin ${pluginName} could not be disabled. Please restart ioBroker to disable it.`, ); } } @@ -674,9 +674,9 @@ function createStates(onConnect: () => void): void { statesDisconnectTimeout = null; handleDisconnect(); }, - (config.states.connectTimeout || 2000) + (!compactGroupController ? 500 : 0) + (config.states.connectTimeout || 2000) + (!compactGroupController ? 500 : 0), ); - } + }, }); } @@ -693,7 +693,7 @@ async function initializeController(): Promise { objects: objects, log: logger, logPrefix: hostLogPrefix, - host: hostname + host: hostname, }; notificationHandler = new NotificationHandler(notificationSettings); @@ -719,7 +719,7 @@ async function initializeController(): Promise { if (!isStopping) { pluginHandler.setDatabaseForPlugins(objects, states); await pluginHandler.initPlugins(ioPackage); - states!.subscribe(`${hostObjectPrefix}.plugins.*`); + states.subscribe(`${hostObjectPrefix}.plugins.*`); // Do not start if we're still stopping the instances await checkHost(); @@ -787,7 +787,7 @@ function createObjects(onConnect: () => void): void { objectsDisconnectTimeout = null; handleDisconnect(); }, - (config.objects.connectTimeout || 2000) + (!compactGroupController ? 500 : 0) + (config.objects.connectTimeout || 2000) + (!compactGroupController ? 500 : 0), ); // give the main controller a bit longer, so that adapter and compact processes can exit before }, @@ -815,7 +815,7 @@ function createObjects(onConnect: () => void): void { ) { compactProcs[proc.config.common.compactGroup].instances.splice( compactProcs[proc.config.common.compactGroup].instances.indexOf(id as any), - 1 + 1, ); } @@ -846,7 +846,7 @@ function createObjects(onConnect: () => void): void { ) { compactProcs[proc.config.common.compactGroup].instances.splice( compactProcs[proc.config.common.compactGroup].instances.indexOf(id as any), - 1 + 1, ); } proc.config = obj; @@ -879,7 +879,7 @@ function createObjects(onConnect: () => void): void { ) { compactProcs[proc.config.common.compactGroup].instances.splice( compactProcs[proc.config.common.compactGroup].instances.indexOf(id as any), - 1 + 1, ); } if (proc.restartTimer) { @@ -895,7 +895,7 @@ function createObjects(onConnect: () => void): void { } else if (installQueue.find(obj => obj.id === id)) { // ignore object changes when still in the installation queue logger.debug( - `${hostLogPrefix} ignore object change because the adapter is still in installation/rebuild queue` + `${hostLogPrefix} ignore object change because the adapter is still in installation/rebuild queue`, ); } else { const _ipArr = tools.findIPs(); @@ -915,7 +915,7 @@ function createObjects(onConnect: () => void): void { ) { compactProcs[proc.config.common.compactGroup].instances.splice( compactProcs[proc.config.common.compactGroup].instances.indexOf(id as any), - 1 + 1, ); } if (proc.restartTimer) { @@ -958,7 +958,7 @@ function createObjects(onConnect: () => void): void { logger.info('The primary host is no longer active. Checking responsibilities.'); checkPrimaryHost(); } - } + }, }); } @@ -972,7 +972,7 @@ function startAliveInterval(): void { states!.setState(`${hostObjectPrefix}.compactModeEnabled`, { ack: true, from: hostObjectPrefix, - val: config.system.compact || false + val: config.system.compact || false, }); } reportInterval = setInterval(reportStatus, config.system.statisticsInterval); @@ -998,7 +998,7 @@ async function checkSystemLocaleSupported(): Promise { message: 'Your redis server is using an unsupported locale. This can lead to unexpected behavior of your ioBroker installation as well as data loss. ' + 'Please configure your Redis Server according to https://forum.iobroker.net/topic/52976/wichtiger-hinweis-f%C3%BCr-redis-installationen?_=1678099836122', - instance: `system.host.${hostname}` + instance: `system.host.${hostname}`, }); } } @@ -1038,7 +1038,7 @@ async function reportStatus(): Promise { val: true, ack: true, expire: Math.floor(config.system.statisticsInterval / 1_000) + 10, - from: id + from: id, }); // provide infos about current process @@ -1060,7 +1060,7 @@ async function reportStatus(): Promise { states.setState(`${id}.cpu`, { ack: true, from: id, - val: Math.round(100 * stats.cpu) / 100 + val: Math.round(100 * stats.cpu) / 100, }); states.setState(`${id}.cputime`, { ack: true, from: id, val: stats.ctime / 1_000 }); outputCount += 2; @@ -1075,17 +1075,17 @@ async function reportStatus(): Promise { states.setState(`${id}.memRss`, { val: Math.round(mem.rss / 10485.76 /* 1MB / 100 */) / 100, ack: true, - from: id + from: id, }); states.setState(`${id}.memHeapTotal`, { val: Math.round(mem.heapTotal / 10485.76 /* 1MB / 100 */) / 100, ack: true, - from: id + from: id, }); states.setState(`${id}.memHeapUsed`, { val: Math.round(mem.heapUsed / 10485.76 /* 1MB / 100 */) / 100, ack: true, - from: id + from: id, }); } catch (e) { logger.error(`${hostLogPrefix} Cannot read memoryUsage data: ${e.message}`); @@ -1105,7 +1105,7 @@ async function reportStatus(): Promise { states.setState(`${id}.memAvailable`, { val: Math.round(parseInt(m[1], 10) * 0.001024), ack: true, - from: id + from: id, }); outputCount++; } @@ -1136,19 +1136,19 @@ async function reportStatus(): Promise { scope: 'system', category: 'diskSpaceIssues', message: `Your system has only ${percentageFree.toFixed(2)} % of disk space left.`, - instance: `system.host.${hostname}` + instance: `system.host.${hostname}`, }); } states.setState(`${id}.diskSize`, { val: diskSize, ack: true, - from: id + from: id, }); states.setState(`${id}.diskFree`, { val: diskFree, ack: true, - from: id + from: id, }); outputCount += 2; @@ -1200,7 +1200,7 @@ async function reportStatus(): Promise { async function changeHost( objs: ioBroker.GetObjectViewItem[], oldHostname: string, - newHostname: string + newHostname: string, ): Promise { for (const row of objs) { if (row?.value?.common.host === oldHostname) { @@ -1208,8 +1208,8 @@ async function changeHost( obj.common.host = newHostname; logger.info( `${hostLogPrefix} Reassign instance ${obj._id.substring( - SYSTEM_ADAPTER_PREFIX.length - )} from ${oldHostname} to ${newHostname}` + SYSTEM_ADAPTER_PREFIX.length, + )} from ${oldHostname} to ${newHostname}`, ); obj.from = `system.host.${tools.getHostName()}`; obj.ts = Date.now(); @@ -1294,7 +1294,7 @@ function cleanAutoSubscribes(instanceID: ioBroker.ObjectIDs.Instance, callback: } } !count && callback && callback(); - } + }, ); } @@ -1342,7 +1342,7 @@ async function checkHost(): Promise { try { hostDoc = await objects!.getObjectViewAsync('system', 'host', { startkey: 'system.host.', - endkey: 'system.host.\u9999' + endkey: 'system.host.\u9999', }); } catch { // ignore @@ -1358,7 +1358,7 @@ async function checkHost(): Promise { // find out all instances and rewrite it to actual hostname instanceDoc = await objects!.getObjectViewAsync('system', 'instance', { startkey: SYSTEM_ADAPTER_PREFIX, - endkey: `${SYSTEM_ADAPTER_PREFIX}\u9999` + endkey: `${SYSTEM_ADAPTER_PREFIX}\u9999`, }); } catch (e) { if (e.message.startsWith('Cannot find ')) { @@ -1370,31 +1370,30 @@ async function checkHost(): Promise { logger.info(`${hostLogPrefix} no instances found`); // no instances found return; - } else { - // reassign all instances - await changeHost(instanceDoc.rows, oldHostname, hostname); - logger.info(`${hostLogPrefix} Delete host ${oldId}`); + } + // reassign all instances + await changeHost(instanceDoc.rows, oldHostname, hostname); + logger.info(`${hostLogPrefix} Delete host ${oldId}`); - try { - // delete host object - await objects!.delObjectAsync(oldId); - } catch { - // ignore - } + try { + // delete host object + await objects!.delObjectAsync(oldId); + } catch { + // ignore + } - try { - // delete all hosts states - const newHostDoc = await objects!.getObjectViewAsync('system', 'state', { - startkey: `system.host.${oldHostname}.`, - endkey: `system.host.${oldHostname}.\u9999`, - include_docs: true - }); + try { + // delete all hosts states + const newHostDoc = await objects!.getObjectViewAsync('system', 'state', { + startkey: `system.host.${oldHostname}.`, + endkey: `system.host.${oldHostname}.\u9999`, + include_docs: true, + }); - await delObjects(newHostDoc.rows); - return; - } catch { - // ignore - } + await delObjects(newHostDoc.rows); + return; + } catch { + // ignore } } } @@ -1407,187 +1406,183 @@ async function checkHost(): Promise { async function collectDiagInfo(type: DiagInfoType): Promise | null> { if (type !== 'extended' && type !== 'normal' && type !== 'no-city') { return null; - } else { - let systemConfig; - let err; - - try { - systemConfig = await objects!.getObject(SYSTEM_CONFIG_ID); - } catch (e) { - err = e; - } + } + let systemConfig; + let err; - if (err || !systemConfig?.common) { - logger.warn( - `System config object is corrupt, please run "${tools.appNameLowerCase} setup first". Error: ${err.message}` - ); - systemConfig = systemConfig || { common: {} }; - systemConfig.common = systemConfig.common || {}; - } + try { + systemConfig = await objects!.getObject(SYSTEM_CONFIG_ID); + } catch (e) { + err = e; + } - let obj; - try { - obj = await objects!.getObjectAsync('system.meta.uuid'); - } catch { - // ignore obj is undefined - } + if (err || !systemConfig?.common) { + logger.warn( + `System config object is corrupt, please run "${tools.appNameLowerCase} setup first". Error: ${err.message}`, + ); + systemConfig = systemConfig || { common: {} }; + systemConfig.common = systemConfig.common || {}; + } - // create uuid - if (!obj) { - obj = { native: { uuid: 'not found' } }; - } + let obj; + try { + obj = await objects!.getObjectAsync('system.meta.uuid'); + } catch { + // ignore obj is undefined + } - let doc; - err = null; + // create uuid + if (!obj) { + obj = { native: { uuid: 'not found' } }; + } - try { - doc = await objects!.getObjectViewAsync('system', 'host', { - startkey: 'system.host.', - endkey: 'system.host.\u9999' - }); - } catch (e) { - err = e; - } + let doc; + err = null; - const { noCompactInstances, noInstances } = await _getNumberOfInstances(); + try { + doc = await objects!.getObjectViewAsync('system', 'host', { + startkey: 'system.host.', + endkey: 'system.host.\u9999', + }); + } catch (e) { + err = e; + } + + const { noCompactInstances, noInstances } = await _getNumberOfInstances(); + + // we need to show city and country at the beginning, so include it now and delete it later if not allowed. + const diag: Record = { + uuid: obj.native.uuid, + language: systemConfig.common.language, + country: '', + city: '', + hosts: [], + node: process.version, + arch: os.arch(), + docker: tools.isDocker(), + adapters: {}, + statesType: config.states.type, // redis or file + objectsType: config.objects.type, // redis or file + noInstances, + compactMode: config.system.compact, + noCompactInstances, + }; - // we need to show city and country at the beginning, so include it now and delete it later if not allowed. - const diag: Record = { - uuid: obj.native.uuid, - language: systemConfig.common.language, - country: '', - city: '', - hosts: [], - node: process.version, - arch: os.arch(), - docker: tools.isDocker(), - adapters: {}, - statesType: config.states.type, // redis or file - objectsType: config.objects.type, // redis or file - noInstances, - compactMode: config.system.compact, - noCompactInstances - }; + if (type === 'extended' || type === 'no-city') { + const cpus = os.cpus(); + diag.country = 'country' in systemConfig.common ? systemConfig.common.country : 'unknown'; + diag.model = cpus && cpus[0] && cpus[0].model ? cpus[0].model : 'unknown'; + diag.cpus = cpus ? cpus.length : 1; + diag.mem = os.totalmem(); + diag.ostype = os.type(); + delete diag.city; + } + if (type === 'extended') { + diag.city = 'city' in systemConfig.common ? systemConfig.common.city : 'unknown'; + } else if (type === 'normal') { + delete diag.city; + delete diag.country; + } - if (type === 'extended' || type === 'no-city') { - const cpus = os.cpus(); - diag.country = 'country' in systemConfig.common ? systemConfig.common.country : 'unknown'; - diag.model = cpus && cpus[0] && cpus[0].model ? cpus[0].model : 'unknown'; - diag.cpus = cpus ? cpus.length : 1; - diag.mem = os.totalmem(); - diag.ostype = os.type(); - delete diag.city; - } - if (type === 'extended') { - diag.city = 'city' in systemConfig.common ? systemConfig.common.city : 'unknown'; - } else if (type === 'normal') { - delete diag.city; - delete diag.country; - } + if (!err && doc?.rows.length) { + doc.rows.sort((a, b) => { + try { + return semver.lt(a.value.common.installedVersion ?? '0.0.0', b.value.common.installedVersion ?? '0.0.0') + ? 1 + : 0; + } catch { + logger.error( + `${hostLogPrefix} Invalid versions: ${a.value.common.installedVersion ?? '0.0.0'}[${ + a.value.common.name ?? 'unknown' + }] or ${b.value.common.installedVersion ?? '0.0.0'}[${b.value.common.name ?? 'unknown'}]`, + ); + return 0; + } + }); - if (!err && doc?.rows.length) { - doc.rows.sort((a, b) => { - try { - return semver.lt( - a.value.common.installedVersion ?? '0.0.0', - b.value.common.installedVersion ?? '0.0.0' - ) - ? 1 - : 0; - } catch { - logger.error( - `${hostLogPrefix} Invalid versions: ${a.value.common.installedVersion ?? '0.0.0'}[${ - a.value.common.name ?? 'unknown' - }] or ${b.value.common.installedVersion ?? '0.0.0'}[${b.value.common.name ?? 'unknown'}]` - ); - return 0; - } + // Read installed versions of all hosts + for (const row of doc.rows) { + diag.hosts.push({ + version: row.value.common.installedVersion, + platform: row.value.common.platform, + type: row.value.native.os.platform, }); - - // Read installed versions of all hosts - for (const row of doc.rows) { - diag.hosts.push({ - version: row.value.common.installedVersion, - platform: row.value.common.platform, - type: row.value.native.os.platform - }); - } } + } - doc = null; - err = null; + doc = null; + err = null; - try { - doc = await objects!.getObjectViewAsync('system', 'adapter', { - startkey: SYSTEM_ADAPTER_PREFIX, - endkey: `${SYSTEM_ADAPTER_PREFIX}\u9999` - }); - } catch (e) { - err = e; - } + try { + doc = await objects!.getObjectViewAsync('system', 'adapter', { + startkey: SYSTEM_ADAPTER_PREFIX, + endkey: `${SYSTEM_ADAPTER_PREFIX}\u9999`, + }); + } catch (e) { + err = e; + } - const foundVisAdapters = new Set<(typeof VIS_ADAPTERS)[number]>(); + const foundVisAdapters = new Set<(typeof VIS_ADAPTERS)[number]>(); - if (!err && doc?.rows.length) { - // Read installed versions of all adapters - for (const row of doc.rows) { - diag.adapters[row.value.common.name] = { - version: row.value.common.version, - platform: row.value.common.platform, - installedFrom: row.value.common.installedFrom - }; + if (!err && doc?.rows.length) { + // Read installed versions of all adapters + for (const row of doc.rows) { + diag.adapters[row.value.common.name] = { + version: row.value.common.version, + platform: row.value.common.platform, + installedFrom: row.value.common.installedFrom, + }; - if (VIS_ADAPTERS.includes(row.value.common.name as (typeof VIS_ADAPTERS)[number])) { - foundVisAdapters.add(row.value.common.name as (typeof VIS_ADAPTERS)[number]); - } + if (VIS_ADAPTERS.includes(row.value.common.name as (typeof VIS_ADAPTERS)[number])) { + foundVisAdapters.add(row.value.common.name as (typeof VIS_ADAPTERS)[number]); } } - // read the number of vis data points - for (const visAdapter of foundVisAdapters) { - const { calcProjects } = await import('./lib/vis/states.js'); - - try { - const points = await calcProjects({ objects: objects!, instance: 0, visAdapter }); - let total = null; - const tasks = []; - - if (points?.length) { - for (const point of points) { - if (point.id === `${visAdapter}.0.datapoints.total`) { - total = point.val; - } + } + // read the number of vis data points + for (const visAdapter of foundVisAdapters) { + const { calcProjects } = await import('./lib/vis/states.js'); - tasks.push({ - _id: point.id, - type: 'state', - native: {}, - common: { - name: 'Datapoints count', - role: 'state', - type: 'number', - read: true, - write: false - }, - state: { - val: point.val, - ack: true - } - }); + try { + const points = await calcProjects({ objects: objects!, instance: 0, visAdapter }); + let total = null; + const tasks = []; + + if (points?.length) { + for (const point of points) { + if (point.id === `${visAdapter}.0.datapoints.total`) { + total = point.val; } - } - if (total !== null) { - diag[visAdapter] = total; + tasks.push({ + _id: point.id, + type: 'state', + native: {}, + common: { + name: 'Datapoints count', + role: 'state', + type: 'number', + read: true, + write: false, + }, + state: { + val: point.val, + ack: true, + }, + }); } + } - await extendObjects(tasks); - } catch (e) { - logger.error(`${hostLogPrefix} cannot call visUtils: ${e.message}`); + if (total !== null) { + diag[visAdapter] = total; } - } - return diag; + await extendObjects(tasks); + } catch (e) { + logger.error(`${hostLogPrefix} cannot call visUtils: ${e.message}`); + } } + + return diag; } // check if some IPv4 address found. If not try in 30 seconds one more time (max 10 times) @@ -1635,7 +1630,7 @@ function setIPs(ipList?: string[]): void { objects!.setObject( oldObj._id, oldObj, - err => err && logger.error(`${hostLogPrefix} Cannot write host object: ${err.message}`) + err => err && logger.error(`${hostLogPrefix} Cannot write host object: ${err.message}`), ); } @@ -1687,12 +1682,12 @@ async function setMeta(): Promise { name: hostname + compactGroupObjectPrefix + compactGroup, cmd: `${process.argv[0]} ${`${process.execArgv.join(' ')} `.replace( /--inspect-brk=\d+ /, - '' + '', )}${process.argv.slice(1).join(' ')}`, hostname: hostname, - address: tools.findIPs() + address: tools.findIPs(), }, - native: {} + native: {}, }; } else { newObj = getHostObject(oldObj); @@ -1727,7 +1722,7 @@ async function setMeta(): Promise { id, hostname, config, - isCompactGroupController: compactGroupController + isCompactGroupController: compactGroupController, }); // delete obsolete states and create new ones @@ -1739,14 +1734,14 @@ async function setMeta(): Promise { if (err) { logger && logger.error( - `${hostLogPrefix} Could not collect ${hostObjectPrefix} states to check for obsolete states: ${err.message}` + `${hostLogPrefix} Could not collect ${hostObjectPrefix} states to check for obsolete states: ${err.message}`, ); } else if (doc?.rows) { // identify existing states for deletion, because they are not in the new tasks-list let thishostStates = doc.rows; if (!compactGroupController) { thishostStates = doc.rows.filter( - out1 => !out1.id.includes(hostObjectPrefix + compactGroupObjectPrefix) + out1 => !out1.id.includes(hostObjectPrefix + compactGroupObjectPrefix), ); } const pluginStatesIndex = `${hostObjectPrefix}.plugins.`.length; @@ -1801,7 +1796,7 @@ async function setMeta(): Promise { } catch (e) { logger && logger.error( - `${hostLogPrefix} Cannot delete file ${VENDOR_BOOTSTRAP_FILE}: ${e.message}` + `${hostLogPrefix} Cannot delete file ${VENDOR_BOOTSTRAP_FILE}: ${e.message}`, ); } } catch (e) { @@ -1812,7 +1807,7 @@ async function setMeta(): Promise { } catch (e) { logger && logger.error( - `${hostLogPrefix} Cannot delete file ${VENDOR_BOOTSTRAP_FILE}: ${e.message}` + `${hostLogPrefix} Cannot delete file ${VENDOR_BOOTSTRAP_FILE}: ${e.message}`, ); } } @@ -1824,13 +1819,13 @@ async function setMeta(): Promise { } catch (e) { logger && logger.error( - `${hostLogPrefix} Cannot delete file ${VENDOR_BOOTSTRAP_FILE}: ${e.message}` + `${hostLogPrefix} Cannot delete file ${VENDOR_BOOTSTRAP_FILE}: ${e.message}`, ); } } } } - } + }, ); } @@ -1851,7 +1846,7 @@ async function sendTo( objName: string, command: string, message: ioBroker.MessagePayload, - callback?: ioBroker.ErrorCallback | ioBroker.MessageCallbackInfo + callback?: ioBroker.ErrorCallback | ioBroker.MessageCallbackInfo, ): Promise { if (!states) { return; @@ -1874,7 +1869,7 @@ async function sendTo( message: message, id: callbackId++, ack: false, - time: Date.now() + time: Date.now(), }; if (callbackId > 0xffffffff) { callbackId = 1; @@ -1891,7 +1886,7 @@ async function sendTo( } catch (e) { // do not stringify the object, we had the issue with the invalid string length on serialization logger.error( - `${hostLogPrefix} [sendTo] Could not push message "${inspect(obj)}" to "${objName}": ${e.message}` + `${hostLogPrefix} [sendTo] Could not push message "${inspect(obj)}" to "${objName}": ${e.message}`, ); if (obj.callback && obj.callback.id) { if (typeof callback === 'function') { @@ -1926,10 +1921,9 @@ async function getVersionFromHost(hostId: ioBroker.ObjectIDs.Host): Promise { if (!upload) { upload = new Upload({ states: states!, - objects: objects! + objects: objects!, }); } @@ -1957,7 +1951,7 @@ async function uploadAdapter(task: UploadTask): Promise { states!.pushMessage(msg.from, { command: 'warn', text, from: `system.host.${hostname}` }), error: (text: string) => // @ts-expect-error formally text is not allowed in Message, why not wrapped in message payload property? - states!.pushMessage(msg.from, { command: 'error', text, from: `system.host.${hostname}` }) + states!.pushMessage(msg.from, { command: 'error', text, from: `system.host.${hostname}` }), } : undefined; @@ -2001,7 +1995,7 @@ async function processMessage(msg: ioBroker.SendableMessage): Promise sendTo(msg.from, 'cmdExit', { id: msg.message.id, data: exitCode }), - 1_000 + 1_000, ); } }); @@ -2067,7 +2061,7 @@ async function processMessage(msg: ioBroker.SendableMessage): Promise 1) { // someone has requested repo previous to us logger.debug( - `${hostLogPrefix} Repository update already running, registered instance "${msg.from}"` + `${hostLogPrefix} Repository update already running, registered instance "${msg.from}"`, ); return; } @@ -2124,7 +2118,7 @@ async function processMessage(msg: ioBroker.SendableMessage): Promise (text += chunk.toString())) .on('end', () => { @@ -2382,7 +2376,7 @@ async function processMessage(msg: ioBroker.SendableMessage): Promise // done - sendTo(msg.from, msg.command, [stats.size], msg.callback) + sendTo(msg.from, msg.command, [stats.size], msg.callback), ); } else { sendTo(msg.from, msg.command, [0], msg.callback); @@ -2423,7 +2417,7 @@ async function processMessage(msg: ioBroker.SendableMessage): Promise msg.callback && msg.from && sendTo(msg.from, msg.command, { error: err?.message }, msg.callback) + err => msg.callback && msg.from && sendTo(msg.from, msg.command, { error: err?.message }, msg.callback), ); break; @@ -2786,7 +2780,7 @@ async function processMessage(msg: ioBroker.SendableMessage): Promise l.product) - .join(', ')}"` + .join(', ')}"`, ); msg.callback && msg.from && sendTo(msg.from, msg.command, { result: licenses }, msg.callback); } catch (e) { @@ -3088,7 +3082,7 @@ async function getInstances(): Promise { for (const instance of instances) { // register all common fields that may not be deleted, like "mobile" or "history" if (instance.common.preserveSettings) { - objects!.addPreserveSettings(instance.common.preserveSettings); + objects.addPreserveSettings(instance.common.preserveSettings); } // @ts-expect-error is mode web valid, it is not in schema @@ -3103,7 +3097,7 @@ async function getInstances(): Promise { id: instance._id, disabled: true, version: instance.common.installedVersion || instance.common.version, - installedFrom: instance.common.installedFrom + installedFrom: instance.common.installedFrom, }); // start install queue if not started installQueue.length === 1 && installAdapters(); @@ -3185,7 +3179,7 @@ function checkAndAddInstance(instance: ioBroker.InstanceObject, ipArr: string[]) objects!.setObject(instance._id, instance, err => err ? logger.error(`${hostLogPrefix} Cannot update hostname for ${instance._id}: ${err.message}`) - : logger.info(`${hostLogPrefix} Set hostname ${hostname} for ${instance._id}`) + : logger.info(`${hostLogPrefix} Set hostname ${hostname} for ${instance._id}`), ); } @@ -3197,7 +3191,7 @@ function checkAndAddInstance(instance: ioBroker.InstanceObject, ipArr: string[]) if (instance.common.runAsCompactMode) { // @ts-expect-error we need types if this can exist compactProcs[instance.common.compactGroup] = compactProcs[instance.common.compactGroup] || { - instances: [] + instances: [], }; } } @@ -3278,7 +3272,7 @@ function initInstances(): void { id: id, disabled: true, version: proc.config.common.installedVersion || proc.config.common.version, - installedFrom: proc.config.common.installedFrom + installedFrom: proc.config.common.installedFrom, }); // start install queue if not started installQueue.length === 1 && installAdapters(); @@ -3303,7 +3297,7 @@ function checkVersion(name: string, version: string, instances: Record instances[p] && instances[p].common && instances[p].common.name === name + p => instances[p] && instances[p].common && instances[p].common.name === name, ); for (const inst of filteredInst) { if (version && !semver.satisfies(instances[inst].common.version, version, { includePrerelease: true })) { throw new Error( - `required adapter "${name}" has wrong version. Installed "${instances[inst].common.version}", required "${version}"!` + `required adapter "${name}" has wrong version. Installed "${instances[inst].common.version}", required "${version}"!`, ); } isFound = true; @@ -3343,7 +3337,7 @@ function checkVersion(name: string, version: string, instances: Record { const res = await objects!.getObjectViewAsync('system', 'instance', { startkey: SYSTEM_ADAPTER_PREFIX, - endkey: `${SYSTEM_ADAPTER_PREFIX}\u9999` + endkey: `${SYSTEM_ADAPTER_PREFIX}\u9999`, }); const instances: Record = {}; const globInstances: Record = {}; @@ -3413,7 +3407,7 @@ function storePids(): void { fs.writeFileSync(tools.getPidsFileName(), JSON.stringify(pids)); } catch (err) { logger.error( - `${hostLogPrefix} could not store process id list in ${tools.getPidsFileName()}! Please check permissions and user ownership of this file. Was ioBroker started as a different user? Please also check left over processes when stopping ioBroker!\n${err}` + `${hostLogPrefix} could not store process id list in ${tools.getPidsFileName()}! Please check permissions and user ownership of this file. Was ioBroker started as a different user? Please also check left over processes when stopping ioBroker!\n${err}`, ); logger.error(`${hostLogPrefix} Please consider running the installation fixer when on Linux.`); } @@ -3438,7 +3432,7 @@ function installAdapters(): void { const commandScope = task.rebuild ? 'rebuild' : 'install'; if (compactGroupController && !task.rebuild) { logger.info( - `${hostLogPrefix} adapter ${name} is not installed, installation will be handled by main controller ... waiting ` + `${hostLogPrefix} adapter ${name} is not installed, installation will be handled by main controller ... waiting `, ); setImmediate(() => { installQueue.shift(); @@ -3457,11 +3451,11 @@ function installAdapters(): void { logger.warn( `${hostLogPrefix} adapter "${name}" seems to be installed for a different version of Node.js. Trying to rebuild it... ${ procs[task.id].rebuildCounter - } attempt` + } attempt`, ); } else { logger.warn( - `${hostLogPrefix} startInstance cannot find adapter "${name}". Try to install it... ${proc.downloadRetry} attempt` + `${hostLogPrefix} startInstance cannot find adapter "${name}". Try to install it... ${proc.downloadRetry} attempt`, ); } @@ -3500,7 +3494,7 @@ function installAdapters(): void { task.rebuild ? '' : ` using ${proc.downloadRetry < 3 && task.installedFrom ? 'installedFrom' : 'installedVersion'}` - }` + }`, ); installArgs.unshift(...getDefaultNodeArgs(mainFile), mainFile); @@ -3535,12 +3529,12 @@ function installAdapters(): void { if (!task.disabled) { if (!procs[task.id].config.common.enabled) { logger.info( - `${hostLogPrefix} startInstance ${task.id}: instance is disabled but should be started, re-enabling it` + `${hostLogPrefix} startInstance ${task.id}: instance is disabled but should be started, re-enabling it`, ); states!.setState(`${task.id}.alive`, { val: true, ack: false, - from: hostObjectPrefix + from: hostObjectPrefix, }); } else if (task.rebuild) { // on rebuild, we send a restart signal via object change to also reach compact group processes @@ -3550,7 +3544,7 @@ function installAdapters(): void { } } else { logger.debug( - `${hostLogPrefix} ${tools.appName} ${commandScope} successful but the instance is disabled` + `${hostLogPrefix} ${tools.appName} ${commandScope} successful but the instance is disabled`, ); } } @@ -3574,7 +3568,7 @@ function installAdapters(): void { logger.error( `${hostLogPrefix} Cannot execute "${tools.getControllerDir()}/${tools.appName.toLowerCase()}.js ${commandScope} ${name}: ${ err.message - }` + }`, ); setTimeout(() => { installQueue.shift(); @@ -3583,7 +3577,7 @@ function installAdapters(): void { }); } catch (err) { logger.error( - `${hostLogPrefix} Cannot execute "${tools.getControllerDir()}/${tools.appName.toLowerCase()}.js ${commandScope} ${name}: ${err}` + `${hostLogPrefix} Cannot execute "${tools.getControllerDir()}/${tools.appName.toLowerCase()}.js ${commandScope} ${name}: ${err}`, ); setTimeout(() => { installQueue.shift(); @@ -3593,11 +3587,11 @@ function installAdapters(): void { } else { if (task.rebuild) { logger.error( - `${hostLogPrefix} Cannot rebuild adapter "${name}". To retry it disable/enable the adapter or restart host. Also check the error messages in the log or execute "npm install --production" in adapter directory manually!` + `${hostLogPrefix} Cannot rebuild adapter "${name}". To retry it disable/enable the adapter or restart host. Also check the error messages in the log or execute "npm install --production" in adapter directory manually!`, ); } else { logger.error( - `${hostLogPrefix} Cannot download and install adapter "${name}". To retry it disable/enable the adapter or restart host. Also check the error messages in the log!` + `${hostLogPrefix} Cannot download and install adapter "${name}". To retry it disable/enable the adapter or restart host. Also check the error messages in the log!`, ); } setTimeout(() => { @@ -3700,14 +3694,14 @@ async function startScheduledInstance(callback?: () => void): Promise { '--instance', instance._id.split('.').pop() || '0', '--loglevel', - instance.common.loglevel || 'info' + instance.common.loglevel || 'info', ]; try { proc.process = cp.fork(fileNameFull, args, { execArgv: tools.getDefaultNodeArgs(fileNameFull), // @ts-expect-error missing from types, but we already tested it is needed windowsHide: true, - cwd: adapterDir + cwd: adapterDir, }); } catch (err) { logger.error(`${hostLogPrefix} instance ${id} could not be started: ${err.message}`); @@ -3719,11 +3713,11 @@ async function startScheduledInstance(callback?: () => void): Promise { const isNpm = isInstalledFromNpm({ installedFrom: instance.common.installedFrom, - adapterName: instance.common.name + adapterName: instance.common.name, }); logger.info( - `${hostLogPrefix} instance ${instance._id} in version "${instance.common.version}"${!isNpm ? ` (non-npm: ${instance.common.installedFrom})` : ''} started with pid ${proc.process.pid}` + `${hostLogPrefix} instance ${instance._id} in version "${instance.common.version}"${!isNpm ? ` (non-npm: ${instance.common.installedFrom})` : ''} started with pid ${proc.process.pid}`, ); proc.process.on('exit', (code, signal) => { @@ -3757,14 +3751,13 @@ async function startScheduledInstance(callback?: () => void): Promise { processNextScheduledInstance(); return; - } else { - !wakeUp && - logger.warn(`${hostLogPrefix} instance ${instance._id} already running with pid ${proc.process.pid}`); - skipped = true; } + !wakeUp && + logger.warn(`${hostLogPrefix} instance ${instance._id} already running with pid ${proc.process.pid}`); + skipped = true; } else { logger.warn( - `${hostLogPrefix} instance ${instance._id} not started, because start has already been initialized less than 2 seconds ago` + `${hostLogPrefix} instance ${instance._id} not started, because start has already been initialized less than 2 seconds ago`, ); skipped = true; } @@ -3824,7 +3817,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P id, version: instance.common.installedVersion || instance.common.version, installedFrom: instance.common.installedFrom, - wakeUp + wakeUp, }); // start install queue if not started if (installQueue.length === 1) { @@ -3855,7 +3848,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P if (instance.common.compact) { instance.common.compact = false; logger.warn( - `${hostLogPrefix} Adapter ${instance.common.name} has "compact=true" as well as "nodeProcessParams" specified, this is not supported, please report to developer` + `${hostLogPrefix} Adapter ${instance.common.name} has "compact=true" as well as "nodeProcessParams" specified, this is not supported, please report to developer`, ); } } @@ -3871,13 +3864,13 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P } } catch (e) { logger.error( - `${hostLogPrefix} startInstance ${name}.${instanceNo}: Error while ensuring adapter is uploaded: ${e.message}` + `${hostLogPrefix} startInstance ${name}.${instanceNo}: Error while ensuring adapter is uploaded: ${e.message}`, ); } const isBlocked = await blocklistManager.isAdapterVersionBlocked({ version: instance.common.version, - adapterName: instance.common.name + adapterName: instance.common.name, }); if (isBlocked) { @@ -3888,7 +3881,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P scope: 'system', category: 'blockedVersions', message, - instance: SYSTEM_HOST_PREFIX + hostname + instance: SYSTEM_HOST_PREFIX + hostname, }); return; } @@ -3935,7 +3928,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P proc.engine = packJSON?.engines?.node; } catch { logger.error( - `${hostLogPrefix} startInstance ${name}.${instanceNo}: Cannot read and parse "${adapterDir}/package.json"` + `${hostLogPrefix} startInstance ${name}.${instanceNo}: Cannot read and parse "${adapterDir}/package.json"`, ); } @@ -3943,15 +3936,15 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P if (proc.engine) { if (!semver.satisfies(process.version.replace(/^v/, ''), proc.engine)) { logger.warn( - `${hostLogPrefix} startInstance ${name}.${instanceNo}: required Node.js version ${proc.engine}, actual version ${process.version}` + `${hostLogPrefix} startInstance ${name}.${instanceNo}: required Node.js version ${proc.engine}, actual version ${process.version}`, ); // disable instance - const obj = await objects!.getObject(id); + const obj = await objects.getObject(id); if (obj?.common?.enabled) { obj.common.enabled = false; - await objects!.setObject(obj._id, obj); + await objects.setObject(obj._id, obj); logger.warn( - `${hostLogPrefix} startInstance ${name}.${instanceNo}: instance disabled because of Node.js version mismatch` + `${hostLogPrefix} startInstance ${name}.${instanceNo}: instance disabled because of Node.js version mismatch`, ); } return; @@ -3984,12 +3977,12 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P ) { if (availableMemMB < (typeof config.system.memLimitError === 'number' ? config.system.memLimitError : 50)) { logger.error( - `${hostLogPrefix} Your system has only ${availableMemMB} MB RAM left available and an additional adapter process is started. Please check your system, settings and active instances to prevent swapping and Out-Of-Memory situations!` + `${hostLogPrefix} Your system has only ${availableMemMB} MB RAM left available and an additional adapter process is started. Please check your system, settings and active instances to prevent swapping and Out-Of-Memory situations!`, ); logger.error(`${hostLogPrefix} In future versions, the adapter might not be started!`); } else { logger.warn( - `${hostLogPrefix} Your system has only ${availableMemMB} MB RAM left available and an additional adapter process is started. Please check your system, settings and active instances to prevent swapping and Out-Of-Memory situations!` + `${hostLogPrefix} Your system has only ${availableMemMB} MB RAM left available and an additional adapter process is started. Please check your system, settings and active instances to prevent swapping and Out-Of-Memory situations!`, ); } @@ -3999,7 +3992,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P scope: 'system', category: 'memIssues', message: `Your system has only ${availableMemMB} MB RAM left available and an additional adapter process is started. Please check your system, settings and active instances to prevent swapping and Out-Of-Memory situations!`, - instance: `system.host.${hostname}` + instance: `system.host.${hostname}`, }); } catch (e) { logger.warn(`${hostLogPrefix} Could not add OOM notification: ${e.message}`); @@ -4032,7 +4025,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P instance.common.compact && instance.common.runAsCompactMode ? `true (${instance.common.compactGroup})` : 'false' - }` + }`, ); // Exit Handler for normal Adapters started as own processes const exitHandler = (code: number, signal: string): void => { @@ -4055,7 +4048,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P if (proc?.config?.common.logTransporter) { outputCount++; console.log( - `================================== > LOG REDIRECT ${id} => false [Process stopped]` + `================================== > LOG REDIRECT ${id} => false [Process stopped]`, ); states!.setState(`${id}.logging`, { val: false, ack: true, from: hostObjectPrefix }); } @@ -4065,7 +4058,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P proc, null, code !== EXIT_CODES.START_IMMEDIATELY_AFTER_STOP && - code !== EXIT_CODES.ADAPTER_REQUESTED_TERMINATION + code !== EXIT_CODES.ADAPTER_REQUESTED_TERMINATION, ); if (mode !== 'once') { @@ -4079,7 +4072,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P logger.info( `${hostLogPrefix} instance ${id} terminated with code ${code} (${ getErrorText(code) || '' - })` + })`, ); if (proc) { @@ -4111,39 +4104,38 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P } storePids(); return; + } + if (code === EXIT_CODES.ADAPTER_REQUESTED_TERMINATION && proc?.restartExpected) { + logger.info(`${hostLogPrefix} instance ${id} terminated for restart.`); + } else if (code === EXIT_CODES.ADAPTER_REQUESTED_TERMINATION) { + logger.info( + `${hostLogPrefix} instance ${id} terminated by request of the instance itself and will not be restarted, before user restarts it.`, + ); + } else if ( + code === EXIT_CODES.START_IMMEDIATELY_AFTER_STOP && + proc?.config?.common.restartSchedule + ) { + logger.info( + `${hostLogPrefix} instance ${id} scheduled normal terminated and will be restarted on schedule.`, + ); + } else if (code === EXIT_CODES.ADAPTER_REQUESTED_REBUILD && proc) { + logger.info( + `${hostLogPrefix} instance ${id} requested a rebuild of its dependencies and will be restarted after that is done.`, + ); + proc.needsRebuild = true; } else { - if (code === EXIT_CODES.ADAPTER_REQUESTED_TERMINATION && proc?.restartExpected) { - logger.info(`${hostLogPrefix} instance ${id} terminated for restart.`); - } else if (code === EXIT_CODES.ADAPTER_REQUESTED_TERMINATION) { - logger.info( - `${hostLogPrefix} instance ${id} terminated by request of the instance itself and will not be restarted, before user restarts it.` - ); - } else if ( - code === EXIT_CODES.START_IMMEDIATELY_AFTER_STOP && - proc?.config?.common.restartSchedule + const text = `${hostLogPrefix} instance ${id} terminated with code ${code} (${ + getErrorText(code) || '' + })`; + if ( + !code || + code === EXIT_CODES.ADAPTER_REQUESTED_TERMINATION || + code === EXIT_CODES.NO_ERROR || + code === EXIT_CODES.START_IMMEDIATELY_AFTER_STOP ) { - logger.info( - `${hostLogPrefix} instance ${id} scheduled normal terminated and will be restarted on schedule.` - ); - } else if (code === EXIT_CODES.ADAPTER_REQUESTED_REBUILD && proc) { - logger.info( - `${hostLogPrefix} instance ${id} requested a rebuild of its dependencies and will be restarted after that is done.` - ); - proc.needsRebuild = true; + logger.info(text); } else { - const text = `${hostLogPrefix} instance ${id} terminated with code ${code} (${ - getErrorText(code) || '' - })`; - if ( - !code || - code === EXIT_CODES.ADAPTER_REQUESTED_TERMINATION || - code === EXIT_CODES.NO_ERROR || - code === EXIT_CODES.START_IMMEDIATELY_AFTER_STOP - ) { - logger.info(text); - } else { - logger.error(text); - } + logger.error(text); } } } @@ -4159,11 +4151,11 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P logger.info( `${hostLogPrefix} Adapter ${id} needs rebuild ${ proc.rebuildArgs ? `of ${proc.rebuildArgs.module} ` : '' - }and will be restarted afterwards.` + }and will be restarted afterwards.`, ); const msg: Record = { command: 'rebuildAdapter', - message: { id: instance._id } + message: { id: instance._id }, }; // if rebuild args are given, send them @@ -4181,7 +4173,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P } } else { logger.info( - `${hostLogPrefix} Rebuild for adapter ${id} not successful in 3 tries. Adapter will not be restarted again. Please execute "npm install --production" in adapter directory manually.` + `${hostLogPrefix} Rebuild for adapter ${id} not successful in 3 tries. Adapter will not be restarted again. Please execute "npm install --production" in adapter directory manually.`, ); } } else { @@ -4205,7 +4197,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P if (proc.crashResetTimer) { logger.debug( - `${hostLogPrefix} Reset crash timer of ${id}, to be initialized anew` + `${hostLogPrefix} Reset crash timer of ${id}, to be initialized anew`, ); clearTimeout(proc.crashResetTimer); } @@ -4214,7 +4206,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P logger.debug(`${hostLogPrefix} Initialize crash timer of ${id}`); proc.crashResetTimer = setTimeout(() => { logger.debug( - `${hostLogPrefix} Cleared crash counter of ${id}, because 10 minutes no crash` + `${hostLogPrefix} Cleared crash counter of ${id}, because 10 minutes no crash`, ); // check that process id still exists - could be moved to another host if (proc) { @@ -4227,7 +4219,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P proc.crashCount = 0; if (proc.crashResetTimer) { logger.debug( - `${hostLogPrefix} Cleared crash timer of ${id}, because non-crash exit` + `${hostLogPrefix} Cleared crash timer of ${id}, because non-crash exit`, ); clearTimeout(proc.crashResetTimer); delete proc.crashResetTimer; @@ -4249,24 +4241,24 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P : proc.config.common.restartSchedule || restartTimerExisting ? 1_000 : 30_000, - id + id, ); // 156 is special code that adapter wants itself to be restarted immediately } else { // 3 crashes - do not restart anymore logger.warn( - `${hostLogPrefix} Do not restart adapter ${id} because restart loop detected` + `${hostLogPrefix} Do not restart adapter ${id} because restart loop detected`, ); await notificationHandler.addMessage({ scope: 'system', category: 'restartLoop', message: 'Restart loop detected', - instance: id + instance: id, }); proc.crashCount = 0; if (proc.crashResetTimer) { logger.debug( - `${hostLogPrefix} Cleared crash timer of ${id}, because adapter stopped` + `${hostLogPrefix} Cleared crash timer of ${id}, because adapter stopped`, ); clearTimeout(proc.crashResetTimer); delete proc.crashResetTimer; @@ -4277,15 +4269,15 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P logger.info(`${hostLogPrefix} Adapter ${id} will be restarted automatically`); } else if (code === EXIT_CODES.ADAPTER_REQUESTED_TERMINATION) { logger.info( - `${hostLogPrefix} Do not restart adapter ${id} because desired by instance` + `${hostLogPrefix} Do not restart adapter ${id} because desired by instance`, ); } else if (mode !== 'once') { logger.info( - `${hostLogPrefix} Do not restart adapter ${id} because disabled or deleted` + `${hostLogPrefix} Do not restart adapter ${id} because disabled or deleted`, ); } else { logger.info( - `${hostLogPrefix} instance ${id} terminated while should be started once` + `${hostLogPrefix} instance ${id} terminated while should be started once`, ); } } @@ -4311,7 +4303,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P stdio: ['ignore', 'ignore', 'pipe', 'ipc'], // @ts-expect-error missing from types, but we already tested it is needed windowsHide: true, - cwd: adapterDir! + cwd: adapterDir, }); } catch (err) { logger.error(`${hostLogPrefix} instance ${instance._id} could not be started: ${err}`); @@ -4322,7 +4314,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P states!.setState(`${id}.sigKill`, { val: proc.process.pid, ack: true, - from: hostObjectPrefix + from: hostObjectPrefix, }); } @@ -4379,16 +4371,16 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P logger.info(`${hostLogPrefix} instance ${instance._id} started in COMPACT mode`); } else if (proc.startedAsCompactGroup) { logger.info( - `${hostLogPrefix} instance ${instance._id} is handled by compact group controller pid ${proc.process.pid}` + `${hostLogPrefix} instance ${instance._id} is handled by compact group controller pid ${proc.process.pid}`, ); } else { const isNpm = isInstalledFromNpm({ installedFrom: instance.common.installedFrom, - adapterName: instance.common.name + adapterName: instance.common.name, }); logger.info( - `${hostLogPrefix} instance ${instance._id} in version "${instance.common.version}"${!isNpm ? ` (non-npm: ${instance.common.installedFrom})` : ''} started with pid ${proc.process.pid}` + `${hostLogPrefix} instance ${instance._id} in version "${instance.common.version}"${!isNpm ? ` (non-npm: ${instance.common.installedFrom})` : ''} started with pid ${proc.process.pid}`, ); } } @@ -4432,8 +4424,8 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P logic: module({ logLevel, compactInstance: _instance, - compact: true - }) + compact: true, + }), }; // @ts-expect-error todo add types for compact adapter procs @@ -4442,7 +4434,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P proc.startedInCompactMode = true; } catch (e) { logger.error( - `${hostLogPrefix} Cannot start ${name}.${_instance} in compact mode. Fallback to normal start: ${e.message}` + `${hostLogPrefix} Cannot start ${name}.${_instance} in compact mode. Fallback to normal start: ${e.message}`, ); logger.error(e.stackTrace); if (proc.process) { @@ -4453,12 +4445,12 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P await states!.setState(`${id}.sigKill`, { val: -1, ack: false, - from: hostObjectPrefix + from: hostObjectPrefix, }); } } else { logger.warn( - `${hostLogPrefix} Cannot start ${name}.${_instance} in compact mode: Filename invalid` + `${hostLogPrefix} Cannot start ${name}.${_instance} in compact mode: Filename invalid`, ); } @@ -4467,7 +4459,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P states!.setState(`${id}.sigKill`, { val: -1, ack: false, - from: hostObjectPrefix + from: hostObjectPrefix, }); return true; @@ -4480,7 +4472,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P // a group controller for this group is not yet started, execute one compactProcs[compactGroup] = compactProcs[compactGroup] || { - instances: [] + instances: [], }; const compactProc = compactProcs[compactGroup]; @@ -4495,7 +4487,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P } logger.info( - `${hostLogPrefix} start controller for compactgroup ${instance.common.compactGroup}` + `${hostLogPrefix} start controller for compactgroup ${instance.common.compactGroup}`, ); try { @@ -4506,13 +4498,13 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P execArgv, stdio: ['ignore', 'ignore', 'pipe', 'ipc'], // @ts-expect-error missing from types, but we already tested it is needed - windowsHide: true - } + windowsHide: true, + }, ); } catch (err) { delete compactProc.process; logger.info( - `${hostLogPrefix} controller for compactgroup ${instance.common.compactGroup} could not be started: ${err}` + `${hostLogPrefix} controller for compactgroup ${instance.common.compactGroup} could not be started: ${err}`, ); } @@ -4542,17 +4534,17 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P const groupExitHandler = (code: number, signal: string): void => { if (signal) { logger.warn( - `${hostLogPrefix} compactgroup controller ${currentCompactGroup} terminated due to ${signal}` + `${hostLogPrefix} compactgroup controller ${currentCompactGroup} terminated due to ${signal}`, ); } else if (code !== null) { logger.info( `${hostLogPrefix} compactgroup controller ${currentCompactGroup} terminated with code ${code} (${ getErrorText(code) || '' - })` + })`, ); } else { logger.info( - `${hostLogPrefix} compactgroup controller ${currentCompactGroup} terminated` + `${hostLogPrefix} compactgroup controller ${currentCompactGroup} terminated`, ); } @@ -4570,7 +4562,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P */ function markCompactInstancesAsStopped( instances: ioBroker.ObjectIDs.Instance[], - callback: () => void + callback: () => void, ): void { if (!instances.length) { callback && callback(); @@ -4582,12 +4574,12 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P states!.setState(`${id}.alive`, { val: false, ack: true, - from: hostObjectPrefix + from: hostObjectPrefix, }); states!.setState(`${id}.connected`, { val: false, ack: true, - from: hostObjectPrefix + from: hostObjectPrefix, }); cleanAutoSubscribes(id, () => { @@ -4616,12 +4608,12 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P if (isStopping) { logger.silly( - `${hostLogPrefix} Check after group exit ${currentCompactGroup}` + `${hostLogPrefix} Check after group exit ${currentCompactGroup}`, ); for (const proc of Object.values(procs)) { if (proc.process) { logger.silly( - `${hostLogPrefix} ${proc.config.common.name} still running` + `${hostLogPrefix} ${proc.config.common.name} still running`, ); return; } @@ -4629,7 +4621,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P for (const [i, compactProc] of Object.entries(compactProcs)) { if (compactProc.process) { logger.silly( - `${hostLogPrefix} Compact group ${i} still running (compact)` + `${hostLogPrefix} Compact group ${i} still running (compact)`, ); return; } @@ -4644,12 +4636,12 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P // Restart group controller because still instances assigned to him, done via startInstance if (connected && compactProcs[currentCompactGroup].instances.length) { logger.info( - `${hostLogPrefix} Restart compact group controller ${currentCompactGroup}` + `${hostLogPrefix} Restart compact group controller ${currentCompactGroup}`, ); logger.debug( `${hostLogPrefix} Instances: ${JSON.stringify( - compactProcs[currentCompactGroup].instances - )}` + compactProcs[currentCompactGroup].instances, + )}`, ); compactProcs[currentCompactGroup].instances.forEach(id => { @@ -4665,12 +4657,12 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P : procs[id].config.common.restartSchedule ? 1_000 : 30_000, - id + id, ); }); } else { logger.info( - `${hostLogPrefix} Do not restart compact group controller ${currentCompactGroup} because no instances assigned to him` + `${hostLogPrefix} Do not restart compact group controller ${currentCompactGroup} because no instances assigned to him`, ); } storePids(); @@ -4696,7 +4688,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P await states!.setState(`${id}.sigKill`, { val: 0, ack: false, - from: hostObjectPrefix + from: hostObjectPrefix, }); } catch { // ignore @@ -4708,7 +4700,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P logger.warn( `${hostLogPrefix} instance ${instance._id} ${ proc.stopping ? 'still' : 'already' - } running with pid ${proc.process!.pid}` + } running with pid ${proc.process!.pid}`, ); } if (proc.stopping) { @@ -4743,17 +4735,17 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P proc.schedule = schedule.scheduleJob( getCronExpression({ cronExpression: instance.common.schedule, - connectionType: instance.common.connectionType + connectionType: instance.common.connectionType, }), () => { // queue up, but only if not already queued scheduledInstances[id] = { fileNameFull: adapterMainFile, adapterDir, - wakeUp + wakeUp, }; Object.keys(scheduledInstances).length === 1 && startScheduledInstance(); - } + }, ); logger.info(`${hostLogPrefix} instance scheduled ${instance._id} ${instance.common.schedule}`); // Start one time adapter by start or if configuration changed @@ -4765,7 +4757,7 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P execArgv: [...tools.getDefaultNodeArgs(adapterMainFile), ...execArgv], // @ts-expect-error missing from types, but we already tested it is necessary windowsHide: true, - cwd: adapterDir! + cwd: adapterDir, }); } catch (e) { logger.info(`${hostLogPrefix} instance ${instance._id} could not be started: ${e.message}`); @@ -4774,11 +4766,11 @@ async function startInstance(id: ioBroker.ObjectIDs.Instance, wakeUp = false): P storePids(); const isNpm = isInstalledFromNpm({ installedFrom: instance.common.installedFrom, - adapterName: instance.common.name + adapterName: instance.common.name, }); logger.info( - `${hostLogPrefix} instance ${instance._id} in version "${instance.common.version}"${!isNpm ? ` (non-npm: ${instance.common.installedFrom})` : ''} started with pid ${proc.process.pid}` + `${hostLogPrefix} instance ${instance._id} in version "${instance.common.version}"${!isNpm ? ` (non-npm: ${instance.common.installedFrom})` : ''} started with pid ${proc.process.pid}`, ); proc.process.on('exit', (code, signal) => { @@ -4840,7 +4832,7 @@ async function stopInstance(id: string, force: boolean): Promise { } logger.info( - `${hostLogPrefix} stopInstance ${id} (force=${force}, process=${procs[id].process ? 'true' : 'false'})` + `${hostLogPrefix} stopInstance ${id} (force=${force}, process=${procs[id].process ? 'true' : 'false'})`, ); const instance = proc.config; @@ -4898,33 +4890,66 @@ async function stopInstance(id: string, force: boolean): Promise { !isStopping && logger.warn(`${hostLogPrefix} stopInstance ${instance._id} not running`); } return; - } else { - if (force && !proc.startedAsCompactGroup) { - logger.info(`${hostLogPrefix} stopInstance forced ${instance._id} killing pid ${proc.process.pid}`); - proc.stopping = true; - try { - proc.process.kill('SIGKILL'); // call stop directly in adapter.js or call kill of a process - } catch (e) { - logger.error(`${hostLogPrefix} Cannot stop ${id}: ${JSON.stringify(e)}`); + } + if (force && !proc.startedAsCompactGroup) { + logger.info(`${hostLogPrefix} stopInstance forced ${instance._id} killing pid ${proc.process.pid}`); + proc.stopping = true; + try { + proc.process.kill('SIGKILL'); // call stop directly in adapter.js or call kill of a process + } catch (e) { + logger.error(`${hostLogPrefix} Cannot stop ${id}: ${JSON.stringify(e)}`); + } + delete proc.process; + } else if ( + (instance.common.messagebox && instance.common.supportStopInstance) || + instance.common.supportedMessages?.stopInstance + ) { + // Send to adapter signal "stopInstance" because on some systems SIGTERM does not work + sendTo(instance._id, 'stopInstance', null, result => { + const stopTimeout = stopTimeouts[id]; + if (stopTimeout?.timeout) { + clearTimeout(stopTimeout.timeout); + stopTimeout.timeout = null; } - delete proc.process; - } else if ( - (instance.common.messagebox && instance.common.supportStopInstance) || - instance.common.supportedMessages?.stopInstance - ) { - // Send to adapter signal "stopInstance" because on some systems SIGTERM does not work - sendTo(instance._id, 'stopInstance', null, result => { + logger.info( + `${hostLogPrefix} stopInstance self ${instance._id} killing pid ${ + proc.process ? proc.process.pid : 'undefined' + }${result ? `: ${result}` : ''}`, + ); + if (proc.process && !proc.startedAsCompactGroup) { + proc.stopping = true; + try { + proc.process.kill('SIGKILL'); // call stop directly in adapter.js or call kill of a process + } catch (e) { + logger.error(`${hostLogPrefix} Cannot stop ${id}: ${JSON.stringify(e)}`); + } + delete proc.process; + } + + if (typeof stopTimeout?.callback === 'function') { + stopTimeout.callback(); + stopTimeout.callback = null; + } + }); + + const supportStopInstanceVal: boolean | number | undefined = + instance.common.supportStopInstance || instance.common.supportedMessages?.stopInstance; + + const timeoutDuration = supportStopInstanceVal === true ? 1_000 : supportStopInstanceVal || 1_000; + return new Promise(resolve => { + // If no response from adapter, kill it in 1 second + stopTimeout.callback = resolve; + stopTimeout.timeout = setTimeout(() => { const stopTimeout = stopTimeouts[id]; - if (stopTimeout?.timeout) { - clearTimeout(stopTimeout.timeout); + const proc = procs[id]; + + if (stopTimeout) { stopTimeout.timeout = null; } - logger.info( - `${hostLogPrefix} stopInstance self ${instance._id} killing pid ${ - proc.process ? proc.process.pid : 'undefined' - }${result ? ': ' + result : ''}` - ); - if (proc.process && !proc.startedAsCompactGroup) { + if (proc?.process && !proc.startedAsCompactGroup) { + logger.info( + `${hostLogPrefix} stopInstance timeout ${timeoutDuration} ${instance._id} killing pid ${proc.process.pid}`, + ); proc.stopping = true; try { proc.process.kill('SIGKILL'); // call stop directly in adapter.js or call kill of a process @@ -4932,104 +4957,71 @@ async function stopInstance(id: string, force: boolean): Promise { logger.error(`${hostLogPrefix} Cannot stop ${id}: ${JSON.stringify(e)}`); } delete proc.process; + } else if (!compactGroupController && proc?.process) { + // was compact mode in another group + delete proc.process; // we consider that the other group controller managed to stop it } - - if (typeof stopTimeout?.callback === 'function') { + if (stopTimeout && typeof stopTimeout.callback === 'function') { stopTimeout.callback(); stopTimeout.callback = null; } - }); - - const supportStopInstanceVal: boolean | number | undefined = - instance.common.supportStopInstance || instance.common.supportedMessages?.stopInstance; - - const timeoutDuration = supportStopInstanceVal === true ? 1_000 : supportStopInstanceVal || 1_000; - return new Promise(resolve => { - // If no response from adapter, kill it in 1 second - stopTimeout.callback = resolve; - stopTimeout.timeout = setTimeout(() => { - const stopTimeout = stopTimeouts[id]; - const proc = procs[id]; - - if (stopTimeout) { - stopTimeout.timeout = null; - } - if (proc?.process && !proc.startedAsCompactGroup) { - logger.info( - `${hostLogPrefix} stopInstance timeout ${timeoutDuration} ${instance._id} killing pid ${proc.process.pid}` - ); - proc.stopping = true; - try { - proc.process.kill('SIGKILL'); // call stop directly in adapter.js or call kill of a process - } catch (e) { - logger.error(`${hostLogPrefix} Cannot stop ${id}: ${JSON.stringify(e)}`); - } - delete proc.process; - } else if (!compactGroupController && proc?.process) { - // was compact mode in another group - delete proc.process; // we consider that the other group controller managed to stop it - } - if (stopTimeout && typeof stopTimeout.callback === 'function') { - stopTimeout.callback(); - stopTimeout.callback = null; - } - }, timeoutDuration); - }); - } else if (!proc.startedAsCompactGroup) { - let err; - try { - // if started, let it end itself as first try - await states!.setState(`${id}.sigKill`, { val: -1, ack: false, from: hostObjectPrefix }); - } catch (e) { - err = e; - } - // send kill signal - logger.info(`${hostLogPrefix} stopInstance ${instance._id} send kill signal`); - const proc = procs[id]; - const stopTimeout = stopTimeouts[id]; + }, timeoutDuration); + }); + } else if (!proc.startedAsCompactGroup) { + let err; + try { + // if started, let it end itself as first try + await states!.setState(`${id}.sigKill`, { val: -1, ack: false, from: hostObjectPrefix }); + } catch (e) { + err = e; + } + // send kill signal + logger.info(`${hostLogPrefix} stopInstance ${instance._id} send kill signal`); + const proc = procs[id]; + const stopTimeout = stopTimeouts[id]; - if (!err) { - if (proc) { - proc.stopping = true; - } + if (!err) { + if (proc) { + proc.stopping = true; } - const timeoutDuration = instance.common.stopTimeout || 1_000; + } + const timeoutDuration = instance.common.stopTimeout || 1_000; - return new Promise(resolve => { - // If no response from adapter, kill it in 1 second - stopTimeout.callback = resolve; - stopTimeout.timeout = setTimeout(() => { - const proc = procs[id]; - const stopTimeout = stopTimeouts[id]; + return new Promise(resolve => { + // If no response from adapter, kill it in 1 second + stopTimeout.callback = resolve; + stopTimeout.timeout = setTimeout(() => { + const proc = procs[id]; + const stopTimeout = stopTimeouts[id]; - if (stopTimeout) { - stopTimeout.timeout = null; - } + if (stopTimeout) { + stopTimeout.timeout = null; + } - if (proc?.process && !proc.startedAsCompactGroup) { - logger.info( - `${hostLogPrefix} stopInstance timeout ${instance._id} killing pid ${proc.process.pid}` - ); - proc.stopping = true; - try { - proc.process.kill('SIGKILL'); - } catch (e) { - logger.error(`${hostLogPrefix} Cannot stop ${id}: ${JSON.stringify(e)}`); - } - delete proc.process; - } - if (stopTimeout && typeof stopTimeout.callback === 'function') { - stopTimeout.callback(); - stopTimeout.callback = null; + if (proc?.process && !proc.startedAsCompactGroup) { + logger.info( + `${hostLogPrefix} stopInstance timeout ${instance._id} killing pid ${proc.process.pid}`, + ); + proc.stopping = true; + try { + proc.process.kill('SIGKILL'); + } catch (e) { + logger.error(`${hostLogPrefix} Cannot stop ${id}: ${JSON.stringify(e)}`); } - }, timeoutDuration); - }); - } else { - if (proc) { - delete proc.process; - } + delete proc.process; + } + if (stopTimeout && typeof stopTimeout.callback === 'function') { + stopTimeout.callback(); + stopTimeout.callback = null; + } + }, timeoutDuration); + }); + } else { + if (proc) { + delete proc.process; } } + break; case 'schedule': @@ -5075,7 +5067,7 @@ function stopInstances(forceStop: boolean, callback?: ((wasForced?: boolean) => isStopping = isStopping || Date.now(); // Sometimes a process receives SIGTERM twice const elapsed = Date.now() - isStopping; logger.debug( - `${hostLogPrefix} stop isStopping=${elapsed} isDaemon=${isDaemon} allInstancesStopped=${allInstancesStopped}` + `${hostLogPrefix} stop isStopping=${elapsed} isDaemon=${isDaemon} allInstancesStopped=${allInstancesStopped}`, ); if (elapsed >= stopTimeout) { if (maxTimeout) { @@ -5183,13 +5175,13 @@ function stop(force?: boolean, callback?: () => void): void { logger.info( `${hostLogPrefix} ${ wasForced ? 'force terminating' : 'terminated' - }. Could not reset alive status for instances` + }. Could not reset alive status for instances`, ); if (typeof callback === 'function') { return void callback(); - } else { - setTimeout(() => process.exit(EXIT_CODES.JS_CONTROLLER_STOPPED), 1_000); } + setTimeout(() => process.exit(EXIT_CODES.JS_CONTROLLER_STOPPED), 1_000); + return; } outputCount++; @@ -5221,23 +5213,22 @@ function stop(force?: boolean, callback?: () => void): void { if (typeof callback === 'function') { return void callback(); - } else { - setTimeout(() => { - try { - // avoid pids been written after deletion - if (storeTimer) { - clearTimeout(storeTimer); - } - // delete pids.txt - fs.unlinkSync(tools.getPidsFileName()); - } catch (e) { - if (e.code !== 'ENOENT') { - logger.error(`${hostLogPrefix} Could not delete ${tools.getPidsFileName()}: ${e}`); - } - } - process.exit(EXIT_CODES.JS_CONTROLLER_STOPPED); - }, 1_000); } + setTimeout(() => { + try { + // avoid pids been written after deletion + if (storeTimer) { + clearTimeout(storeTimer); + } + // delete pids.txt + fs.unlinkSync(tools.getPidsFileName()); + } catch (e) { + if (e.code !== 'ENOENT') { + logger.error(`${hostLogPrefix} Could not delete ${tools.getPidsFileName()}: ${e}`); + } + } + process.exit(EXIT_CODES.JS_CONTROLLER_STOPPED); + }, 1_000); }); } @@ -5331,7 +5322,7 @@ export async function init(compactGroupId?: number): Promise { logger = toolsLogger.logger(config.log); logger.warn( - `${hostLogPrefix} Your logging path "${e.path}" was invalid, it has been changed to "${fixedLogPath}"` + `${hostLogPrefix} Your logging path "${e.path}" was invalid, it has been changed to "${fixedLogPath}"`, ); } else { // without logger multiple things will have undefined behavior, and probably more is wrong -> do not start @@ -5358,7 +5349,7 @@ export async function init(compactGroupId?: number): Promise { if (!compactGroupController) { logger.info( - `${hostLogPrefix} ${tools.appName}.js-controller version ${version} ${ioPackage.common.name} starting` + `${hostLogPrefix} ${tools.appName}.js-controller version ${version} ${ioPackage.common.name} starting`, ); logger.info(`${hostLogPrefix} Copyright (c) 2014-2024 bluefox, 2014 hobbyquaker`); logger.info(`${hostLogPrefix} hostname: ${hostname}, node: ${process.version}`); @@ -5378,11 +5369,11 @@ export async function init(compactGroupId?: number): Promise { { name: 'iobroker.core', version: '1.0.0', - private: true + private: true, }, null, - 2 - ) + 2, + ), ); } else { // npm3 requires version attribute @@ -5394,11 +5385,11 @@ export async function init(compactGroupId?: number): Promise { { name: 'iobroker.core', version: '1.0.0', - private: true + private: true, }, null, - 2 - ) + 2, + ), ); } } @@ -5408,7 +5399,7 @@ export async function init(compactGroupId?: number): Promise { } } else { logger.info( - `${hostLogPrefix} ${tools.appName}.js-controller version ${version} ${ioPackage.common.name} starting` + `${hostLogPrefix} ${tools.appName}.js-controller version ${version} ${ioPackage.common.name} starting`, ); } @@ -5430,17 +5421,17 @@ export async function init(compactGroupId?: number): Promise { if (invalidVersion) { logger.error( - `${hostLogPrefix} ioBroker requires Node.js in version ${packageJson.engines.node}, you have ${process.version}` + `${hostLogPrefix} ioBroker requires Node.js in version ${packageJson.engines.node}, you have ${process.version}`, ); logger.error( - `${hostLogPrefix} Please upgrade your Node.js version. See https://forum.iobroker.net/topic/22867/how-to-node-js-f%C3%BCr-iobroker-richtig-updaten` + `${hostLogPrefix} Please upgrade your Node.js version. See https://forum.iobroker.net/topic/22867/how-to-node-js-f%C3%BCr-iobroker-richtig-updaten`, ); console.error( - `ioBroker requires Node.js in version ${packageJson.engines.node}, you have ${process.version}` + `ioBroker requires Node.js in version ${packageJson.engines.node}, you have ${process.version}`, ); console.error( - 'Please upgrade your Node.js version. See https://forum.iobroker.net/topic/22867/how-to-node-js-f%C3%BCr-iobroker-richtig-updaten' + 'Please upgrade your Node.js version. See https://forum.iobroker.net/topic/22867/how-to-node-js-f%C3%BCr-iobroker-richtig-updaten', ); process.exit(EXIT_CODES.INVALID_NODE_VERSION); @@ -5454,7 +5445,7 @@ export async function init(compactGroupId?: number): Promise { log: logger as any, iobrokerConfig: config, parentPackage: packageJson, - controllerVersion: version + controllerVersion: version, }; pluginHandler = new PluginHandler(pluginSettings); @@ -5507,7 +5498,7 @@ export async function init(compactGroupId?: number): Promise { states.setState(`${hostObjectPrefix}.logLevel`, { val: config.log.level, ack: true, - from: hostObjectPrefix + from: hostObjectPrefix, }); states.subscribe(`${hostObjectPrefix}.logLevel`); @@ -5521,7 +5512,7 @@ export async function init(compactGroupId?: number): Promise { logger.info( `${hostLogPrefix} Node.js version has changed from ${ prevNodeVersionState ? prevNodeVersionState.val : 'unknown' - } to ${nodeVersion}` + } to ${nodeVersion}`, ); if (os.platform() === 'linux' && process.env.IOB_NO_SETCAP !== 'true') { // ensure capabilities are set @@ -5530,7 +5521,7 @@ export async function init(compactGroupId?: number): Promise { logger.info( `${hostLogPrefix} Successfully updated capabilities "${capabilities.join(', ')}" for ${ process.execPath - }` + }`, ); } } @@ -5539,11 +5530,11 @@ export async function init(compactGroupId?: number): Promise { await states.setState(`${hostObjectPrefix}.nodeVersion`, { val: nodeVersion, ack: true, - from: hostObjectPrefix + from: hostObjectPrefix, }); } catch (e) { logger.warn( - `${hostLogPrefix} Error while trying to update capabilities after detecting new Node.js version: ${e.message}` + `${hostLogPrefix} Error while trying to update capabilities after detecting new Node.js version: ${e.message}`, ); } } @@ -5568,7 +5559,7 @@ export async function init(compactGroupId?: number): Promise { } const toDelete = keys.filter((id, i) => !objs[i]); - keys = keys!.filter((id, i) => objs[i]); + keys = keys.filter((id, i) => objs[i]); let statesArr: (ioBroker.State | null)[] | undefined; @@ -5585,7 +5576,7 @@ export async function init(compactGroupId?: number): Promise { logRedirect( true, keys[i].substring(0, keys[i].length - '.logging'.length).replace(/^io\./, ''), - 'starting' + 'starting', ); } } @@ -5728,13 +5719,13 @@ async function _getNumberOfInstances(): Promise< let noCompactInstances = 0; const instancesView = await objects!.getObjectViewAsync('system', 'instance', { startkey: SYSTEM_ADAPTER_PREFIX, - endkey: `${SYSTEM_ADAPTER_PREFIX}\u9999` + endkey: `${SYSTEM_ADAPTER_PREFIX}\u9999`, }); - const noInstances = instancesView!.rows.length; + const noInstances = instancesView.rows.length; if (config.system.compact) { - for (const row of instancesView!.rows) { + for (const row of instancesView.rows) { const state = await states!.getStateAsync(`${row.id}.compactMode`); if (state?.val) { noCompactInstances++; @@ -5796,7 +5787,7 @@ async function checkAvailableDockerUpdate(): Promise { scope: 'system', category: 'dockerUpdate', message: `${version} (${lastUpdated})`, - instance: `system.host.${hostname}` + instance: `system.host.${hostname}`, }); } @@ -5834,7 +5825,7 @@ async function listUpdatableOsPackages(): Promise { scope: 'system', category: 'packageUpdates', message: packages.join('\n'), - instance: `system.host.${hostname}` + instance: `system.host.${hostname}`, }); } @@ -5872,17 +5863,17 @@ async function startUpgradeManager(options: UpgradeArguments): Promise { process.execPath, upgradeProcessPath, version, - adminInstance.toString() + adminInstance.toString(), ], { detached: true, - stdio: 'ignore' - } + stdio: 'ignore', + }, ); } else { upgradeProcess = spawn(process.execPath, [upgradeProcessPath, version, adminInstance.toString()], { detached: true, - stdio: 'ignore' + stdio: 'ignore', }); } @@ -5923,7 +5914,7 @@ async function checkRebootRequired(): Promise { scope: 'system', category: 'systemRebootRequired', message, - instance: `system.host.${hostname}` + instance: `system.host.${hostname}`, }); } @@ -5946,7 +5937,7 @@ async function autoUpgradeAdapters(): Promise { message: upgradedAdapters .map(entry => `${entry.name}: ${entry.oldVersion} -> ${entry.newVersion}`) .join('\n'), - instance: `system.host.${hostname}` + instance: `system.host.${hostname}`, }); } @@ -5957,7 +5948,7 @@ async function autoUpgradeAdapters(): Promise { message: failedAdapters .map(entry => `${entry.name}: ${entry.oldVersion} -> ${entry.newVersion}`) .join('\n'), - instance: `system.host.${hostname}` + instance: `system.host.${hostname}`, }); } } catch (e) { @@ -5986,13 +5977,13 @@ async function disableBlocklistedInstances(): Promise { scope: 'system', category: 'blockedVersions', message, - instance: SYSTEM_HOST_PREFIX + hostname + instance: SYSTEM_HOST_PREFIX + hostname, }); } } // eslint-disable-next-line unicorn/prefer-module -const modulePath = url.fileURLToPath(import.meta.url || 'file://' + __filename); +const modulePath = url.fileURLToPath(import.meta.url || `file://${__filename}`); if (process.argv[1] === modulePath) { init(); } diff --git a/packages/controller/test/.eslintrc b/packages/controller/test/.eslintrc deleted file mode 100644 index 5107e26e47..0000000000 --- a/packages/controller/test/.eslintrc +++ /dev/null @@ -1,6 +0,0 @@ -env: - node: true - mocha: true -parserOptions: - sourceType: module - project: tsconfig.json \ No newline at end of file diff --git a/packages/controller/test/jsonl/testAdapterObjectsInFileJsonl.ts b/packages/controller/test/jsonl/testAdapterObjectsInFileJsonl.ts index 1406060eb7..e25c746eee 100644 --- a/packages/controller/test/jsonl/testAdapterObjectsInFileJsonl.ts +++ b/packages/controller/test/jsonl/testAdapterObjectsInFileJsonl.ts @@ -5,7 +5,7 @@ import { register } from './../lib/testObjects.js'; import type { TestContext } from '../_Types.js'; import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); let objects = null; let states = null; @@ -14,16 +14,16 @@ const textName = 'Jsonl-File'; const context: TestContext = { // @ts-expect-error fix later objects: null, - name: textName + name: textName, }; const objectsConfig = { options: { auth_pass: null, retry_max_delay: 100, - retry_max_count: 2 + retry_max_count: 2, }, - dataDir: thisDir + '/../tmp/data', + dataDir: `${thisDir}/../tmp/data`, type: 'jsonl', host: '127.0.0.1', port: 19001, @@ -32,12 +32,12 @@ const objectsConfig = { noFileCache: true, connectTimeout: 2000, onChange: (id: string, _obj: ioBroker.AnyObject) => { - console.log('object changed. ' + id); - } + console.log(`object changed. ${id}`); + }, }; -describe(textName + ' Test Objects File-Redis', function () { - before(textName + ' Start js-controller', async function () { +describe(`${textName} Test Objects File-Redis`, function () { + before(`${textName} Start js-controller`, async function () { this.timeout(23_000); const { objects: _objects, states: _states } = await startController({ @@ -45,9 +45,9 @@ describe(textName + ' Test Objects File-Redis', function () { states: { dataDir: `${thisDir}/../tmp/data`, onChange: function (id: string, _state: ioBroker.State) { - console.log('state changed. ' + id); - } - } + console.log(`state changed. ${id}`); + }, + }, }); objects = _objects; @@ -60,7 +60,7 @@ describe(textName + ' Test Objects File-Redis', function () { register(it, expect, context); - after(textName + ' Stop js-controller', async function () { + after(`${textName} Stop js-controller`, async function () { this.timeout(5_000); await stopController(); await new Promise(resolve => { diff --git a/packages/controller/test/jsonl/testAdapterStatesInFilesJsonl.ts b/packages/controller/test/jsonl/testAdapterStatesInFilesJsonl.ts index 570be89b09..30f007893a 100644 --- a/packages/controller/test/jsonl/testAdapterStatesInFilesJsonl.ts +++ b/packages/controller/test/jsonl/testAdapterStatesInFilesJsonl.ts @@ -2,7 +2,7 @@ import path from 'node:path'; import testAdapter from './../lib/testAdapter.js'; import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); const dataDir = path.join(thisDir, '..', 'tmp', 'data'); @@ -10,21 +10,21 @@ const statesConfig = { options: { auth_pass: null, retry_max_delay: 100, - retry_max_count: 2 + retry_max_count: 2, }, type: 'jsonl', host: '127.0.0.1', port: 19000, user: '', pass: '', - dataDir: dataDir + dataDir: dataDir, }; const objectsConfig = { options: { auth_pass: null, retry_max_delay: 100, - retry_max_count: 2 + retry_max_count: 2, }, dataDir: dataDir, type: 'jsonl', @@ -33,11 +33,11 @@ const objectsConfig = { user: '', pass: '', noFileCache: true, - connectTimeout: 2000 + connectTimeout: 2000, }; // states in files, objects in files testAdapter({ statesConfig: statesConfig, objectsConfig: objectsConfig, - name: 'Tests Jsonl-File Redis' + name: 'Tests Jsonl-File Redis', }); diff --git a/packages/controller/test/lib/permissions.ts b/packages/controller/test/lib/permissions.ts index d52ad00842..64b5ef62ea 100644 --- a/packages/controller/test/lib/permissions.ts +++ b/packages/controller/test/lib/permissions.ts @@ -8,5 +8,5 @@ export const PERMISSIONS = { // Everyone can read/write '0666': 1638, // User outside group can only write - '0664': 1636 + '0664': 1636, } as const; diff --git a/packages/controller/test/lib/setup4controller.ts b/packages/controller/test/lib/setup4controller.ts index 4ca00432da..6f957e9a49 100644 --- a/packages/controller/test/lib/setup4controller.ts +++ b/packages/controller/test/lib/setup4controller.ts @@ -5,7 +5,7 @@ import type { Client as StateRedisClient } from '@iobroker/db-states-redis'; import * as url from 'node:url'; import { appNameLowerCase } from '@iobroker/js-controller-common-db/tools'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); export const rootDir = path.normalize(`${thisDir}/../../`); @@ -33,7 +33,7 @@ export async function startController(options: Record): Promise): Promise): Promise): Promise console.log(msg), info: (msg: string) => console.log(msg), warn: (msg: string) => console.warn(msg), - error: (msg: string) => console.error(msg) + error: (msg: string) => console.error(msg), }, connected: () => { // clear all objects @@ -114,7 +114,7 @@ export async function startController(options: Record): Promise): Promise): Promise): Promise console.log(msg), info: (msg: string) => console.log(msg), warn: (msg: string) => console.warn(msg), - error: (msg: string) => console.error(msg) + error: (msg: string) => console.error(msg), }, connected: () => { if (settingsStates.connection.type === 'redis') { @@ -160,7 +160,7 @@ export async function startController(options: Record): Promise): void { testObjectsACL, testStates, testAliases, - testConsole + testConsole, ]; const context: TestContext = { @@ -80,7 +80,7 @@ export default function testAdapter(options: Record): void { name: options.name, appName, statesConfig, - objectsConfig + objectsConfig, }; function startAdapter(): Promise { @@ -90,9 +90,9 @@ export default function testAdapter(options: Record): void { // @ts-expect-error todo types do not include this yet states: statesConfig, objects: objectsConfig, - consoleOutput: true + consoleOutput: true, }, - dirname: thisDir + '/', + dirname: `${thisDir}/`, name: context.adapterShortName, objectChange: (id, obj) => { context.onAdapterObjectChanged && context.onAdapterObjectChanged(id, obj); @@ -117,14 +117,14 @@ export default function testAdapter(options: Record): void { }, compact: true, /** activate the log transporter to be tested */ - logTransporter: true + logTransporter: true, }); }); } function checkConnectionOfAdapter(isConnected: boolean, cb: (err?: string) => void, counter?: number): void { counter = counter || 0; - console.log('Try check #' + counter); + console.log(`Try check #${counter}`); if (counter > 30) { if (cb) { cb('Cannot check connection'); @@ -141,7 +141,7 @@ export default function testAdapter(options: Record): void { cb(); } } else { - setTimeout(() => checkConnectionOfAdapter(isConnected, cb, counter! + 1), 1_000); + setTimeout(() => checkConnectionOfAdapter(isConnected, cb, counter + 1), 1_000); } }); } @@ -165,8 +165,8 @@ export default function testAdapter(options: Record): void { } function addInstance(): void { - if (!fs.existsSync(rootDir + 'tmp/')) { - fs.mkdirSync(rootDir + 'tmp/'); + if (!fs.existsSync(`${rootDir}tmp/`)) { + fs.mkdirSync(`${rootDir}tmp/`); } if (statesConfig.dataDir && !fs.existsSync(statesConfig.dataDir)) { fs.mkdirSync(statesConfig.dataDir); @@ -175,15 +175,15 @@ export default function testAdapter(options: Record): void { fs.mkdirSync(objectsConfig.dataDir); } if (objectsConfig.dataDir) { - fs.writeFileSync(objectsConfig.dataDir + '/objects.json', fs.readFileSync(thisDir + '/objects.json')); + fs.writeFileSync(`${objectsConfig.dataDir}/objects.json`, fs.readFileSync(`${thisDir}/objects.json`)); } if (statesConfig.dataDir) { - fs.writeFileSync(statesConfig.dataDir + '/states.json', fs.readFileSync(thisDir + '/states.json')); + fs.writeFileSync(`${statesConfig.dataDir}/states.json`, fs.readFileSync(`${thisDir}/states.json`)); } } describe(`${options.name} ${context.adapterShortName} adapter`, function () { - before('Test ' + context.adapterShortName + ' adapter: Start js-controller and adapter', async function () { + before(`Test ${context.adapterShortName} adapter: Start js-controller and adapter`, async function () { this.timeout(10_000); // no installation addInstance(); @@ -191,13 +191,13 @@ export default function testAdapter(options: Record): void { const _objectsConfig = deepClone(objectsConfig); _statesConfig.onChange = (id: string, state: ioBroker.State) => { - console.log('state changed. ' + id); + console.log(`state changed. ${id}`); if (context.onControllerStateChanged) { context.onControllerStateChanged(id, state); } }; _objectsConfig.onChange = (id: string, obj: ioBroker.AnyObject) => { - console.log('object changed. ' + id); + console.log(`object changed. ${id}`); if (context.onControllerObjectChanged) { context.onControllerObjectChanged(id, obj); } @@ -205,7 +205,7 @@ export default function testAdapter(options: Record): void { const { objects: _objects, states: _states } = await startController({ objects: _objectsConfig, - states: _statesConfig + states: _statesConfig, }); context.objects = _objects!; @@ -215,7 +215,7 @@ export default function testAdapter(options: Record): void { if (objectsConfig.type !== 'file') { const objs = fs.readJSONSync(path.join(thisDir, 'objects.json')); - await addObjects(_objects!, objs); + await addObjects(context.objects, objs); await startAdapter(); } else { await startAdapter(); @@ -233,81 +233,66 @@ export default function testAdapter(options: Record): void { }); }); - it( - options.name + ' ' + context.adapterShortName + ' adapter: check all important adapter attributes', - function (done) { - this.timeout(2000); - expect(context.adapter.namespace).to.be.equal(context.adapterShortName + '.0'); - expect(context.adapter.name).to.be.equal(context.adapterShortName); - expect(context.adapter.instance).to.be.equal(0); - // @ts-expect-error should not exist - expect(context.adapter.states).to.be.undefined; - // @ts-expect-error should not exist - expect(context.adapter.objects).to.be.undefined; - expect(context.adapter.log).to.be.ok; - expect(context.adapter.log!.info).to.be.a('function'); - expect(context.adapter.log!.debug).to.be.a('function'); - expect(context.adapter.log!.warn).to.be.a('function'); - expect(context.adapter.log!.error).to.be.a('function'); - expect(context.adapter.config.paramString).to.be.equal('value1'); - expect(context.adapter.config.paramNumber).to.be.equal(42); - expect(context.adapter.config.paramBoolean).to.be.equal(false); - expect(context.adapter.config.username).to.be.equal('tesla'); - // password has to be winning (decrypted via legacy - backward compatibility) - expect(context.adapter.config.password).to.be.equal('winning'); - // secondPassword should be decrypted with AES-256 correctly - expect(context.adapter.config.secondPassword).to.be.equal('ii-€+winning*-³§"'); - - let count = 0; - - context.states.getState( - `system.adapter.${context.adapterShortName}.0.compactMode`, - function (err, state) { - expect(state!.val).to.be.equal(true); - setTimeout(() => !--count && done(), 0); - } - ); - - count++; - context.states.getState( - `system.adapter.${context.adapterShortName}.0.connected`, - function (err, state) { - expect(state!.val).to.be.equal(true); - setTimeout(() => !--count && done(), 0); - } - ); + it(`${options.name} ${context.adapterShortName} adapter: check all important adapter attributes`, function (done) { + this.timeout(2000); + expect(context.adapter.namespace).to.be.equal(`${context.adapterShortName}.0`); + expect(context.adapter.name).to.be.equal(context.adapterShortName); + expect(context.adapter.instance).to.be.equal(0); + // @ts-expect-error should not exist + expect(context.adapter.states).to.be.undefined; + // @ts-expect-error should not exist + expect(context.adapter.objects).to.be.undefined; + expect(context.adapter.log).to.be.ok; + expect(context.adapter.log.info).to.be.a('function'); + expect(context.adapter.log.debug).to.be.a('function'); + expect(context.adapter.log.warn).to.be.a('function'); + expect(context.adapter.log.error).to.be.a('function'); + expect(context.adapter.config.paramString).to.be.equal('value1'); + expect(context.adapter.config.paramNumber).to.be.equal(42); + expect(context.adapter.config.paramBoolean).to.be.equal(false); + expect(context.adapter.config.username).to.be.equal('tesla'); + // password has to be winning (decrypted via legacy - backward compatibility) + expect(context.adapter.config.password).to.be.equal('winning'); + // secondPassword should be decrypted with AES-256 correctly + expect(context.adapter.config.secondPassword).to.be.equal('ii-€+winning*-³§"'); + + let count = 0; + + context.states.getState(`system.adapter.${context.adapterShortName}.0.compactMode`, function (err, state) { + expect(state!.val).to.be.equal(true); + setTimeout(() => !--count && done(), 0); + }); - count++; - context.states.getState(`system.adapter.${context.adapterShortName}.0.memRss`, function (err, state) { - expect(state!.val).to.be.equal(0); - setTimeout(() => !--count && done(), 0); - }); + count++; + context.states.getState(`system.adapter.${context.adapterShortName}.0.connected`, function (err, state) { + expect(state!.val).to.be.equal(true); + setTimeout(() => !--count && done(), 0); + }); - count++; - context.states.getState( - `system.adapter.${context.adapterShortName}.0.memHeapTotal`, - function (err, state) { - expect(state!.val).to.be.equal(0); - setTimeout(() => !--count && done(), 0); - } - ); - - count++; - context.states.getState( - `system.adapter.${context.adapterShortName}.0.memHeapUsed`, - function (err, state) { - expect(state!.val).to.be.equal(0); - setTimeout(() => !--count && done(), 0); - } - ); + count++; + context.states.getState(`system.adapter.${context.adapterShortName}.0.memRss`, function (err, state) { + expect(state!.val).to.be.equal(0); + setTimeout(() => !--count && done(), 0); + }); - count++; - context.states.getState(`system.adapter.${context.adapterShortName}.0.uptime`, function (err, state) { - expect(state!.val).to.be.at.least(0); - setTimeout(() => !--count && done(), 0); - }); - } - ); + count++; + context.states.getState(`system.adapter.${context.adapterShortName}.0.memHeapTotal`, function (err, state) { + expect(state!.val).to.be.equal(0); + setTimeout(() => !--count && done(), 0); + }); + + count++; + context.states.getState(`system.adapter.${context.adapterShortName}.0.memHeapUsed`, function (err, state) { + expect(state!.val).to.be.equal(0); + setTimeout(() => !--count && done(), 0); + }); + + count++; + context.states.getState(`system.adapter.${context.adapterShortName}.0.uptime`, function (err, state) { + expect(state!.val).to.be.at.least(0); + setTimeout(() => !--count && done(), 0); + }); + }); for (const test of tests) { test(it, expect, context); diff --git a/packages/controller/test/lib/testAdapterHelpers.ts b/packages/controller/test/lib/testAdapterHelpers.ts index bf3ff7b3d5..9a1ef45836 100644 --- a/packages/controller/test/lib/testAdapterHelpers.ts +++ b/packages/controller/test/lib/testAdapterHelpers.ts @@ -11,7 +11,7 @@ chai.use(chaiAsPromised); export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, context: TestContext): void { //adapterGetPort - it(context.name + ' ' + context.adapterShortName + ' adapter: find next free port', function (done) { + it(`${context.name} ${context.adapterShortName} adapter: find next free port`, function (done) { this.timeout(3_000); // @ts-expect-error expects more args @@ -33,7 +33,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); //checkPassword - it(context.name + ' ' + context.adapterShortName + ' adapter: validates user and password', function (done) { + it(`${context.name} ${context.adapterShortName} adapter: validates user and password`, function (done) { this.timeout(3_000); //@ts-expect-error Expecting a callback @@ -53,7 +53,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); //checkPassword (async) - it(context.name + ' ' + context.adapterShortName + ' adapter: validates user and password (ASYNC)', () => { + it(`${context.name} ${context.adapterShortName} adapter: validates user and password (ASYNC)`, () => { const promises = [ // promisify always provides a callback, so that doesn't need to be tested // User doesn't exist @@ -63,14 +63,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // Wrong password context.adapter .checkPasswordAsync('admin', '1234') - .should.eventually.deep.equal([false, 'system.user.admin']) + .should.eventually.deep.equal([false, 'system.user.admin']), ]; return Promise.all(promises); }).timeout(3_000); //setPassword - it(context.name + ' ' + context.adapterShortName + ' adapter: sets the users password', function (done) { + it(`${context.name} ${context.adapterShortName} adapter: sets the users password`, function (done) { this.timeout(3_000); // TODO: sync // TODO: async @@ -78,7 +78,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); //checkGroup - it(context.name + ' ' + context.adapterShortName + ' adapter: user exists and is in the group', function (done) { + it(`${context.name} ${context.adapterShortName} adapter: user exists and is in the group`, function (done) { this.timeout(3_000); // TODO: sync // TODO: async @@ -86,7 +86,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); //calculatePermissions - it(context.name + ' ' + context.adapterShortName + ' adapter: get the user permissions', function (done) { + it(`${context.name} ${context.adapterShortName} adapter: get the user permissions`, function (done) { this.timeout(3_000); // TODO: sync // TODO: async @@ -94,13 +94,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // getCertificates - it(context.name + ' ' + context.adapterShortName + ' adapter: returns SSL certificates by name', async () => { + it(`${context.name} ${context.adapterShortName} adapter: returns SSL certificates by name`, async () => { // has to work without chained certificate const certs = await context.adapter.getCertificatesAsync('defaultPublic', 'defaultPrivate'); expect(certs).to.be.ok; }); - it(context.name + ' ' + context.adapterShortName + ' adapter: get the user id', async () => { + it(`${context.name} ${context.adapterShortName} adapter: get the user id`, async () => { let id = await context.adapter.getUserID('admin'); expect(id).to.be.equal('system.user.admin'); id = await context.adapter.getUserID('test'); @@ -112,7 +112,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // formatValue - it(context.name + ' ' + context.adapterShortName + ' adapter: Check formatValue', function (done) { + it(`${context.name} ${context.adapterShortName} adapter: Check formatValue`, function (done) { this.timeout(3_000); let testValue; @@ -136,7 +136,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont testValue = context.adapter.formatValue('1000', ''); //1.000,00 const testValue2 = context.adapter.formatValue( '1000', - context.adapter.isFloatComma === undefined ? '.,' : context.adapter.isFloatComma ? '.,' : ',.' + context.adapter.isFloatComma === undefined ? '.,' : context.adapter.isFloatComma ? '.,' : ',.', ); //1.000,00 expect(testValue).to.equal(testValue2); @@ -160,7 +160,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // formatDate - it(context.name + ' ' + context.adapterShortName + ' adapter: Check formatDate', function (done) { + it(`${context.name} ${context.adapterShortName} adapter: Check formatDate`, function (done) { this.timeout(3_000); const testDate = new Date(0); let testStringDate; @@ -213,7 +213,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // Validator.fixId - it(context.name + ' ' + context.adapterShortName + ' adapter utils: check fixId', () => { + it(`${context.name} ${context.adapterShortName} adapter utils: check fixId`, () => { const utils = new Validator( context.objects, context.states, @@ -222,7 +222,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont console, context.adapter.namespace, // @ts-expect-error internal access - context.adapter._namespaceRegExp + context.adapter._namespaceRegExp, ); const adapterName = context.adapter.name; @@ -230,37 +230,37 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont const adapterInstance = context.adapter.instance; expect(adapterInstance).to.equal(0); const adapterNamespace = context.adapter.namespace; - expect(adapterNamespace).to.equal(adapterName + '.' + adapterInstance); + expect(adapterNamespace).to.equal(`${adapterName}.${adapterInstance}`); let testString; //test with Object empty testString = utils.fixId({}); expect(testString).to.be.a('string'); - expect(testString).to.equal(adapterNamespace + '.'); + expect(testString).to.equal(`${adapterNamespace}.`); //test with Object state testString = utils.fixId({ - state: 'baz' + state: 'baz', }); expect(testString).to.be.a('string'); - expect(testString).to.equal(adapterNamespace + '.baz'); + expect(testString).to.equal(`${adapterNamespace}.baz`); //test with Object state + channel testString = utils.fixId({ state: 'baz', - channel: 'bar' + channel: 'bar', }); expect(testString).to.be.a('string'); - expect(testString).to.equal(adapterNamespace + '.bar.baz'); + expect(testString).to.equal(`${adapterNamespace}.bar.baz`); //test with Object state + channel + device testString = utils.fixId({ state: 'baz', channel: 'bar', - device: 'foo' + device: 'foo', }); expect(testString).to.be.a('string'); - expect(testString).to.equal(adapterNamespace + '.foo.bar.baz'); + expect(testString).to.equal(`${adapterNamespace}.foo.bar.baz`); //test with string empty as state testString = utils.fixId(''); @@ -270,44 +270,44 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont //test with string empty as subscribe testString = utils.fixId('', true); expect(testString).to.be.a('string'); - expect(testString).to.equal(adapterNamespace + '.'); + expect(testString).to.equal(`${adapterNamespace}.`); //test with string state testString = utils.fixId('baz'); expect(testString).to.be.a('string'); - expect(testString).to.equal(adapterNamespace + '.baz'); + expect(testString).to.equal(`${adapterNamespace}.baz`); //test with string state + channel testString = utils.fixId('bar.baz'); expect(testString).to.be.a('string'); - expect(testString).to.equal(adapterNamespace + '.bar.baz'); + expect(testString).to.equal(`${adapterNamespace}.bar.baz`); //test with string state + channel + device testString = utils.fixId('foo.bar.baz'); expect(testString).to.be.a('string'); - expect(testString).to.equal(adapterNamespace + '.foo.bar.baz'); + expect(testString).to.equal(`${adapterNamespace}.foo.bar.baz`); //test with already fixed ID - testString = utils.fixId(adapterNamespace + '.foo.bar.baz'); + testString = utils.fixId(`${adapterNamespace}.foo.bar.baz`); expect(testString).to.be.a('string'); - expect(testString).to.equal(adapterNamespace + '.foo.bar.baz'); + expect(testString).to.equal(`${adapterNamespace}.foo.bar.baz`); //test composition testString = utils.fixId(utils.fixId('foo.bar.baz')); expect(testString).to.be.a('string'); - expect(testString).to.equal(adapterNamespace + '.foo.bar.baz'); + expect(testString).to.equal(`${adapterNamespace}.foo.bar.baz`); }).timeout(2_000); // Check setTimeout throw - it(context.name + ' ' + context.adapterShortName + ' adapter: check setTimeout', done => { + it(`${context.name} ${context.adapterShortName} adapter: check setTimeout`, done => { // is valid const timeout = context.adapter.setTimeout( () => { /** pass */ }, - 2 ** 32 / 2 - 1 + 2 ** 32 / 2 - 1, ); - context.adapter.clearTimeout(timeout!); + context.adapter.clearTimeout(timeout); // is valid context.adapter.setTimeout(() => { @@ -319,7 +319,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont () => { /** pass */ }, - 2 ** 32 / 2 + 2 ** 32 / 2, ); }).to.throw(/is larger than/, 'Invalid timeout not thrown'); @@ -333,29 +333,29 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // Check setInterval throw - it(context.name + ' ' + context.adapterShortName + ' adapter: check setInterval', done => { + it(`${context.name} ${context.adapterShortName} adapter: check setInterval`, done => { // is valid let interval = context.adapter.setInterval( () => { /** pass */ }, - 2 ** 32 / 2 - 1 + 2 ** 32 / 2 - 1, ); - context.adapter.clearInterval(interval!); + context.adapter.clearInterval(interval); // is valid interval = context.adapter.setInterval(() => { /** pass */ }, 0); - context.adapter.clearInterval(interval!); + context.adapter.clearInterval(interval); expect(() => { context.adapter.setInterval( () => { /** pass */ }, - 2 ** 32 / 2 + 2 ** 32 / 2, ); }).to.throw(/is larger than/, 'Invalid timeout not thrown'); @@ -369,7 +369,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // idToDCS - it(context.name + ' ' + context.adapterShortName + ' adapter: Check idToDCS', function (done) { + it(`${context.name} ${context.adapterShortName} adapter: Check idToDCS`, function (done) { this.timeout(3000); let testString; @@ -389,7 +389,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // _DCS2ID - it(context.name + ' ' + context.adapterShortName + ' adapter: Check _DCS2ID', function (done) { + it(`${context.name} ${context.adapterShortName} adapter: Check _DCS2ID`, function (done) { this.timeout(3_000); let testString; @@ -440,7 +440,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont done(); }); - it(context.name + ' ' + context.adapterShortName + ' adapter: encrypt decrypt functions', () => { + it(`${context.name} ${context.adapterShortName} adapter: encrypt decrypt functions`, () => { const encrypted = context.adapter.encrypt('topSecret'); // we only check not equal, because encryption can change and is not always deterministic expect(encrypted.length).to.equal(79); @@ -450,35 +450,28 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(decrypted).to.equal('topSecret'); }); - it( - context.name + ' ' + context.adapterShortName + ' adapter: updateConfig needs to respect encryptedNative', - async () => { - const oldConfig = await context.adapter.getForeignObjectAsync( - `system.adapter.${context.adapter.namespace}` - ); + it(`${context.name} ${context.adapterShortName} adapter: updateConfig needs to respect encryptedNative`, async () => { + const oldConfig = await context.adapter.getForeignObjectAsync(`system.adapter.${context.adapter.namespace}`); - const passphrase = 'SavePassword123'; + const passphrase = 'SavePassword123'; - await context.adapter.updateConfig({ secondPassword: passphrase }); - const newConfig = await context.adapter.getForeignObjectAsync( - `system.adapter.${context.adapter.namespace}` - ); + await context.adapter.updateConfig({ secondPassword: passphrase }); + const newConfig = await context.adapter.getForeignObjectAsync(`system.adapter.${context.adapter.namespace}`); - // non encrypted and non updated params stay the same - expect(newConfig?.native.paramString).to.exist; - expect(newConfig?.native.paramString).to.be.equal(oldConfig?.native.paramString); + // non encrypted and non updated params stay the same + expect(newConfig?.native.paramString).to.exist; + expect(newConfig?.native.paramString).to.be.equal(oldConfig?.native.paramString); - // encrypted non updated passwords, decrypt to the same value - expect(newConfig?.native.password).to.exist; - expect(context.adapter.decrypt(newConfig?.native.password)).to.be.equal( - context.adapter.decrypt(oldConfig?.native.password) - ); + // encrypted non updated passwords, decrypt to the same value + expect(newConfig?.native.password).to.exist; + expect(context.adapter.decrypt(newConfig?.native.password)).to.be.equal( + context.adapter.decrypt(oldConfig?.native.password), + ); - // updated encrypted value is correctly decrypted - expect(newConfig?.native.secondPassword).to.exist; - expect(context.adapter.decrypt(newConfig?.native.secondPassword)).to.be.equal(passphrase); - } - ); + // updated encrypted value is correctly decrypted + expect(newConfig?.native.secondPassword).to.exist; + expect(context.adapter.decrypt(newConfig?.native.secondPassword)).to.be.equal(passphrase); + }); // setState object validation for (const method of ['setState', 'setStateChanged', 'setForeignState', 'setForeignStateChanged']) { @@ -599,7 +592,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); } - it(context.name + ' ' + context.adapterShortName + ' getAdapterScopedPackageIdentifier', () => { + it(`${context.name} ${context.adapterShortName} getAdapterScopedPackageIdentifier`, () => { const nonOrgaPacket = context.adapter.getAdapterScopedPackageIdentifier('axios'); const orgaPacket = context.adapter.getAdapterScopedPackageIdentifier('@iobroker/adapter-react-v5'); diff --git a/packages/controller/test/lib/testAliases.ts b/packages/controller/test/lib/testAliases.ts index b22b63ebe5..350ce59199 100644 --- a/packages/controller/test/lib/testAliases.ts +++ b/packages/controller/test/lib/testAliases.ts @@ -17,37 +17,37 @@ async function prepareGroupsAndUsers(objects: ObjectsInRedisClient): Promise { + it(`${testName}Read alias state`, done => { context.adapter.setForeignObject( gid, { @@ -158,7 +158,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont min: -100, max: 100, read: true, - write: true + write: true, }, native: {}, type: 'state', @@ -166,8 +166,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont state: PERMISSIONS['0666'], object: PERMISSIONS['0600'], owner: 'system.user.userC', - ownerGroup: 'system.group.user1' - } + ownerGroup: 'system.group.user1', + }, }, err => { expect(err).to.be.not.ok; @@ -186,10 +186,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont max: 100, unit: '%', alias: { - id: gid + id: gid, }, read: true, - write: true + write: true, }, native: {}, type: 'state', @@ -197,8 +197,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont state: PERMISSIONS['0666'], object: PERMISSIONS['0600'], owner: 'system.user.userC', - ownerGroup: 'system.group.user1' - } + ownerGroup: 'system.group.user1', + }, }, () => { context.adapter.getForeignState(gAliasID, (err, state) => { @@ -208,14 +208,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(state!.ack).to.be.true; done(); }); - } + }, ); }); - } + }, ); }).timeout(3_000); - it(testName + 'Read alias states', async () => { + it(`${testName}Read alias states`, async () => { const nonAliasId1 = `${gid}nonAlias1`; const nonAliasId2 = `${gid}nonAlias2`; // create some non-alias data to check that it works with mixed ids @@ -226,9 +226,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', read: true, - write: true + write: true, }, - native: {} + native: {}, }); // create some non-alias data to check that it works with mixed ids @@ -239,18 +239,18 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', read: true, - write: true + write: true, }, - native: {} + native: {}, }); - await context.adapter.setForeignObjectAsync(gid + '1', { + await context.adapter.setForeignObjectAsync(`${gid}1`, { common: { name: 'forAlias1', type: 'number', role: 'level', read: true, - write: true + write: true, }, native: {}, type: 'state', @@ -258,16 +258,16 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont state: PERMISSIONS['0666'], object: PERMISSIONS['0600'], owner: 'system.user.userC', - ownerGroup: 'system.group.user1' - } + ownerGroup: 'system.group.user1', + }, }); - await context.adapter.setForeignStateAsync(gid + '1', 5, true); + await context.adapter.setForeignStateAsync(`${gid}1`, 5, true); await context.adapter.setForeignStateAsync(nonAliasId1, 3, true); await context.adapter.setForeignStateAsync(nonAliasId2, 2, true); // create alias - await context.adapter.setForeignObjectAsync(gAliasID + '1', { + await context.adapter.setForeignObjectAsync(`${gAliasID}1`, { common: { name: 'Test Alias1', type: 'number', @@ -275,10 +275,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont min: -10, max: 10, alias: { - id: gid + '1' + id: `${gid}1`, }, read: true, - write: true + write: true, }, native: {}, type: 'state', @@ -286,35 +286,35 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont state: PERMISSIONS['0666'], object: PERMISSIONS['0666'], owner: 'system.user.userC', - ownerGroup: 'system.group.user1' - } + ownerGroup: 'system.group.user1', + }, }); - let states = await context.adapter.getForeignStatesAsync(gAliasID + '1'); + let states = await context.adapter.getForeignStatesAsync(`${gAliasID}1`); // No scaling because no % and no min, max in source object - expect(states![gAliasID + '1'].val).to.be.equal(5); - expect(states![gAliasID + '1'].ack).to.be.true; + expect(states[`${gAliasID}1`].val).to.be.equal(5); + expect(states[`${gAliasID}1`].ack).to.be.true; // original array should not be changed - const ids = [nonAliasId1, gAliasID + '1', nonAliasId2]; + const ids = [nonAliasId1, `${gAliasID}1`, nonAliasId2]; states = await context.adapter.getForeignStatesAsync(ids); expect(ids[0]).to.be.equal(nonAliasId1); - expect(states![nonAliasId1].val).to.be.equal(3); - expect(states![nonAliasId1].ack).to.be.true; + expect(states[nonAliasId1].val).to.be.equal(3); + expect(states[nonAliasId1].ack).to.be.true; // It must be scaled from -100, 2, 100 // to -10, 0.2, 10 - expect(ids[1]).to.be.equal(gAliasID + '1'); - expect(states![gAliasID + '1'].val).to.be.equal(5); - expect(states![gAliasID + '1'].ack).to.be.true; + expect(ids[1]).to.be.equal(`${gAliasID}1`); + expect(states[`${gAliasID}1`].val).to.be.equal(5); + expect(states[`${gAliasID}1`].ack).to.be.true; expect(ids[2]).to.be.equal(nonAliasId2); - expect(states![nonAliasId2].val).to.be.equal(2); - expect(states![nonAliasId2].ack).to.be.true; + expect(states[nonAliasId2].val).to.be.equal(2); + expect(states[nonAliasId2].ack).to.be.true; }).timeout(3_000); - it(testName + 'Write alias state', done => { + it(`${testName}Write alias state`, done => { context.adapter.setForeignState(gAliasID, 10, false, () => { context.adapter.getForeignState(gid, (err, state) => { // It must be scaled from 0, 10, 100 @@ -327,9 +327,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(3_000); // custom read/write functions - it(testName + 'Use convert state', done => { + it(`${testName}Use convert state`, done => { context.adapter.setForeignObject( - gid + 'C', + `${gid}C`, { common: { name: 'forAliasC', @@ -338,18 +338,18 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont min: -100, max: 100, read: true, - write: true + write: true, }, native: {}, - type: 'state' + type: 'state', }, () => { - context.adapter.setForeignState(gid + 'C', 2, true, err => { + context.adapter.setForeignState(`${gid}C`, 2, true, err => { expect(err).to.be.not.ok; // create alias context.adapter.setForeignObject( - gAliasID + 'C', + `${gAliasID}C`, { common: { name: 'Test AliasC', @@ -360,24 +360,24 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont read: true, write: true, alias: { - id: gid + 'C', + id: `${gid}C`, read: 'val * 10 + 1', - write: '(val - 1) / 10' - } + write: '(val - 1) / 10', + }, }, native: {}, - type: 'state' + type: 'state', }, () => { - context.adapter.getForeignState(gAliasID + 'C', (err, state) => { + context.adapter.getForeignState(`${gAliasID}C`, (err, state) => { // It must be converted 2 * 10 + 1 expect((state!.val as number).toFixed(3)).to.be.equal('21.000'); expect(state!.ack).to.be.true; - context.adapter.setForeignState(gAliasID + 'C', 41, true, err => { + context.adapter.setForeignState(`${gAliasID}C`, 41, true, err => { expect(err).to.be.not.ok; - context.adapter.getForeignState(gid + 'C', (err, state) => { + context.adapter.getForeignState(`${gid}C`, (err, state) => { expect((state!.val as number).toFixed(3)).to.be.equal('4.000'); expect(state!.ack).to.be.true; @@ -385,14 +385,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); }); - } + }, ); }); - } + }, ); }).timeout(3_000); - it(testName + 'Read alias state by not admin', async () => { + it(`${testName}Read alias state by not admin`, async () => { await prepareGroupsAndUsers(context.objects); await context.adapter.setForeignStateAsync(gAliasID, 10, false, { user: 'system.user.userC' }); let state = await context.adapter.getForeignStateAsync(gid, { user: 'system.user.userC' }); @@ -409,7 +409,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(state!.ack).to.be.false; }).timeout(3_000); - it(testName + 'Read alias state by not admin without rights', async () => { + it(`${testName}Read alias state by not admin without rights`, async () => { await prepareGroupsAndUsers(context.objects); try { @@ -429,7 +429,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // test subscriptions // subscribeForeignStates - it(testName + 'Test subscribe aliases', done => { + it(`${testName}Test subscribe aliases`, done => { context.onAdapterStateChanged = (id, state) => { if (id === gAliasID) { expect(state).to.be.ok; @@ -441,11 +441,11 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }; context.adapter.subscribeForeignStates(gAliasID, () => - context.states.setState(gid, 10, err => expect(err).to.be.not.ok) + context.states.setState(gid, 10, err => expect(err).to.be.not.ok), ); }).timeout(3_000); - it(testName + 'Test unsubscribe aliases', done => { + it(`${testName}Test unsubscribe aliases`, done => { context.onAdapterStateChanged = () => { expect(true).to.be.false; }; @@ -458,7 +458,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }).timeout(3_000); - it(testName + 'Test subscribe aliases pattern', done => { + it(`${testName}Test subscribe aliases pattern`, done => { context.onAdapterStateChanged = (id, state) => { if (id === gAliasID) { expect(state).to.be.ok; @@ -472,12 +472,12 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont const parts = gAliasID.split('.'); parts.pop(); - context.adapter.subscribeForeignStates(parts.join('.') + '.*', () => - context.states.setState(gid, 10, err => expect(err).to.be.not.ok) + context.adapter.subscribeForeignStates(`${parts.join('.')}.*`, () => + context.states.setState(gid, 10, err => expect(err).to.be.not.ok), ); }).timeout(3_000); - it(testName + 'Test unsubscribe aliases pattern', done => { + it(`${testName}Test unsubscribe aliases pattern`, done => { context.onAdapterStateChanged = () => { expect(true).to.be.false; }; @@ -485,7 +485,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont const parts = gAliasID.split('.'); parts.pop(); - context.adapter.unsubscribeForeignStates(parts.join('.') + '.*', () => { + context.adapter.unsubscribeForeignStates(`${parts.join('.')}.*`, () => { context.states.setState(gid, 10, err => { expect(err).to.be.not.ok; setTimeout(() => done(), 500); @@ -494,7 +494,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(3_000); // Avoid Issue 2753 - it(testName + 'Test subscribe alias multiple times should only publish once', async () => { + it(`${testName}Test subscribe alias multiple times should only publish once`, async () => { let noTriggered = 0; context.onAdapterStateChanged = (id, state) => { @@ -513,10 +513,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(noTriggered).to.equal(1); }).timeout(3_000); - it(testName + 'Test negative subscribe aliases regex', done => { + it(`${testName}Test negative subscribe aliases regex`, done => { const parts = gAliasID.split('.'); parts.pop(); - const regexp = new RegExp(parts.join('\\.') + '\\..*'); + const regexp = new RegExp(`${parts.join('\\.')}\\..*`); // @ts-expect-error we are passing a regexp which is not allowed context.adapter.subscribeForeignStates(regexp, err => { @@ -526,10 +526,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }).timeout(3_000); - it(testName + 'Test unsubscribe aliases regex', done => { + it(`${testName}Test unsubscribe aliases regex`, done => { const parts = gAliasID.split('.'); parts.pop(); - const regexp = new RegExp(parts.join('\\.') + '\\..*'); + const regexp = new RegExp(`${parts.join('\\.')}\\..*`); // @ts-expect-error we are passing a regexp which is not allowed context.adapter.unsubscribeForeignStates(regexp, err => { @@ -538,7 +538,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }).timeout(3_000); - it(testName + 'Test subscribe aliases array', done => { + it(`${testName}Test subscribe aliases array`, done => { let count = 0; context.onAdapterStateChanged = (id, state) => { if (id === gAliasID) { @@ -561,11 +561,11 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }; context.adapter.subscribeForeignStates([gAliasID, gid], () => - context.states.setState(gid, 10, err => expect(err).to.be.not.ok) + context.states.setState(gid, 10, err => expect(err).to.be.not.ok), ); }).timeout(3_000); - it(testName + 'Test unsubscribe aliases array', done => { + it(`${testName}Test unsubscribe aliases array`, done => { context.onAdapterStateChanged = () => { expect(true).to.be.false; }; @@ -578,7 +578,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }).timeout(3_000); - it(testName + 'Test change subscribed aliases', done => { + it(`${testName}Test change subscribed aliases`, done => { context.onAdapterStateChanged = (id, state) => { if (id === gAliasID) { // A: @@ -597,10 +597,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont max: 100, unit: '%', alias: { - id: gid + 'A' + id: `${gid}A`, }, read: true, - write: true + write: true, }, native: {}, type: 'state', @@ -608,8 +608,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont object: PERMISSIONS['0666'], state: PERMISSIONS['0666'], owner: 'system.user.userC', - ownerGroup: 'system.group.user1' - } + ownerGroup: 'system.group.user1', + }, }, () => { context.onAdapterStateChanged = function (id, state) { @@ -619,7 +619,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // -200, 10 , 200 => 0, 52.5, 100 expect(state!.val).to.equal(52.5); context.adapter.unsubscribeForeignStates(gAliasID, () => { - context.states.setState(gid + 'A', 11, () => { + context.states.setState(`${gid}A`, 11, () => { done(); }); }); @@ -630,17 +630,17 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont setTimeout(() => { // this change must be ignored context.states.setState(gid, 20, () => { - context.states.setState(gid + 'A', 10); + context.states.setState(`${gid}A`, 10); }); }, 100); - } + }, ); } }; // create new alias context.adapter.setForeignObject( - gid + 'A', + `${gid}A`, { common: { name: 'forAliasA', @@ -649,19 +649,19 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont min: -200, max: 200, read: true, - write: true + write: true, }, native: {}, - type: 'state' + type: 'state', }, () => context.adapter.subscribeForeignStates(gAliasID, () => - context.states.setState(gid, 10, err => expect(err).to.be.not.ok) - ) + context.states.setState(gid, 10, err => expect(err).to.be.not.ok), + ), ); // => GOTO A: }).timeout(3_000); - it(testName + 'Test subscribe "*"', done => { + it(`${testName}Test subscribe "*"`, done => { // 1. Create alias // 2. Create normal state (independent from alias) // 3. subscribe "*" @@ -671,7 +671,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // 1. create new alias context.adapter.setForeignObject( - gid + 'Star', + `${gid}Star`, { common: { name: 'forAliasStar', @@ -680,14 +680,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont min: 0, max: 100, read: true, - write: true + write: true, }, native: {}, - type: 'state' + type: 'state', }, () => context.adapter.setForeignObject( - gAliasID + 'Star', + `${gAliasID}Star`, { common: { name: 'Test Alias', @@ -696,18 +696,18 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont min: -10, max: 10, alias: { - id: gid + 'Star' + id: `${gid}Star`, }, read: true, - write: true + write: true, }, native: {}, - type: 'state' + type: 'state', }, () => // 2. Create normal state (independent from alias) context.adapter.setForeignObject( - gid + 'NotAlias', + `${gid}NotAlias`, { common: { name: 'NotForAliasStar', @@ -716,24 +716,24 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont min: 0, max: 10, read: true, - write: true + write: true, }, native: {}, - type: 'state' + type: 'state', }, () => context.adapter.subscribeForeignStates('*', () => { let count = 0; context.onAdapterStateChanged = (id, state) => { // B: - if (id === gid + 'NotAlias') { + if (id === `${gid}NotAlias`) { expect(state!.val).to.be.equal(2); count++; - } else if (id === gAliasID + 'Star') { + } else if (id === `${gAliasID}Star`) { count++; // no % -> no scaling expect(state!.val).to.be.equal(10); - } else if (id === gid + 'Star') { + } else if (id === `${gid}Star`) { count++; expect(state!.val).to.be.equal(10); } @@ -747,28 +747,28 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // 5. unsubscribe "*" context.adapter.unsubscribeForeignStates('*', () => - context.states.setState(gid + 'NotAlias', 3, () => - context.states.setState(gAliasID + 'Star', 5, () => - setTimeout(() => done(), 500) - ) - ) + context.states.setState(`${gid}NotAlias`, 3, () => + context.states.setState(`${gAliasID}Star`, 5, () => + setTimeout(() => done(), 500), + ), + ), ); } }; // 4. changes must come for alias and independent state - context.states.setState(gid + 'NotAlias', 2, () => - context.states.setState(gid + 'Star', 10, () => { + context.states.setState(`${gid}NotAlias`, 2, () => + context.states.setState(`${gid}Star`, 10, () => { // go to B: - }) + }), ); - }) - ) - ) + }), + ), + ), ); }).timeout(3_000); - it(testName + 'Test newly created alias after subscribe', done => { + it(`${testName}Test newly created alias after subscribe`, done => { // at first we subscribe context.adapter.subscribeForeignStates('*', err => { // create orig object @@ -783,10 +783,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont min: 0, max: 100, read: true, - write: true + write: true, }, native: {}, - type: 'state' + type: 'state', }, err => { expect(err).to.be.not.ok; @@ -801,13 +801,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont min: -10, max: 10, alias: { - id: `${gid}afterSub` + id: `${gid}afterSub`, }, read: true, - write: true + write: true, }, native: {}, - type: 'state' + type: 'state', }, err => { expect(err).to.be.not.ok; @@ -823,14 +823,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont setTimeout(() => { context.states.setState(`${gid}afterSub`, 50); }, 100); - } + }, ); - } + }, ); }); }).timeout(3_000); - it(testName + 'Test newly created alias after partial subscribe', done => { + it(`${testName}Test newly created alias after partial subscribe`, done => { // at first we subscribe, but only partial context.adapter.unsubscribeForeignStates('*', () => { context.adapter.subscribeForeignStates(`${gAliasID}okay*`, err => { @@ -846,10 +846,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont min: 0, max: 100, read: true, - write: true + write: true, }, native: {}, - type: 'state' + type: 'state', }, err => { expect(err).to.be.not.ok; @@ -864,13 +864,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont min: -10, max: 10, alias: { - id: `${gid}partialOrig` + id: `${gid}partialOrig`, }, read: true, - write: true + write: true, }, native: {}, - type: 'state' + type: 'state', }, err => { expect(err).to.be.not.ok; @@ -890,15 +890,15 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont setTimeout(() => { context.states.setState(`${gid}partialOrig`, 50); }, 100); - } + }, ); - } + }, ); }); }); }).timeout(3_000); - it(testName + 'should respect different read and write ids', done => { + it(`${testName}should respect different read and write ids`, done => { // first we subscribe to all context.adapter.subscribeForeignStates('*', err => { expect(err).to.not.be.ok; @@ -917,12 +917,12 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont alias: { id: { read: `${gid}readOrig`, - write: `${gid}writeOrig` - } - } + write: `${gid}writeOrig`, + }, + }, }, native: {}, - type: 'state' + type: 'state', }, err => { expect(err).to.not.be.ok; @@ -937,10 +937,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont min: -10, max: 10, read: true, - write: true + write: true, }, native: {}, - type: 'state' + type: 'state', }, err => { expect(err).to.not.be.ok; @@ -955,10 +955,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont min: -10, max: 10, read: true, - write: true + write: true, }, native: {}, - type: 'state' + type: 'state', }, err => { expect(err).to.not.be.ok; @@ -980,16 +980,16 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); }); - } + }, ); - } + }, ); - } + }, ); }); }).timeout(3_000); - it(testName + 'should respect alias read id on getForeignStates', async () => { + it(`${testName}should respect alias read id on getForeignStates`, async () => { // set our alias read obj await context.adapter.setForeignObjectAsync(`${gid}readGetStates`, { common: { @@ -1000,10 +1000,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont min: -10, max: 10, read: true, - write: true + write: true, }, native: {}, - type: 'state' + type: 'state', }); await context.adapter.setForeignObjectAsync(`${gid}writeGetStates`, { @@ -1015,10 +1015,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont max: 10, def: 10, read: true, - write: true + write: true, }, native: {}, - type: 'state' + type: 'state', }); // set write object @@ -1032,14 +1032,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont alias: { id: { read: `${gid}readGetStates`, - write: `${gid}writeGetStates` - } + write: `${gid}writeGetStates`, + }, }, read: true, - write: true + write: true, }, native: {}, - type: 'state' + type: 'state', }); // now perform getStates with pattern @@ -1049,13 +1049,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(states[`${gAliasID}aliasReadWriteGetStates`].val).to.be.equal(5); }).timeout(3_000); - it(testName + 'Read alias states via getStates should apply permissions', async () => { + it(`${testName}Read alias states via getStates should apply permissions`, async () => { const states = await context.adapter.getForeignStatesAsync(`${gAliasID}*`, { user: 'system.user.queen' }); // on permission problems, we will receive only an id with null, ensure that this does not happen expect(states[`${gAliasID}C`]).to.be.ok; }); - it(testName + 'Alias setState ignores source permissions', async () => { + it(`${testName}Alias setState ignores source permissions`, async () => { const nonAliasId = `${gid}.permissionNonAlias`; const aliasId = `${gAliasID}.permissionOnlyAlias`; const val = 3; @@ -1067,7 +1067,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', read: true, - write: true + write: true, }, native: {}, type: 'state', @@ -1075,8 +1075,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont state: PERMISSIONS['0600'], // 0600 only owner is allowed to write object: PERMISSIONS['0600'], owner: 'system.user.user', - ownerGroup: 'system.group.user1' - } + ownerGroup: 'system.group.user1', + }, }); // we create an alias objects, where we have permissions for @@ -1089,10 +1089,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont max: 100, unit: '%', alias: { - id: nonAliasId + id: nonAliasId, }, read: true, - write: true + write: true, }, native: {}, type: 'state', @@ -1100,8 +1100,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont state: PERMISSIONS['0666'], object: PERMISSIONS['0666'], owner: 'system.user.userC', - ownerGroup: 'system.group.user1' - } + ownerGroup: 'system.group.user1', + }, }); // we use the user which is allowed to modify alias but not the source object @@ -1111,11 +1111,11 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(state?.val).to.be.equal(val); // reading the source obj should not be ok expect( - context.adapter.getForeignStateAsync(nonAliasId, { user: 'system.user.userD' }) + context.adapter.getForeignStateAsync(nonAliasId, { user: 'system.user.userD' }), ).to.be.eventually.rejectedWith('permissionError', 'Should have thrown a permission error'); }); - it(testName + 'Non-existing alias should return a null value just like other state', async () => { + it(`${testName}Non-existing alias should return a null value just like other state`, async () => { const normalState = await context.adapter.getForeignStateAsync(`${gid}.isNotExisting`); const aliasState = await context.adapter.getForeignStateAsync(`${gAliasID}.isNotExisting`); diff --git a/packages/controller/test/lib/testConsole.ts b/packages/controller/test/lib/testConsole.ts index 713868129e..9135bfcbef 100644 --- a/packages/controller/test/lib/testConsole.ts +++ b/packages/controller/test/lib/testConsole.ts @@ -5,7 +5,7 @@ import type { TestContext } from '../_Types.js'; import fs from 'fs-extra'; import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); const iobExecutable = path.join(thisDir, '..', '..', 'iobroker.js'); @@ -13,17 +13,17 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont const testName = `${context.name} ${context.adapterShortName} console: `; // passwd, user passwd, user check - it(testName + 'user passwd', async () => { + it(`${testName}user passwd`, async () => { let res; res = await execAsync( - `"${process.execPath}" "${iobExecutable}" passwd admin --password ${context.appName.toLowerCase()}` + `"${process.execPath}" "${iobExecutable}" passwd admin --password ${context.appName.toLowerCase()}`, ); expect(res.stderr).to.be.not.ok; // check password res = await execAsync( - `"${process.execPath}" "${iobExecutable}" user check admin --password ${context.appName.toLowerCase()}` + `"${process.execPath}" "${iobExecutable}" user check admin --password ${context.appName.toLowerCase()}`, ); expect(res.stderr).to.be.not.ok; // negative check @@ -31,7 +31,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont await execAsync( `"${ process.execPath - }" "${iobExecutable}" user check admin --password ${`${context.appName.toLowerCase()}2`}` + }" "${iobExecutable}" user check admin --password ${`${context.appName.toLowerCase()}2`}`, ); expect(true, 'should throw').to.be.false; } catch { @@ -41,14 +41,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont res = await execAsync( `"${ process.execPath - }" "${iobExecutable}" user passwd admin --password ${`${context.appName.toLowerCase()}1`}` + }" "${iobExecutable}" user passwd admin --password ${`${context.appName.toLowerCase()}1`}`, ); expect(res.stderr).to.be.not.ok; // check new Password res = await execAsync( `"${ process.execPath - }" "${iobExecutable}" user check admin --password ${`${context.appName.toLowerCase()}1`}` + }" "${iobExecutable}" user check admin --password ${`${context.appName.toLowerCase()}1`}`, ); expect(res.stderr).to.be.not.ok; @@ -56,12 +56,12 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont res = await execAsync( `"${ process.execPath - }" "${iobExecutable}" user passwd admin --password ${`${context.appName.toLowerCase()}`}` + }" "${iobExecutable}" user passwd admin --password ${`${context.appName.toLowerCase()}`}`, ); expect(res.stderr).to.be.not.ok; // check password res = await execAsync( - `"${process.execPath}" "${iobExecutable}" user check admin --password ${`${context.appName.toLowerCase()}`}` + `"${process.execPath}" "${iobExecutable}" user check admin --password ${`${context.appName.toLowerCase()}`}`, ); expect(res.stderr).to.be.not.ok; @@ -70,7 +70,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont await execAsync( `"${ process.execPath - }" "${iobExecutable}" user passwd uuuser --password ${`${context.appName.toLowerCase()}1`}` + }" "${iobExecutable}" user passwd uuuser --password ${`${context.appName.toLowerCase()}1`}`, ); expect(true, 'should throw').to.be.false; } catch { @@ -82,7 +82,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont await execAsync( `"${ process.execPath - }" "${iobExecutable}" user check uuuser --password ${`${context.appName.toLowerCase()}1`}` + }" "${iobExecutable}" user check uuuser --password ${`${context.appName.toLowerCase()}1`}`, ); expect(true, 'should throw').to.be.false; } catch { @@ -91,7 +91,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(40_000); // user get - it(testName + 'user get', async () => { + it(`${testName}user get`, async () => { // check if no args set try { await execAsync(`"${process.execPath}" "${iobExecutable}" user`); @@ -120,7 +120,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(20_000); // adduser user add - it(testName + 'user add', async () => { + it(`${testName}user add`, async () => { let res; // check if no args set try { @@ -140,7 +140,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // add user res = await execAsync( - `"${process.execPath}" "${iobExecutable}" user add newUser --password user --ingroup user` + `"${process.execPath}" "${iobExecutable}" user add newUser --password user --ingroup user`, ); expect(res.stderr).to.be.not.ok; @@ -166,7 +166,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(20_000); // user disable / enable - it(testName + 'user disable/enable', async () => { + it(`${testName}user disable/enable`, async () => { let res; // add second user @@ -215,7 +215,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(25_000); // ud udel userdel deluser user del - it(testName + 'user del', async () => { + it(`${testName}user del`, async () => { let res; // check if no args set try { @@ -248,7 +248,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(20_000); // group add - it(testName + 'group add', async () => { + it(`${testName}group add`, async () => { // check if no args set try { await execAsync(`"${process.execPath}" "${iobExecutable}" group add`); @@ -279,7 +279,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(20_000); // group del - it(testName + 'group del', async () => { + it(`${testName}group del`, async () => { // check if no args set try { await execAsync(`"${process.execPath}" "${iobExecutable}" group del`); @@ -310,7 +310,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(20_000); // group list - it(testName + 'group list', async () => { + it(`${testName}group list`, async () => { // check if no args set // no user defined try { @@ -334,7 +334,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(20_000); // group get - it(testName + 'group get', async () => { + it(`${testName}group get`, async () => { // check if no args set try { await execAsync(`"${process.execPath}" "${iobExecutable}" group`); @@ -365,7 +365,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(20_000); // group disable / enable - it(testName + 'group disable/enable', async () => { + it(`${testName}group disable/enable`, async () => { let res; // add second group res = await execAsync(`"${process.execPath}" "${iobExecutable}" group add group1`); @@ -413,7 +413,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(25_000); // group useradd - it(testName + 'group useradd', async () => { + it(`${testName}group useradd`, async () => { let res; // add non existing user @@ -446,7 +446,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(20_000); // group userdel - it(testName + 'group userdel', async () => { + it(`${testName}group userdel`, async () => { // delete non existing user try { await execAsync(`"${process.execPath}" "${iobExecutable}" group userdel group1 user5`); @@ -482,7 +482,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // stop ?? // status - it(testName + 'status', async () => { + it(`${testName}status`, async () => { // check status try { await execAsync(`"${process.execPath}" "${iobExecutable}" status`); @@ -508,7 +508,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // update // setup - it(testName + 'setup', async () => { + it(`${testName}setup`, async () => { let res; // check setup res = await execAsync(`"${process.execPath}" "${iobExecutable}" setup`); @@ -536,7 +536,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // message // update - it(testName + 'update', async () => { + it(`${testName}update`, async () => { // check update const res = await execAsync(`"${process.execPath}" "${iobExecutable}" update`); expect(res.stderr).to.be.not.ok; @@ -547,7 +547,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // clean // restore // backup - it(testName + 'backup', async () => { + it(`${testName}backup`, async () => { // create backup const dir = BackupRestore.getBackupDir(); @@ -599,7 +599,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // file f // id uuid - it(testName + 'uuid', async () => { + it(`${testName}uuid`, async () => { let res; // uuid res = await execAsync(`"${process.execPath}" "${iobExecutable}" uuid`); @@ -611,7 +611,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(20_000); // v version - it(testName + 'version', async () => { + it(`${testName}version`, async () => { let res; // version res = await execAsync(`"${process.execPath}" "${iobExecutable}" version`); @@ -623,7 +623,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(20_000); // repo - it(testName + 'repo', async () => { + it(`${testName}repo`, async () => { let res; // add non existing repo res = await execAsync(`"${process.execPath}" "${iobExecutable}" repo add local some/path`); @@ -686,7 +686,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(50_000); // license - it(testName + 'license', async () => { + it(`${testName}license`, async () => { // test license const licenseText = 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiaW9icm9rZXIudmlzIiwidHlwZSI6InRlc3QiLCJlbWFpbCI6InRlc3RAZ21haWwuY29tIiwiZXhwaXJlcyI6MjQ0NDM5ODA5NSwidmVyc2lvbiI6IjwyIiwiaWQiOiI5NTBkYWEwMC01MzcxLTExZTctYjQwNS14eHh4eHh4eHh4eHh4IiwiaWF0IjoxNDk3NzEzMjk1fQ.K9t9ZtvAsdeNFTJed4Sidq2jrr9UFOYpMt6VLmBdVzWueI9DnCXFS5PwBFTBTmF9WMhVk6LBw5ujIVl130B_5NrHl21PHkCLvJeW7jGsMgWDINuBK5F9k8LZABdsv7uDbqNDSOsVrFwEKOu2V3N5sMWYOVE4N_COIg9saaLvyN69oIP27PTgk1GHuyU4giFKGLPTp10L5p2hxLX0lEPjSdDggbl7dEqEe1-u5WwkyBizp03pMtHGYtjnACtP_KBuOly7QpmAnoPlfFoW79xgRjICbd41wT43IvhKAAo1zfnRAeWfQ7QoUViKsc6N1es87QC4KKw-eToLPXOO5UzWOg'; @@ -721,12 +721,12 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont mode: 'daemon', platform: 'Javascript/Node.js', materialize: true, - installedVersion: '1.0.0' + installedVersion: '1.0.0', }, native: {}, type: 'instance', instanceObjects: [], - objects: [] + objects: [], }); // license must be taken res = await execAsync(`"${process.execPath}" "${iobExecutable}" license ${licenseFile}`); diff --git a/packages/controller/test/lib/testFiles.ts b/packages/controller/test/lib/testFiles.ts index 10aa481c0e..65baff64bc 100644 --- a/packages/controller/test/lib/testFiles.ts +++ b/packages/controller/test/lib/testFiles.ts @@ -4,7 +4,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont const testName = `${context.name} ${context.adapterShortName} files: `; const testId = `testFilesObject.0`; - it(testName + 'writeFile with binary content and subscription', async () => { + it(`${testName}writeFile with binary content and subscription`, async () => { const objId = `vis.0`; const fileName = 'testFile.bin'; const dataBinary = Buffer.from('1234'); @@ -13,9 +13,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'meta', common: { name: 'Files and more', - type: 'meta.user' + type: 'meta.user', }, - native: {} + native: {}, }); await context.adapter.subscribeForeignFiles(objId, '*'); @@ -40,7 +40,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(file.toString('utf8')).to.be.equal(dataBinary.toString('utf8')); }); - it(testName + 'writeFile with textual content', async () => { + it(`${testName}writeFile with textual content`, async () => { const objId = `vis.0`; /** unknown extension but string content should lead to plain text */ const fileName = 'testFile.fn'; @@ -50,9 +50,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'meta', common: { name: 'Files and more', - type: 'meta.user' + type: 'meta.user', }, - native: {} + native: {}, }); // now we write a file state @@ -64,7 +64,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(file).to.be.equal(dataText); }); - it(testName + 'writeFile without extension should infer text from string content', async () => { + it(`${testName}writeFile without extension should infer text from string content`, async () => { const objId = `vis.0`; /** no extension but string content should lead to plain text */ const fileName = 'testFile'; @@ -74,9 +74,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'meta', common: { name: 'Files and more', - type: 'meta.user' + type: 'meta.user', }, - native: {} + native: {}, }); // now we write a file state @@ -88,7 +88,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(file).to.be.equal(dataText); }); - it(testName + 'writeFile with known extension should be inferred', async () => { + it(`${testName}writeFile with known extension should be inferred`, async () => { const objId = `vis.0`; /** no extension but string content should lead to plain text */ const fileName = 'testFile.json'; @@ -99,9 +99,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'meta', common: { name: 'Files and more', - type: 'meta.user' + type: 'meta.user', }, - native: {} + native: {}, }); // now we write a file state @@ -113,7 +113,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(file).to.be.equal(content); }); - it(testName + 'deleteFile', async () => { + it(`${testName}deleteFile`, async () => { const objId = `vis.0`; const fileName = 'testFile.bin'; @@ -138,7 +138,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont } }); - it(testName + 'should create and read file with callback', done => { + it(`${testName}should create and read file with callback`, done => { const objects = context.objects; objects.setObject( testId, @@ -146,9 +146,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'meta', common: { name: 'Meta', - type: 'meta.user' + type: 'meta.user', }, - native: {} + native: {}, }, err => { expect(err).to.be.not.ok; @@ -172,11 +172,11 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); }); - } + }, ); }); - it(testName + 'should create and read file async', async () => { + it(`${testName}should create and read file async`, async () => { const fileDir = 'myFile'; const fileName = 'abc2.txt'; const fullFileName = `${fileDir}/${fileName}`; @@ -185,7 +185,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont await objects.setObject(testId, { type: 'meta', common: { name: 'test', type: 'meta.user' }, - native: {} + native: {}, }); await objects.writeFile(testId, fullFileName, 'dataInFile'); @@ -205,7 +205,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont } }); - it(testName + 'should read directory', done => { + it(`${testName}should read directory`, done => { const objects = context.objects; objects.writeFile(testId, 'myFileA/abc1.txt', 'dataInFile', err => { expect(err).to.be.not.ok; @@ -223,7 +223,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should read file and prevent path traversing', done => { + it(`${testName}should read file and prevent path traversing`, done => { const objects = context.objects; objects.readFile(testId, '../../myFileA/abc1.txt', null, (err, data, _mimeType) => { expect(err).to.be.not.ok; @@ -259,11 +259,11 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(err).to.be.not.ok; expect(data).to.be.equal('dataInFile'); done(); - } + }, ); - } + }, ); - } + }, ); }); }); @@ -271,7 +271,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should unlink file', done => { + it(`${testName}should unlink file`, done => { const objects = context.objects; objects.unlink(testId, 'myFileA/abc1.txt', null, err => { expect(err).to.be.not.ok; @@ -282,7 +282,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should rename file', done => { + it(`${testName}should rename file`, done => { const objects = context.objects; objects.writeFile(testId, 'myFile1/abcRename.txt', Buffer.from('abcd'), err => { expect(err).to.be.not.ok; @@ -300,7 +300,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should touch file', done => { + it(`${testName}should touch file`, done => { const objects = context.objects; objects.readDir(testId, 'myFileA', null, (err, files) => { expect(err).to.be.not.ok; @@ -319,15 +319,15 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should create directory', done => { + it(`${testName}should create directory`, done => { const objects = context.objects; - objects.mkdir(testId, 'myFile' + Math.round(Math.random() * 100_000), null, err => { + objects.mkdir(testId, `myFile${Math.round(Math.random() * 100_000)}`, null, err => { expect(err).to.be.not.ok; done(); }); }); - it(testName + 'should enable file cache', done => { + it(`${testName}should enable file cache`, done => { const objects = context.objects; objects.enableFileCache(true, err => { expect(err).to.be.not.ok; diff --git a/packages/controller/test/lib/testHelperStates.ts b/packages/controller/test/lib/testHelperStates.ts index dd4506c9e7..a27289c993 100644 --- a/packages/controller/test/lib/testHelperStates.ts +++ b/packages/controller/test/lib/testHelperStates.ts @@ -5,7 +5,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // deleteChannel // deleteState - it(testName + 'delete state should validate the input', async () => { + it(`${testName}delete state should validate the input`, async () => { await context.adapter.deleteStateAsync('test'); await context.adapter.deleteStateAsync('dev', 'channel', 'state'); await context.adapter.deleteStateAsync('channel', 'state'); @@ -15,7 +15,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // @ts-expect-error invalid test case return expect(context.adapter.deleteStateAsync({})).to.be.eventually.rejectedWith( /needs to be of type "string" but type "object"/g, - 'Should have thrown on invalid input' + 'Should have thrown on invalid input', ); }); @@ -27,7 +27,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // createState // deleteDevice - it(testName + 'requireLog should activate corresponding state', async () => { + it(`${testName}requireLog should activate corresponding state`, async () => { // default should be false or non-existent let state = await context.states.getState(`system.adapter.${context.adapter.namespace}.logging`); expect(state?.val).to.be.not.ok; diff --git a/packages/controller/test/lib/testMessages.ts b/packages/controller/test/lib/testMessages.ts index 98ac551bed..471e30f908 100644 --- a/packages/controller/test/lib/testMessages.ts +++ b/packages/controller/test/lib/testMessages.ts @@ -1,9 +1,9 @@ import type { TestContext } from '../_Types.js'; export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, context: TestContext): void { - const testName = context.name + ' ' + context.adapterShortName + ' adapter: '; - const gid = 'system.adapter.' + context.adapterShortName + '.0'; - it(testName + 'check pushMessage', function (done) { + const testName = `${context.name} ${context.adapterShortName} adapter: `; + const gid = `system.adapter.${context.adapterShortName}.0`; + it(`${testName}check pushMessage`, function (done) { context.states.subscribeMessage(gid, function (err) { expect(err).to.be.not.ok; @@ -17,11 +17,11 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont context.states.pushMessage(gid, { message: { test: 1 }, command: 'test', - from: `system.adapter.${context.adapterShortName}` + from: `system.adapter.${context.adapterShortName}`, }); }); }); - it(testName + 'check pushMessage Buffer', function (done) { + it(`${testName}check pushMessage Buffer`, function (done) { context.states.subscribeMessage(gid, function (err) { expect(err).to.be.not.ok; @@ -36,18 +36,18 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont context.states.pushMessage(gid, { command: 'test', from: `system.adapter.${context.adapterShortName}`, - message: { test: Buffer.from('ABCDEFG') } + message: { test: Buffer.from('ABCDEFG') }, }); }); }); - it(testName + 'check unsubscribeMessage', function (done) { + it(`${testName}check unsubscribeMessage`, function (done) { context.states.unsubscribeMessage(gid, function (err) { expect(err).to.be.not.ok; done(); }); }); - it(testName + 'check pushLog', function (done) { + it(`${testName}check pushLog`, function (done) { context.states.subscribeLog(gid, function (err) { expect(err).to.be.not.ok; context.states.pushLog( @@ -57,12 +57,12 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(err).to.be.null; expect(id).to.be.equal(gid); done(); - } + }, ); }); }); - it(testName + 'check unsubscribeLog', function (done) { + it(`${testName}check unsubscribeLog`, function (done) { context.states.unsubscribeLog(gid, function (err) { expect(err).to.be.not.ok; done(); diff --git a/packages/controller/test/lib/testObjects.ts b/packages/controller/test/lib/testObjects.ts index b27b5ac3e9..b780e3613a 100644 --- a/packages/controller/test/lib/testObjects.ts +++ b/packages/controller/test/lib/testObjects.ts @@ -5,12 +5,12 @@ import type { TestContext } from '../_Types.js'; */ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, context: TestContext): void { - const testName = context.name + ' objects: '; + const testName = `${context.name} objects: `; const namespace = 'testObject.0'; - const testId = namespace + '.test2'; + const testId = `${namespace}.test2`; - it(testName + 'should create and read object', done => { + it(`${testName}should create and read object`, done => { const objects = context.objects; objects.setObject( testId, @@ -21,9 +21,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont name: 'test2', read: true, write: true, - role: 'state' + role: 'state', }, - native: {} + native: {}, }, (err, res) => { expect(err).to.be.not.ok; @@ -38,27 +38,27 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont console.log(JSON.stringify(obj)); done(); }); - } + }, ); }); - it(testName + 'should create object async', done => { + it(`${testName}should create object async`, done => { const objects = context.objects; objects - .setObjectAsync(testId + 'async', { + .setObjectAsync(`${testId}async`, { type: 'state', common: { type: 'string', name: 'test1a', read: true, write: true, - role: 'state' + role: 'state', }, - native: {} + native: {}, }) .then(res => { expect(res).to.be.ok; - expect(res!.id).to.be.equal(testId + 'async'); + expect(res!.id).to.be.equal(`${testId}async`); done(); }) .catch(err => { @@ -66,14 +66,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should read object async', done => { + it(`${testName}should read object async`, done => { const objects = context.objects; objects - .getObjectAsync(testId + 'async') + .getObjectAsync(`${testId}async`) .then(obj => { expect(obj).to.be.ok; expect(obj!.common.name).to.be.equal('test1a'); - expect(obj!._id).to.be.equal(testId + 'async'); + expect(obj!._id).to.be.equal(`${testId}async`); console.log(JSON.stringify(obj)); done(); }) @@ -82,7 +82,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }).timeout(3_000); - it(testName + 'should find object', done => { + it(`${testName}should find object`, done => { const objects = context.objects; objects.findObject(testId, null, (err, id, idOrName) => { expect(err).to.be.not.ok; @@ -110,7 +110,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should find object async', done => { + it(`${testName}should find object async`, done => { const objects = context.objects; objects .findObject(testId) @@ -137,7 +137,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should read objects by pattern', done => { + it(`${testName}should read objects by pattern`, done => { const objects = context.objects; objects.getObjectsByPattern(`${testId}*`, null, (err, objs) => { expect(err).to.be.not.ok; @@ -149,7 +149,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(typeof objs![0]).to.be.equal('object'); expect(objs![0]._id).to.be.equal(testId); - objects.getObjectsByPattern(testId + 'non', null, (err, objs) => { + objects.getObjectsByPattern(`${testId}non`, null, (err, objs) => { expect(err).to.be.not.ok; expect(objs?.length).to.be.equal(0); @@ -159,7 +159,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should read objects by pattern async', done => { + it(`${testName}should read objects by pattern async`, done => { const objects = context.objects; objects .getObjectsByPattern(`${testId}*`, null) @@ -185,9 +185,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should read keys', done => { + it(`${testName}should read keys`, done => { const objects = context.objects; - objects.getKeys(testId + '*', (err, keys) => { + objects.getKeys(`${testId}*`, (err, keys) => { expect(err).to.be.not.ok; expect(keys?.length).to.be.equal(2); @@ -196,7 +196,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(keys?.length).to.be.equal(1); expect(keys![0]).to.be.equal(testId); - objects.getKeys(testId + 'non', (err, keys) => { + objects.getKeys(`${testId}non`, (err, keys) => { expect(err).to.be.not.ok; expect(keys?.length).to.be.equal(0); @@ -206,10 +206,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should read keys async', done => { + it(`${testName}should read keys async`, done => { const objects = context.objects; objects - .getKeys(testId + '*') + .getKeys(`${testId}*`) .then(keys => { expect(keys?.length).to.be.equal(2); @@ -219,7 +219,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(keys?.length).to.be.equal(1); expect(keys![0]).to.be.equal(testId); - return objects.getKeys(testId + 'non'); + return objects.getKeys(`${testId}non`); }) .then(keys => { expect(keys?.length).to.be.equal(0); @@ -231,9 +231,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should read objects', done => { + it(`${testName}should read objects`, done => { const objects = context.objects; - objects.getKeys(testId + '*', (err, keys) => { + objects.getKeys(`${testId}*`, (err, keys) => { expect(err).to.be.not.ok; objects.getObjects(keys!, (err, objs) => { expect(err).to.be.not.ok; @@ -245,11 +245,11 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should read objects async', done => { + it(`${testName}should read objects async`, done => { const objects = context.objects; let gKeys: string[] | undefined; objects - .getKeys(testId + '*') + .getKeys(`${testId}*`) .then(keys => { gKeys = keys; return objects.getObjects(keys!); @@ -265,7 +265,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should extend object', done => { + it(`${testName}should extend object`, done => { const objects = context.objects; objects.extendObject(testId, { common: { def: 'default' } }, null, (err, res, id) => { expect(err).to.be.not.ok; @@ -276,13 +276,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont objects.getObject(testId, (err, obj) => { expect(err).to.be.not.ok; expect(obj!._id).to.be.equal(testId); - expect(obj!.common.def).to.be.equal('default'); + expect((obj!.common as ioBroker.StateCommon).def).to.be.equal('default'); expect(obj!.common.name).to.be.equal('test2'); - objects.extendObject(namespace + '.other', { common: { def: 'default' } }, null, (err, res, id) => { + objects.extendObject(`${namespace}.other`, { common: { def: 'default' } }, null, (err, res, id) => { expect(err).to.be.not.ok; - expect(id).to.be.equal(namespace + '.other'); - expect(res!.id).to.be.equal(namespace + '.other'); + expect(id).to.be.equal(`${namespace}.other`); + expect(res!.id).to.be.equal(`${namespace}.other`); expect(res!.value.common.def).to.be.equal('default'); done(); @@ -291,17 +291,17 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should extend object async', done => { + it(`${testName}should extend object async`, done => { const objects = context.objects; objects .extendObject(testId, { common: { def: 'default' } }) .then(res => { expect(res!.id).to.be.equal(testId); expect(res!.value.common.def).to.be.equal('default'); - return objects.extendObject(namespace + '.otherAsync', { common: { def: 'default' } }); + return objects.extendObject(`${namespace}.otherAsync`, { common: { def: 'default' } }); }) .then(res => { - expect(res!.id).to.be.equal(namespace + '.otherAsync'); + expect(res!.id).to.be.equal(`${namespace}.otherAsync`); expect(res!.value.common.def).to.be.equal('default'); done(); }) @@ -310,7 +310,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should getObjectList', done => { + it(`${testName}should getObjectList`, done => { const objects = context.objects; objects.getObjectList({ startkey: namespace, endkey: testId }, (err, res) => { console.log(res!.rows.map(e => e.id)); @@ -328,20 +328,20 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should getObjectList async', done => { + it(`${testName}should getObjectList async`, done => { const objects = context.objects; objects .getObjectList({ startkey: namespace, endkey: testId }) .then(res => { - expect(res!.rows.length).to.be.equal(3); - const obj = res!.rows.find(val => val.value._id === testId); + expect(res.rows.length).to.be.equal(3); + const obj = res.rows.find(val => val.value._id === testId); expect(obj!.id).to.be.equal(testId); expect(obj!.value._id).to.be.equal(testId); return objects.getObjectList({ startkey: '', endkey: ' ' }); }) .then(res => { console.log(JSON.stringify(res)); - expect(res!.rows.length).to.be.equal(0); + expect(res.rows.length).to.be.equal(0); done(); }) .catch(err => { @@ -350,7 +350,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should getObjectView without sets', async () => { + it(`${testName}should getObjectView without sets`, async () => { // @ts-expect-error turn off useSets and reinitialize scripts, thus we will have old scripts and do not use SADD on setting objects context.objects.useSets = false; await context.objects.loadLuaScripts(); @@ -360,13 +360,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont language: 'javascript', views: { test: { - map: 'function(doc) {\n if (doc._id.match(/^testAdapter/) && doc.meta.type === "test") {\n emit(doc._id, doc);\n }\n}' - } + map: 'function(doc) {\n if (doc._id.match(/^testAdapter/) && doc.meta.type === "test") {\n emit(doc._id, doc);\n }\n}', + }, }, common: { - name: 'Test Design' + name: 'Test Design', }, - native: {} + native: {}, }); // now let's create an object matching the view @@ -374,31 +374,31 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'meta', common: { type: 'meta.user', - name: 'Test Meta Object' + name: 'Test Meta Object', }, meta: { adapter: 'testAdapter', - type: 'test' + type: 'test', }, - native: {} + native: {}, } as ioBroker.SettableMetaObject); const doc = await context.objects.getObjectViewAsync('testAdapter', 'test', { startkey: 'testAdapter', - endkey: 'testAdapter\u9999' + endkey: 'testAdapter\u9999', }); // now check that our object view contains our object - expect(doc!.rows).to.be.an('array'); - expect(doc!.rows.length).to.be.equal(1); - expect(doc!.rows[0].value._id).to.be.equal('testAdapter.test'); + expect(doc.rows).to.be.an('array'); + expect(doc.rows.length).to.be.equal(1); + expect(doc.rows[0].value._id).to.be.equal('testAdapter.test'); // @ts-expect-error put it back on context.objects.useSets = true; await context.objects.loadLuaScripts(); }); - it(testName + 'Should check object existence', async () => { + it(`${testName}Should check object existence`, async () => { // object should not exist let exists = await context.objects.objectExists('test.0.objectExistenceCheck'); expect(exists).to.be.false; @@ -406,7 +406,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // create object await context.objects.setObjectAsync('test.0.objectExistenceCheck', { type: 'meta', - native: {} + native: {}, } as ioBroker.SettableMetaObject); // object should now exist @@ -417,7 +417,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // todo chmod // tofo chown - it(testName + 'should delete object', done => { + it(`${testName}should delete object`, done => { const objects = context.objects; objects.delObject(testId, err => { expect(err).to.be.not.ok; @@ -425,10 +425,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should delete object async', done => { + it(`${testName}should delete object async`, done => { const objects = context.objects; objects - .delObjectAsync(testId + 'async') + .delObjectAsync(`${testId}async`) .then(() => { done(); }) @@ -437,18 +437,18 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should not delete non existing object', done => { + it(`${testName}should not delete non existing object`, done => { const objects = context.objects; - objects.delObject(testId + 'not', err => { + objects.delObject(`${testId}not`, err => { expect(err).to.be.not.ok; done(); }); }); - it(testName + 'should not delete non existing object async', done => { + it(`${testName}should not delete non existing object async`, done => { const objects = context.objects; objects - .delObjectAsync(testId + 'async1') + .delObjectAsync(`${testId}async1`) .then(() => { done(); }) @@ -457,7 +457,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'should close DB', () => { + it(`${testName}should close DB`, () => { const objects = context.objects; // we're running as a server, so nothing should happen return objects.destroy(); diff --git a/packages/controller/test/lib/testObjectsACL.ts b/packages/controller/test/lib/testObjectsACL.ts index dd7adfbbd5..96e176eb8c 100644 --- a/packages/controller/test/lib/testObjectsACL.ts +++ b/packages/controller/test/lib/testObjectsACL.ts @@ -1,11 +1,11 @@ import type { TestContext } from '../_Types.js'; export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, context: TestContext): void { - const textName = context.name + ' objects: '; + const textName = `${context.name} objects: `; const secretId = 'system.adapter.userMayNotReadIt'; - it(textName + 'should create users and groups', () => { + it(`${textName}should create users and groups`, () => { const objects = context.objects; return objects @@ -22,37 +22,37 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont read: true, write: false, delete: false, - create: false + create: false, }, state: { list: true, read: true, write: true, create: true, - delete: false + delete: false, }, users: { list: true, read: true, write: false, create: false, - delete: false + delete: false, }, other: { execute: false, http: true, - sendto: false + sendto: false, }, file: { list: true, read: true, write: false, create: false, - delete: false - } - } + delete: false, + }, + }, }, - native: {} + native: {}, }) .then(() => objects.setObject('system.user.user', { @@ -63,7 +63,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont color: '#44d8f1', enabled: true, password: - 'pbkdf2$10000$47785e10d8e468765c06b371f45981d625274dec3f8f6261b12d67320d07e7844e1e30df575f55ed3686804fbbae442ee9503c9c93fdcff4c46b8243200e1839b77fa18f769c9f71b13f12c4002e1cee03e6fa54878a2d6a9629589bd9169459989fc63abddce94690e5744e69658be43e1a9c7b38f1535eb9946a05394ee16f3724b75e0829ece04a05ef8848509d27b7944a9e064bba9341350d39d7a7e5bc4fe1980ae6da737c9e5e79e5a5a7e969825e94302c047a6054f3524b71c52acd33f2f83b1ed026c05af514da0a2e57c2267aeb10021f9503b5db02d8cc946421604f73548ceecc2a10b44be6a5b859e43e706cc86ee36b21984fc33abf9b2d66$0c4a5d538c84116846aac1c20fdc3fdd' + 'pbkdf2$10000$47785e10d8e468765c06b371f45981d625274dec3f8f6261b12d67320d07e7844e1e30df575f55ed3686804fbbae442ee9503c9c93fdcff4c46b8243200e1839b77fa18f769c9f71b13f12c4002e1cee03e6fa54878a2d6a9629589bd9169459989fc63abddce94690e5744e69658be43e1a9c7b38f1535eb9946a05394ee16f3724b75e0829ece04a05ef8848509d27b7944a9e064bba9341350d39d7a7e5bc4fe1980ae6da737c9e5e79e5a5a7e969825e94302c047a6054f3524b71c52acd33f2f83b1ed026c05af514da0a2e57c2267aeb10021f9503b5db02d8cc946421604f73548ceecc2a10b44be6a5b859e43e706cc86ee36b21984fc33abf9b2d66$0c4a5d538c84116846aac1c20fdc3fdd', }, type: 'user', native: {}, @@ -73,9 +73,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont acl: { object: 1636, // 0664 owner: 'system.user.admin', - ownerGroup: 'system.group.administrator' - } - }) + ownerGroup: 'system.group.administrator', + }, + }), ) .then(() => objects.setObject(secretId, { @@ -88,22 +88,22 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont mode: 'daemon', platform: 'Javascript/Node.js', materialize: false, - materializeTab: false + materializeTab: false, }, type: 'adapter', native: {}, acl: { object: 1536, // 0600 owner: 'system.user.admin', - ownerGroup: 'system.group.administrator' + ownerGroup: 'system.group.administrator', }, objects: [], - instanceObjects: [] - }) + instanceObjects: [], + }), ); }).timeout(2_000); - it(textName + 'invalid user name must be checked #1', async () => { + it(`${textName}invalid user name must be checked #1`, async () => { const objects = context.objects; try { await objects.getObject(secretId, { user: 'admin' }); @@ -114,7 +114,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont } }).timeout(2_000); - it(textName + 'invalid user name must be checked #2', () => { + it(`${textName}invalid user name must be checked #2`, () => { const objects = context.objects; return objects .getObject(secretId, { user: 'system.user.admin1' }) @@ -127,7 +127,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }).timeout(2_000); - it(textName + 'admin may read secret object', () => { + it(`${textName}admin may read secret object`, () => { const objects = context.objects; return objects .getObject(secretId, { user: 'system.user.admin' }) @@ -140,7 +140,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }).timeout(2_000); - it(textName + 'user may not read secret object', () => { + it(`${textName}user may not read secret object`, () => { const objects = context.objects; return objects .getObject(secretId, { user: 'system.user.user' }) @@ -152,7 +152,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }).timeout(2_000); - it(textName + 'default acl from system.config should be used', async () => { + it(`${textName}default acl from system.config should be used`, async () => { const objects = context.objects; await objects.setObjectAsync('test.defAcl', { @@ -162,9 +162,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont read: true, write: true, role: 'state', - name: 'test ack' + name: 'test ack', }, - native: {} + native: {}, }); const obj = await objects.getObjectAsync('test.defAcl'); @@ -172,7 +172,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(obj!.acl!.ownerGroup).to.be.equal('system.group.senatorGroup'); }).timeout(2_000); - it(textName + 'default acl from system.config can be overwritten via acl', async () => { + it(`${textName}default acl from system.config can be overwritten via acl`, async () => { const objects = context.objects; await objects.setObjectAsync('test.overwriteAclDef', { type: 'state', @@ -181,22 +181,22 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont name: 'Test', role: 'state', read: true, - write: true + write: true, }, native: {}, acl: { object: 1636, state: 1636, owner: 'system.user.user', - ownerGroup: 'system.group.administrator' - } + ownerGroup: 'system.group.administrator', + }, }); const obj = await objects.getObjectAsync('test.overwriteAclDef'); expect(obj!.acl!.owner).to.be.equal('system.user.user'); expect(obj!.acl!.ownerGroup).to.be.equal('system.group.administrator'); }).timeout(2_000); - it(textName + 'default acl from system.config is used when user is admin', async () => { + it(`${textName}default acl from system.config is used when user is admin`, async () => { const objects = context.objects; await objects.setObjectAsync( 'test.aclAdmin', @@ -207,54 +207,51 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont role: 'state', read: true, write: true, - name: 'test' + name: 'test', }, - native: {} + native: {}, }, - { user: 'system.user.admin' } + { user: 'system.user.admin' }, ); const obj = await objects.getObjectAsync('test.aclAdmin'); expect(obj!.acl!.owner).to.be.equal('system.user.governor'); expect(obj!.acl!.ownerGroup).to.be.equal('system.group.senatorGroup'); }).timeout(2_000); - it( - textName + 'default acl from system.config is used when user is admin and can be modified on the fly', - async () => { - const objects = context.objects; + it(`${textName}default acl from system.config is used when user is admin and can be modified on the fly`, async () => { + const objects = context.objects; - // get the system.config to save the acl - const config = await objects.getObjectAsync('system.config'); + // get the system.config to save the acl + const config = await objects.getObject('system.config'); - config!.common.defaultNewAcl = { - object: 1636, - state: 1636, - file: 1636, - owner: 'system.user.notGovernor', - ownerGroup: 'system.group.notSenatorGroup' - }; + config!.common.defaultNewAcl = { + object: 1636, + state: 1636, + file: 1636, + owner: 'system.user.notGovernor', + ownerGroup: 'system.group.notSenatorGroup', + }; - // we change the acl during runtime - it has to be applied on next setObject - await objects.setObjectAsync('system.config', config!); + // we change the acl during runtime - it has to be applied on next setObject + await objects.setObject('system.config', config!); - await objects.setObjectAsync( - 'test.aclAdminChange', - { - type: 'state', - common: { - type: 'string', - role: 'state', - name: 'test', - read: true, - write: true - }, - native: {} + await objects.setObject( + 'test.aclAdminChange', + { + type: 'state', + common: { + type: 'string', + role: 'state', + name: 'test', + read: true, + write: true, }, - { user: 'system.user.admin' } - ); - const obj = await objects.getObjectAsync('test.aclAdminChange'); - expect(obj!.acl!.owner).to.be.equal('system.user.notGovernor'); - expect(obj!.acl!.ownerGroup).to.be.equal('system.group.notSenatorGroup'); - } - ).timeout(2_000); + native: {}, + }, + { user: 'system.user.admin' }, + ); + const obj = await objects.getObjectAsync('test.aclAdminChange'); + expect(obj!.acl!.owner).to.be.equal('system.user.notGovernor'); + expect(obj!.acl!.ownerGroup).to.be.equal('system.group.notSenatorGroup'); + }).timeout(2_000); } diff --git a/packages/controller/test/lib/testObjectsFunctions.ts b/packages/controller/test/lib/testObjectsFunctions.ts index 04e0be25af..c8590dbafb 100644 --- a/packages/controller/test/lib/testObjectsFunctions.ts +++ b/packages/controller/test/lib/testObjectsFunctions.ts @@ -12,7 +12,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont const gid = 'myTestObject'; // setObject positive - it(testName + 'Check if objects will be created', function (done) { + it(`${testName}Check if objects will be created`, function (done) { this.timeout(3_000); context.adapter.setObject( gid, @@ -23,13 +23,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', read: true, - write: true + write: true, }, native: { attr1: '1', attr2: '2', - attr3: '3' - } + attr3: '3', + }, }, function (err) { expect(err).to.be.null; @@ -43,12 +43,12 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont //expect(obj.acl).to.be.ok; done(); }); - } + }, ); }); // setObject negative - it(testName + 'Check if objects will not be created without mandatory attribute type', function (done) { + it(`${testName}Check if objects will not be created without mandatory attribute type`, function (done) { this.timeout(3_000); const id = 'myTestObjectNoType'; context.adapter.setObject( @@ -56,26 +56,26 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont { common: { name: 'test1', - type: 'number' + type: 'number', }, native: {}, // @ts-expect-error should error as type is missing - type_: 'state' + type_: 'state', }, (err: any) => { expect(err).to.be.ok; - context.objects.getObject(context.adapterShortName + '.0.' + id, function (err, obj) { + context.objects.getObject(`${context.adapterShortName}.0.${id}`, function (err, obj) { expect(err).to.be.not.ok; // there is no message, that object does not exist. Errors will be given back only if no access rights expect(obj).to.be.not.ok; done(); }); - } + }, ); }); // getAdapterObjects - it(testName + 'Read all objects of adapter', function (done) { + it(`${testName}Read all objects of adapter`, function (done) { context.adapter.getAdapterObjects(objects => { expect(objects).to.be.ok; expect(objects[`${context.adapterShortName}.0.${gid}`]).to.be.ok; @@ -85,15 +85,15 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); //extendObject - it(testName + 'Check if objects will be extended', function (done) { + it(`${testName}Check if objects will be extended`, function (done) { context.adapter.extendObject( gid, { native: { attr1: '11', // modify attr2: null, // delete - attr4: '4' // add - } + attr4: '4', // add + }, }, function (err, obj) { expect(err).to.be.not.ok; @@ -108,17 +108,17 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(obj!.native.attr4).to.be.equal('4'); done(); }); - } + }, ); }); // setForeignObject - it(testName + 'Check if foreign objects will be created', function (done) { + it(`${testName}Check if foreign objects will be created`, function (done) { this.timeout(3_000); // create testf.0.myTestObject context.adapter.setForeignObject( - context.adapterShortName + 'f.0.' + gid, + `${context.adapterShortName}f.0.${gid}`, { type: 'state', common: { @@ -126,7 +126,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', read: true, - write: true + write: true, }, native: { attr1: '1', @@ -134,8 +134,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont attr3: '3', repositories: ['R1'], certificates: ['C1'], - devices: ['D1'] - } + devices: ['D1'], + }, }, function (err) { expect(err).to.be.null; @@ -144,18 +144,18 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(err).to.be.not.ok; expect(obj).to.be.ok; expect(obj!.native).to.be.ok; - expect(obj!._id).equal(context.adapterShortName + 'f.0.' + gid); + expect(obj!._id).equal(`${context.adapterShortName}f.0.${gid}`); expect(obj!.common.name).equal('test1'); expect(obj!.type).equal('state'); //expect(obj.acl).to.be.ok; done(); }); - } + }, ); }); // extendForeignObject - it(testName + 'Check if foreign objects will be extended', function (done) { + it(`${testName}Check if foreign objects will be extended`, function (done) { context.adapter.extendForeignObject( `${context.adapterShortName}f.0.${gid}`, { @@ -166,8 +166,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // special cases for native (obj.native.repositories || obj.native.certificates || obj.native.devices) // and commons (obj.common.members) repositories: ['R2'], - devices: ['D2'] - } + devices: ['D2'], + }, }, function (err, obj) { expect(err).to.be.not.ok; @@ -191,12 +191,12 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(obj!.native.devices[0]).to.be.equal('D2'); done(); }); - } + }, ); }); // getObject - it(testName + 'Check get object', function (done) { + it(`${testName}Check get object`, function (done) { context.adapter.getObject(`${context.adapterShortName}.0.${gid}`, function (err, obj) { expect(err).to.be.null; @@ -214,18 +214,18 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // getForeignObjects - it(testName + 'Check get foreign objects (pattern)', done => { - context.adapter.getForeignObjects(context.adapterShortName + 'f.0.*', (err, objs) => { + it(`${testName}Check get foreign objects (pattern)`, done => { + context.adapter.getForeignObjects(`${context.adapterShortName}f.0.*`, (err, objs) => { expect(err).to.be.null; expect(objs).to.be.ok; - expect(objs![context.adapterShortName + 'f.0.' + gid].type).to.be.equal('state'); - expect(objs![context.adapterShortName + 'f.0.' + gid].native.attr1).to.be.equal('11'); + expect(objs![`${context.adapterShortName}f.0.${gid}`].type).to.be.equal('state'); + expect(objs![`${context.adapterShortName}f.0.${gid}`].native.attr1).to.be.equal('11'); done(); }); }); - it(testName + 'Check get foreign objects (array)', async () => { + it(`${testName}Check get foreign objects (array)`, async () => { const id = `${context.adapterShortName}f.0.${gid}`; const id2 = `${context.adapterShortName}.0.${gid}`; @@ -237,7 +237,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(objs[id2].type).to.be.equal('state'); }); - it(testName + 'Check get foreign objects - default enum functionality', async () => { + it(`${testName}Check get foreign objects - default enum functionality`, async () => { const id = `${context.adapterShortName}.0.${gid}`; // add the state to the enum, so we can check enum functionality @@ -257,14 +257,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // findForeignObject - it(testName + 'Check find foreign object', function (done) { + it(`${testName}Check find foreign object`, function (done) { context.adapter.findForeignObject('test1', null, function (err, id) { expect(err).to.be.null; - expect(id).to.be.equal(context.adapterShortName + '.0.' + gid); + expect(id).to.be.equal(`${context.adapterShortName}.0.${gid}`); context.adapter.findForeignObject('test1', 'number', function (err, id) { expect(err).to.be.null; - expect(id).to.be.equal(context.adapterShortName + '.0.' + gid); + expect(id).to.be.equal(`${context.adapterShortName}.0.${gid}`); context.adapter.findForeignObject('test1', 'channel', function (err, id) { expect(err).to.be.null; @@ -277,8 +277,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // getForeignObject - it(testName + 'Check get foreign object', function (done) { - context.adapter.getForeignObject(context.adapterShortName + 'f.0.' + gid, function (err, obj) { + it(`${testName}Check get foreign object`, function (done) { + context.adapter.getForeignObject(`${context.adapterShortName}f.0.${gid}`, function (err, obj) { expect(err).to.be.null; expect(obj).to.be.ok; @@ -294,7 +294,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // protection check for getForeignObject - it(testName + 'Check if foreign system adapters protectedNative is not accessible', function (done) { + it(`${testName}Check if foreign system adapters protectedNative is not accessible`, function (done) { this.timeout(3_000); // create a system.adapter object of another adapter context.adapter.setForeignObject( @@ -309,16 +309,16 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont mode: 'daemon', materialize: true, platform: 'Javascript/Node.js', - installedVersion: '1.0.0' + installedVersion: '1.0.0', }, native: { model: 'S P85D', username: 'tesla', - password: 'winning' + password: 'winning', }, protectedNative: ['username', 'password'], objects: [], - instanceObjects: [] + instanceObjects: [], }, function (err) { expect(err).to.be.null; @@ -334,16 +334,16 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(obj!._id).equal('system.adapter.tesla.0'); done(); }); - } + }, ); }); // own protectedNative should be available - it(testName + 'Check if own system adapters protectedNative is available via getForeignObject', function (done) { + it(`${testName}Check if own system adapters protectedNative is available via getForeignObject`, function (done) { this.timeout(3_000); // create a system.adapter object of own adapter context.adapter.setForeignObject( - 'system.adapter.' + context.adapterShortName + '.0', + `system.adapter.${context.adapterShortName}.0`, { type: 'instance', common: { @@ -354,40 +354,37 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont mode: 'daemon', platform: 'Javascript/Node.js', materialize: true, - installedVersion: '1.0.0' + installedVersion: '1.0.0', }, native: { model: 'S P85D', username: 'tesla', - password: 'winning' + password: 'winning', }, protectedNative: ['username', 'password'], objects: [], - instanceObjects: [] + instanceObjects: [], }, function (err) { expect(err).to.be.null; - context.adapter.getForeignObject( - 'system.adapter.' + context.adapterShortName + '.0', - function (err, obj) { - expect(err).to.be.not.ok; - expect(obj).to.be.ok; - expect(obj!.native).to.be.ok; - expect(obj!.common.name).equal('tesla'); - expect(obj!.native.model).equal('S P85D'); - expect(obj!.native.password).equal('winning'); - expect(obj!.native.username).equal('tesla'); - expect(obj!._id).equal('system.adapter.' + context.adapterShortName + '.0'); - done(); - } - ); - } + context.adapter.getForeignObject(`system.adapter.${context.adapterShortName}.0`, function (err, obj) { + expect(err).to.be.not.ok; + expect(obj).to.be.ok; + expect(obj!.native).to.be.ok; + expect(obj!.common.name).equal('tesla'); + expect(obj!.native.model).equal('S P85D'); + expect(obj!.native.password).equal('winning'); + expect(obj!.native.username).equal('tesla'); + expect(obj!._id).equal(`system.adapter.${context.adapterShortName}.0`); + done(); + }); + }, ); }); // setObjectNotExists - it(testName + 'Try to set existing object', function (done) { + it(`${testName}Try to set existing object`, function (done) { context.adapter.setObjectNotExists( gid, { @@ -397,11 +394,11 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont read: true, write: true, type: 'number', - role: 'state' + role: 'state', }, native: { - pparam: 10 - } + pparam: 10, + }, }, function (err) { expect(err).to.be.null; @@ -413,102 +410,102 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(obj1!.native.pparam).to.be.not.ok; context.adapter.setObjectNotExists( - gid + 'A', + `${gid}A`, { common: { name: 'must be set', read: true, write: true, type: 'number', - role: 'state' + role: 'state', }, native: { - ppparam: 10 + ppparam: 10, }, - type: 'state' + type: 'state', }, function (err) { expect(err).to.be.null; - context.adapter.getObject(gid + 'A', function (err, obj1) { + context.adapter.getObject(`${gid}A`, function (err, obj1) { expect(err).to.be.null; expect(obj1!.native).to.be.ok; expect(obj1!.native.ppparam).to.be.equal(10); done(); }); - } + }, ); }); - } + }, ); }); // setForeignObjectNotExists - it(testName + 'Try to set existing foreign object', function (done) { + it(`${testName}Try to set existing foreign object`, function (done) { context.adapter.setForeignObjectNotExists( - context.adapterShortName + '.0.' + gid, + `${context.adapterShortName}.0.${gid}`, { common: { name: 'not must be set', read: true, write: true, type: 'number', - role: 'state' + role: 'state', }, native: { - ppparam: 11 + ppparam: 11, }, - type: 'state' + type: 'state', }, function (err) { expect(err).to.be.null; - context.adapter.getForeignObject(context.adapterShortName + '.0.' + gid, function (err, obj1) { + context.adapter.getForeignObject(`${context.adapterShortName}.0.${gid}`, function (err, obj1) { expect(err).to.be.null; expect(obj1!.native).to.be.ok; expect(obj1!.native.ppparam).to.be.not.ok; context.adapter.setForeignObjectNotExists( - context.adapterShortName + 'ff.0.' + gid, + `${context.adapterShortName}ff.0.${gid}`, { common: { name: 'must be set', read: true, write: true, type: 'number', - role: 'state' + role: 'state', }, native: { - ppparam: 9 + ppparam: 9, }, - type: 'state' + type: 'state', }, function (err) { expect(err).to.be.null; context.adapter.getForeignObject( - context.adapterShortName + 'ff.0.' + gid, + `${context.adapterShortName}ff.0.${gid}`, function (err, obj1) { expect(err).to.be.null; expect(obj1!.native).to.be.ok; expect(obj1!.native.ppparam).to.be.equal(9); done(); - } + }, ); - } + }, ); }); - } + }, ); }); // setForeignObject merge of custom settings - it(testName + 'Try to merge custom settings', done => { + it(`${testName}Try to merge custom settings`, done => { context.adapter.setForeignObject( - context.adapterShortName + '.0.' + gid, + `${context.adapterShortName}.0.${gid}`, { type: 'state', common: { @@ -518,17 +515,17 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont write: true, role: 'state', custom: { - history: { enabled: true } - } + history: { enabled: true }, + }, }, native: { - ppparam: 11 - } + ppparam: 11, + }, }, err => { expect(err).to.be.null; context.adapter.setForeignObject( - context.adapterShortName + '.0.' + gid, + `${context.adapterShortName}.0.${gid}`, { common: { type: 'string', @@ -537,32 +534,32 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont write: true, role: 'state', custom: { - material: { enabled: true } - } + material: { enabled: true }, + }, }, native: { - ppparam: 12 + ppparam: 12, }, - type: 'state' + type: 'state', }, err => { expect(err).to.be.null; - context.adapter.getForeignObject(context.adapterShortName + '.0.' + gid, (err, obj1) => { + context.adapter.getForeignObject(`${context.adapterShortName}.0.${gid}`, (err, obj1) => { expect(err).to.be.null; expect(obj1!.common.custom!.material).to.be.ok; expect(obj1!.common.custom!.history).to.be.ok; done(); }); - } + }, ); - } + }, ); }); // setForeignObject merge of custom settings - it(testName + 'Try to delete custom settings', done => { - const id = context.adapterShortName + '.0.' + gid; + it(`${testName}Try to delete custom settings`, done => { + const id = `${context.adapterShortName}.0.${gid}`; context.adapter.setForeignObject( id, { @@ -573,13 +570,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont write: true, role: 'state', custom: { - history: { enabled: true } - } + history: { enabled: true }, + }, }, native: { - ppparam: 11 + ppparam: 11, }, - type: 'state' + type: 'state', }, err => { expect(err).to.be.null; @@ -592,16 +589,16 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont desc: 'Hello', custom: { material: null, - history: null + history: null, }, read: true, write: true, - role: 'state' + role: 'state', }, native: { - bluefox: 14 + bluefox: 14, }, - type: 'state' + type: 'state', }, err => { expect(err).to.be.null; @@ -611,15 +608,15 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(obj1!.common.custom).to.be.not.ok; done(); }); - } + }, ); - } + }, ); }); // setForeignObject merge of custom settings - it(testName + 'Try to delete custom settings in new object', done => { - const id = context.adapterShortName + '.0.' + gid + '6'; + it(`${testName}Try to delete custom settings in new object`, done => { + const id = `${context.adapterShortName}.0.${gid}6`; context.adapter.setForeignObject( id, @@ -631,13 +628,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont write: true, role: 'state', custom: { - history: { enabled: true } - } + history: { enabled: true }, + }, }, native: { - ppparam: 11 + ppparam: 11, }, - type: 'state' + type: 'state', }, err => { expect(err).to.be.null; @@ -650,16 +647,16 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont desc: 'Hello', custom: { material: null, - history: null + history: null, }, read: true, write: true, - role: 'state' + role: 'state', }, native: { - bluefox: 14 + bluefox: 14, }, - type: 'state' + type: 'state', }, err => { expect(err).to.be.null; @@ -669,14 +666,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(obj1!.common.custom).to.be.not.ok; done(); }); - } + }, ); - } + }, ); }); // getObjectView - it(testName + 'Try to get object view', done => { + it(`${testName}Try to get object view`, done => { // create the view context.adapter .setForeignObjectAsync('_design/hm-rpc', { @@ -684,13 +681,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'design', views: { paramsetDescription: { - map: 'function(doc) {\n if (doc._id.match(/^hm-rpc\\.meta/) && doc.native.type === "paramsetDescription") {\n emit(doc._id, doc);\n }\n}' - } + map: 'function(doc) {\n if (doc._id.match(/^hm-rpc\\.meta/) && doc.native.type === "paramsetDescription") {\n emit(doc._id, doc);\n }\n}', + }, }, common: { - name: 'HM-RPC Design' + name: 'HM-RPC Design', }, - native: {} + native: {}, }) .then(() => { // now let's create an object matching the view @@ -699,12 +696,12 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'meta', common: { type: 'meta.user', - name: 'meta hm-rpc' + name: 'meta hm-rpc', }, native: { adapter: 'hm-rpc', - type: 'paramsetDescription' - } + type: 'paramsetDescription', + }, }) .then(() => { context.adapter.getObjectView( @@ -712,7 +709,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont 'paramsetDescription', { startkey: 'hm-rpc.meta.VALUES', - endkey: 'hm-rpc.meta.VALUES.\u9999' + endkey: 'hm-rpc.meta.VALUES.\u9999', }, (err, doc) => { // now check that our object view contains our object @@ -720,30 +717,30 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(doc!.rows).to.be.an('array'); expect(doc!.rows.length).to.be.equal(1); expect(doc!.rows[0].value._id).to.be.equal( - 'hm-rpc.meta.VALUES.HM-CC-RT-DN.CLIMATECONTROL_RECEIVER.19' + 'hm-rpc.meta.VALUES.HM-CC-RT-DN.CLIMATECONTROL_RECEIVER.19', ); done(); - } + }, ); }); }); }); // getObjectViewAsync - it(testName + 'Try to get object view in async setup', async () => { + it(`${testName}Try to get object view in async setup`, async () => { // create the view await context.adapter.setForeignObjectAsync('_design/hm-rpc', { language: 'javascript', type: 'design', views: { paramsetDescription: { - map: 'function(doc) {\n if (doc._id.match(/^hm-rpc\\.meta/) && doc.native.type === "paramsetDescription") {\n emit(doc._id, doc);\n }\n}' - } + map: 'function(doc) {\n if (doc._id.match(/^hm-rpc\\.meta/) && doc.native.type === "paramsetDescription") {\n emit(doc._id, doc);\n }\n}', + }, }, common: { - name: 'Test' + name: 'Test', }, - native: {} + native: {}, }); // now lets create an object matching the view @@ -751,17 +748,17 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'meta', common: { name: 'test', - type: 'meta.user' + type: 'meta.user', }, native: { adapter: 'hm-rpc', - type: 'paramsetDescription' - } + type: 'paramsetDescription', + }, }); const doc = await context.adapter.getObjectViewAsync('hm-rpc', 'paramsetDescription', { startkey: 'hm-rpc.meta.VALUES', - endkey: 'hm-rpc.meta.VALUES.\u9999' + endkey: 'hm-rpc.meta.VALUES.\u9999', }); // now check that our object view contains our object @@ -770,7 +767,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(doc.rows[0].value._id).to.be.equal('hm-rpc.meta.VALUES.HM-CC-RT-DN.CLIMATECONTROL_RECEIVER.19'); }); - it(testName + 'Try to get object view with custom', async function () { + it(`${testName}Try to get object view with custom`, async function () { this.timeout(3_000); const customObj = { @@ -782,8 +779,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont changesRelogInterval: 0, changesMinDelta: 0, maxLength: 10, - retention: 31536000 - } + retention: 31536000, + }, }; // lets create an object matching the view @@ -795,14 +792,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'boolean', read: false, write: true, - custom: customObj + custom: customObj, }, - native: {} + native: {}, }); const doc = await context.adapter.getObjectViewAsync('system', 'custom', { startkey: `${context.adapterShortName}.1.device.channel.`, - endkey: `${context.adapterShortName}.1.device.channel.\u9999` + endkey: `${context.adapterShortName}.1.device.channel.\u9999`, }); // now check that our object view contains our object @@ -813,32 +810,32 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // getObjectList - it(testName + 'Try to get object list', done => { + it(`${testName}Try to get object list`, done => { // let's create an object matching the list context.adapter .setForeignObjectAsync('hm-rpc.meta.VALUES.HM-CC-RT-DN.CLIMATECONTROL_RECEIVER.19', { type: 'meta', common: { type: 'meta.user', - name: 'test' + name: 'test', }, native: { adapter: 'hm-rpc', - type: 'paramsetDescription' - } + type: 'paramsetDescription', + }, }) .then(() => { // now lets get our object context.adapter.getObjectList( { startkey: 'hm-rpc.meta.VALUES', - endkey: 'hm-rpc.meta.VALUES.\u9999' + endkey: 'hm-rpc.meta.VALUES.\u9999', }, (err, res) => { expect(err).to.be.null; expect(res!.rows.length).to.be.equal(1); expect(res!.rows[0].id).to.be.equal( - 'hm-rpc.meta.VALUES.HM-CC-RT-DN.CLIMATECONTROL_RECEIVER.19' + 'hm-rpc.meta.VALUES.HM-CC-RT-DN.CLIMATECONTROL_RECEIVER.19', ); // and try a non existing pattern @@ -847,32 +844,32 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(res!.rows.length).to.be.equal(0); done(); }); - } + }, ); }); }); // getObjectListAsync - it(testName + 'Try to get object list async', done => { + it(`${testName}Try to get object list async`, done => { // let's create an object matching the list context.adapter .setForeignObjectAsync('hm-rpc.meta.VALUES.HM-CC-RT-DN.CLIMATECONTROL_RECEIVER.19', { type: 'meta', common: { name: 'test', - type: 'meta.user' + type: 'meta.user', }, native: { adapter: 'hm-rpc', - type: 'paramsetDescription' - } + type: 'paramsetDescription', + }, }) .then(() => { // now lets get our object context.adapter .getObjectListAsync({ startkey: 'hm-rpc.meta.VALUES', - endkey: 'hm-rpc.meta.VALUES.\u9999' + endkey: 'hm-rpc.meta.VALUES.\u9999', }) .then(res => { expect(res.rows.length).to.be.equal(1); @@ -888,7 +885,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // delObject - it(testName + 'Try to delete existing object', done => { + it(`${testName}Try to delete existing object`, done => { context.adapter.delObject(gid, err => { expect(err).to.not.be.ok; @@ -907,17 +904,17 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // delForeignObject - it(testName + 'Try to delete foreign existing object', function (done) { - context.adapter.delForeignObject(context.adapterShortName + 'f.0.' + gid, function (err) { + it(`${testName}Try to delete foreign existing object`, function (done) { + context.adapter.delForeignObject(`${context.adapterShortName}f.0.${gid}`, function (err) { expect(err).to.not.be.ok; - context.adapter.getForeignObject(context.adapterShortName + 'f.0.' + gid, function (err, obj) { + context.adapter.getForeignObject(`${context.adapterShortName}f.0.${gid}`, function (err, obj) { expect(err).to.be.not.ok; expect(obj).to.be.null; // deleting non existing object should not result in an error - context.adapter.delForeignObject(context.adapterShortName + 'f.0.' + gid, function (err) { + context.adapter.delForeignObject(`${context.adapterShortName}f.0.${gid}`, function (err) { expect(err).to.be.not.ok; done(); }); @@ -926,15 +923,15 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // check that enum membership is removed on delForeignObject - it(testName + 'should delete enum membership on object deletion', done => { + it(`${testName}should delete enum membership on object deletion`, done => { const objects = context.objects; const enumObj: ioBroker.SettableEnumObject = { common: { name: 'Wohnzimmer', - members: ['tesla.0.model', 'test.0.test'] + members: ['tesla.0.model', 'test.0.test'], }, native: {}, - type: 'enum' + type: 'enum', }; // create our object objects.setObject( @@ -947,8 +944,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont name: 'Model', read: true, write: true, - role: 'state' - } + role: 'state', + }, }, () => { // now create the enum with object as member @@ -964,15 +961,15 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); }); - } + }, ); }); // subscribeObjects - it(testName + 'Try to subscribe on objects changes', done => { + it(`${testName}Try to subscribe on objects changes`, done => { context.adapter.subscribeObjects('*', () => { context.onAdapterObjectChanged = (id, obj) => { - if (id === context.adapterShortName + '.0.' + gid) { + if (id === `${context.adapterShortName}.0.${gid}`) { expect(obj).to.be.ok; expect(obj!.common.name).to.equal('must be set'); context.onAdapterObjectChanged = null; @@ -987,26 +984,26 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont name: 'must be set', read: true, write: true, - role: 'state' + role: 'state', }, native: { - pparam: 10 + pparam: 10, }, - type: 'state' + type: 'state', }, err => { expect(err).to.be.null; - } + }, ); }); }); // unsubscribeObjects - it(testName + 'Try to unsubscribe on objects changes', function (done) { + it(`${testName}Try to unsubscribe on objects changes`, function (done) { this.timeout(3_000); context.adapter.unsubscribeObjects('*', () => { context.onAdapterObjectChanged = function (id, obj) { - if (id === context.adapterShortName + '.0.' + gid) { + if (id === `${context.adapterShortName}.0.${gid}`) { expect(obj).to.be.ok; expect(obj).to.be.not.ok; } @@ -1019,28 +1016,28 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont name: 'must be set', read: true, write: true, - role: 'state' + role: 'state', }, native: { - pparam: 10 + pparam: 10, }, - type: 'state' + type: 'state', }, function (err) { expect(err).to.be.null; setTimeout(function () { done(); }, 2_000); - } + }, ); }); }); // subscribeForeignObjects - it(testName + 'Try to subscribe on foreign objects changes', function (done) { - context.adapter.subscribeForeignObjects(context.adapterShortName + 'f.*', () => { + it(`${testName}Try to subscribe on foreign objects changes`, function (done) { + context.adapter.subscribeForeignObjects(`${context.adapterShortName}f.*`, () => { context.onAdapterObjectChanged = function (id, obj) { - if (id === context.adapterShortName + 'f.0.' + gid) { + if (id === `${context.adapterShortName}f.0.${gid}`) { expect(obj).to.be.ok; expect(obj!.common.name).to.equal('must be set'); context.onAdapterObjectChanged = null; @@ -1048,29 +1045,29 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont } }; context.adapter.setForeignObject( - context.adapterShortName + 'f.0.' + gid, + `${context.adapterShortName}f.0.${gid}`, { common: { type: 'string', name: 'must be set', read: true, write: true, - role: 'state' + role: 'state', }, native: { - pparam: 10 + pparam: 10, }, - type: 'state' + type: 'state', }, function (err) { expect(err).to.be.null; - } + }, ); }); }); // check proteciton for subscribeForeignObjects - it(testName + 'Check if protectedNative is protected in subscribeForeignObjects', function (done) { + it(`${testName}Check if protectedNative is protected in subscribeForeignObjects`, function (done) { context.adapter.subscribeForeignObjects('system.adapter.tesla.0', () => { context.onAdapterObjectChanged = function (id, obj) { if (id === 'system.adapter.tesla.0') { @@ -1098,29 +1095,29 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont mode: 'daemon', platform: 'Javascript/Node.js', materialize: true, - installedVersion: '1.0.0' + installedVersion: '1.0.0', }, native: { model: 'S P85D', username: 'tesla', - password: 'winning' + password: 'winning', }, protectedNative: ['username', 'password'], objects: [], - instanceObjects: [] + instanceObjects: [], }, function (err) { expect(err).to.be.null; - } + }, ); }); }); - it(testName + 'Check if own protectedNative is available in subscribeForeignObjects', function (done) { + it(`${testName}Check if own protectedNative is available in subscribeForeignObjects`, function (done) { // If own adapter, protectedNative has to be available - context.adapter.subscribeForeignObjects('system.adapter.' + context.adapterShortName + '.0', () => { + context.adapter.subscribeForeignObjects(`system.adapter.${context.adapterShortName}.0`, () => { context.onAdapterObjectChanged = (id, obj) => { - if (id === 'system.adapter.' + context.adapterShortName + '.0') { + if (id === `system.adapter.${context.adapterShortName}.0`) { expect(obj).to.be.ok; expect(obj!.common.name).to.equal('tesla'); expect(obj!.native).to.be.ok; @@ -1128,13 +1125,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(obj!.native.model).equal('S P85D'); expect(obj!.native.username).to.equal('tesla'); expect(obj!.native.password).to.equal('winning'); - expect(obj!._id).equal('system.adapter.' + context.adapterShortName + '.0'); + expect(obj!._id).equal(`system.adapter.${context.adapterShortName}.0`); context.onAdapterObjectChanged = null; done(); } }; context.adapter.setForeignObject( - 'system.adapter.' + context.adapterShortName + '.0', + `system.adapter.${context.adapterShortName}.0`, { type: 'instance', common: { @@ -1145,61 +1142,61 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont mode: 'daemon', platform: 'Javascript/Node.js', materialize: true, - installedVersion: '1.0.0' + installedVersion: '1.0.0', }, native: { model: 'S P85D', username: 'tesla', - password: 'winning' + password: 'winning', }, protectedNative: ['username', 'password'], objects: [], - instanceObjects: [] + instanceObjects: [], }, function (err) { expect(err).to.be.null; - } + }, ); }); }); // unsubscribeForeignObjects - it(testName + 'Try to unsubscribe on foreign objects changes', function (done) { + it(`${testName}Try to unsubscribe on foreign objects changes`, function (done) { this.timeout(3_000); - context.adapter.unsubscribeForeignObjects(context.adapterShortName + 'f.*', () => { + context.adapter.unsubscribeForeignObjects(`${context.adapterShortName}f.*`, () => { context.onAdapterObjectChanged = function (id, obj) { - if (id === context.adapterShortName + 'f.0.' + gid) { + if (id === `${context.adapterShortName}f.0.${gid}`) { expect(obj).to.be.ok; expect(obj).to.be.not.ok; } }; context.adapter.setForeignObject( - context.adapterShortName + 'f.0.' + gid, + `${context.adapterShortName}f.0.${gid}`, { common: { type: 'string', name: 'must be set', read: true, write: true, - role: 'state' + role: 'state', }, native: { - pparam: 10 + pparam: 10, }, - type: 'state' + type: 'state', }, function (err) { expect(err).to.be.null; setTimeout(function () { done(); }, 2000); - } + }, ); }); }); // Try to access system configuration - it(testName + 'Try to access system configuration', function (done) { + it(`${testName}Try to access system configuration`, function (done) { this.timeout(3_000); context.adapter.getForeignObject('system.config', (err, obj) => { @@ -1212,7 +1209,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // getObject with acls - it(testName + 'Check getObjects with ACLs', function (done) { + it(`${testName}Check getObjects with ACLs`, function (done) { this.timeout(3_000); // create testf.0.myTestObject @@ -1228,44 +1225,44 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont read: true, write: false, delete: false, - create: false + create: false, }, state: { list: false, read: false, write: false, create: false, - delete: false + delete: false, }, users: { write: false, create: false, delete: false, list: false, - read: false + read: false, }, other: { execute: false, http: false, - sendto: false + sendto: false, }, file: { list: false, read: false, write: false, create: false, - delete: false - } - } + delete: false, + }, + }, }, native: {}, acl: { object: 1638, owner: 'system.user.admin', - ownerGroup: 'system.group.administrator' + ownerGroup: 'system.group.administrator', }, _id: 'system.group.writer', - type: 'group' + type: 'group', }, function (err) { expect(err).to.be.null; @@ -1278,21 +1275,21 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont name: 'write-only', enabled: true, password: - 'pbkdf2$10000$ab4104d8bb68390ee7e6c9397588e768de6c025f0c732c18806f3d1270c83f83fa86a7bf62583770e5f8d0b405fbb3ad32214ef3584f5f9332478f2506414443a910bf15863b36ebfcaa7cbb19253ae32cd3ca390dab87b29cd31e11be7fa4ea3a01dad625d9de44e412680e1a694227698788d71f1e089e5831dc1bbacfa794b45e1c995214bf71ee4160d98b4305fa4c3e36ee5f8da19b3708f68e7d2e8197375c0f763d90e31143eb04760cc2148c8f54937b9385c95db1742595634ed004fa567655dfe1d9b9fa698074a9fb70c05a252b2d9cf7ca1c9b009f2cd70d6972ccf0ee281d777d66a0346c6c6525436dd7fe3578b28dca2c7adbfde0ecd45148$31c3248ba4dc9600a024b4e0e7c3e585' + 'pbkdf2$10000$ab4104d8bb68390ee7e6c9397588e768de6c025f0c732c18806f3d1270c83f83fa86a7bf62583770e5f8d0b405fbb3ad32214ef3584f5f9332478f2506414443a910bf15863b36ebfcaa7cbb19253ae32cd3ca390dab87b29cd31e11be7fa4ea3a01dad625d9de44e412680e1a694227698788d71f1e089e5831dc1bbacfa794b45e1c995214bf71ee4160d98b4305fa4c3e36ee5f8da19b3708f68e7d2e8197375c0f763d90e31143eb04760cc2148c8f54937b9385c95db1742595634ed004fa567655dfe1d9b9fa698074a9fb70c05a252b2d9cf7ca1c9b009f2cd70d6972ccf0ee281d777d66a0346c6c6525436dd7fe3578b28dca2c7adbfde0ecd45148$31c3248ba4dc9600a024b4e0e7c3e585', }, _id: 'system.user.write-only', native: {}, acl: { object: 1638, owner: 'system.user.admin', - ownerGroup: 'system.group.administrator' - } + ownerGroup: 'system.group.administrator', + }, }, function (err) { expect(err).to.be.null; context.adapter.setForeignObject( - context.adapterShortName + 'f.0.' + gid, + `${context.adapterShortName}f.0.${gid}`, { type: 'state', common: { @@ -1300,7 +1297,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', read: true, - write: true + write: true, }, native: { attr1: '1', @@ -1308,42 +1305,42 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont attr3: '3', repositories: ['R1'], certificates: ['C1'], - devices: ['D1'] + devices: ['D1'], }, acl: { object: 1638, owner: 'system.user.write-only', ownerGroup: 'system.group.administrator', - state: 1638 - } + state: 1638, + }, }, function (err) { expect(err).to.be.null; context.objects.getObject( - context.adapterShortName + 'f.0.' + gid, + `${context.adapterShortName}f.0.${gid}`, { user: 'system.user.write-only' }, function (err, obj) { expect(err).to.be.not.ok; expect(obj).to.be.ok; expect(obj!.native).to.be.ok; - expect(obj!._id).equal(context.adapterShortName + 'f.0.' + gid); + expect(obj!._id).equal(`${context.adapterShortName}f.0.${gid}`); expect(obj!.common.name).equal('test1'); expect(obj!.type).equal('state'); //expect(obj.acl).to.be.ok; done(); - } + }, ); - } + }, ); - } + }, ); - } + }, ); }); // should use def as default state value - it(testName + 'Check setObject state with def', async () => { + it(`${testName}Check setObject state with def`, async () => { await context.adapter.setObjectNotExistsAsync('testDefaultVal', { type: 'state', common: { @@ -1352,9 +1349,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont def: 'Run Forrest, Run!', read: true, write: true, - role: 'state' + role: 'state', }, - native: {} + native: {}, }); const state = await context.adapter.getStateAsync('testDefaultVal'); @@ -1364,14 +1361,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // should use def as default state value on extendObject when obj non-existing - it(testName + 'Check extendObject state with def', async function () { + it(`${testName}Check extendObject state with def`, async function () { this.timeout(3_000); let obj = await context.adapter.extendObjectAsync('testDefaultValExtend', { type: 'state', common: { type: 'string', - def: 'Run Forrest, Run!' - } + def: 'Run Forrest, Run!', + }, }); expect(obj).to.be.ok; @@ -1383,8 +1380,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // when state already exists def should not override obj = await context.adapter.extendObjectAsync('testDefaultValExtend', { common: { - def: 'Please, do not set me up' - } + def: 'Please, do not set me up', + }, }); expect(obj).to.be.ok; @@ -1397,8 +1394,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // extend it again - def should be created again, because state has been removed - now we set a def object obj = await context.adapter.extendObjectAsync('testDefaultValExtend', { common: { - def: { hello: 'world' } - } + def: { hello: 'world' }, + }, }); expect(obj).to.be.ok; @@ -1410,13 +1407,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // should use def as default state value on extendForeignObject when obj non-existing - it(testName + 'Check extendForeignObject state with def', async () => { + it(`${testName}Check extendForeignObject state with def`, async () => { let obj = await context.adapter.extendForeignObjectAsync('foreign.0.testDefaultValExtend', { type: 'state', common: { type: 'string', - def: 'Run Forrest, Run!' - } + def: 'Run Forrest, Run!', + }, }); expect(obj).to.be.ok; @@ -1428,8 +1425,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // when state already exists def should not override obj = await context.adapter.extendForeignObjectAsync('foreign.0.testDefaultValExtend', { common: { - def: 'Please, do not set me up' - } + def: 'Please, do not set me up', + }, }); expect(obj).to.be.ok; @@ -1442,8 +1439,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // extend it again - def should be created again, because state has been removed - now we set a def object obj = await context.adapter.extendForeignObjectAsync('foreign.0.testDefaultValExtend', { common: { - def: { hello: 'world' } - } + def: { hello: 'world' }, + }, }); expect(obj).to.be.ok; @@ -1454,17 +1451,17 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(state!.ack).to.equal(true); }); - it(testName + 'Check extendForeignObject with preserve option', async () => { + it(`${testName}Check extendForeignObject with preserve option`, async () => { const obj = await context.adapter.extendForeignObjectAsync('foreign.0.testExtendPreserve', { type: 'state', common: { name: "Don't change me", type: 'string', - def: 'Run Forrest, Run!' + def: 'Run Forrest, Run!', }, native: { - bool: false - } + bool: false, + }, }); expect(obj).to.be.ok; @@ -1477,14 +1474,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont { common: { def: 'Changed', - name: 'Changed' + name: 'Changed', }, native: { existing: 'exists', - bool: true - } + bool: true, + }, }, - options + options, ); let objGet = await context.adapter.getForeignObjectAsync('foreign.0.testExtendPreserve'); @@ -1504,11 +1501,11 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont def: 'Run Forrest, Run!', read: true, write: true, - role: 'state' + role: 'state', }, native: { - bool: false - } + bool: false, + }, }); options = { preserve: { common: true } }; @@ -1521,13 +1518,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont common: { name: 'CHANGED', type: 'number', - def: 1 + def: 1, }, native: { - bool: false - } + bool: false, + }, }, - options + options, ); objGet = await context.adapter.getForeignObjectAsync('foreign.0.testExtendPreserve'); @@ -1549,13 +1546,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont name: 'CHANGED', type: 'number', def: 1, - smartName: 'test' + smartName: 'test', }, native: { - bool: false - } + bool: false, + }, }, - options + options, ); objGet = await context.adapter.getForeignObjectAsync('foreign.0.testExtendPreserve'); @@ -1572,13 +1569,13 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont common: { type: 'number', def: 1, - smartName: 'test' + smartName: 'test', }, native: { - bool: false - } + bool: false, + }, }, - options + options, ); objGet = await context.adapter.getForeignObjectAsync('foreign.0.testExtendPreserve'); @@ -1596,17 +1593,17 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont common: { name: { en: 'Hallo', - de: 'Hello' + de: 'Hello', }, type: 'number', def: 1, - smartName: 'test' + smartName: 'test', }, native: { - bool: false - } + bool: false, + }, }, - options + options, ); objGet = await context.adapter.getForeignObjectAsync('foreign.0.testExtendPreserve'); @@ -1615,24 +1612,24 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // test that real errors of methods promisified via tools.promisify are propagated, can be adapted to a more generic test - it(testName + 'Check that crashes of promisified methods are propagated', function () { + it(`${testName}Check that crashes of promisified methods are propagated`, function () { return expect( context.adapter.extendObjectAsync('testDefaultValExtend', { type: 'state', common: { type: 'string', - def: 'Run Forrest, Run!' + def: 'Run Forrest, Run!', }, // @ts-expect-error force crash - native: -3 - }) + native: -3, + }), ).to.be.eventually.rejectedWith( `Cannot use 'in' operator to search for 'repositories' in -3`, - 'Should have thrown' + 'Should have thrown', ); }); - it(testName + 'Should check object existence', async () => { + it(`${testName}Should check object existence`, async () => { const id = 'objectExistenceCheckAdapter'; // object should not exist let exists = await context.adapter.objectExists(id); @@ -1642,7 +1639,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont await context.adapter.setObjectAsync(id, { type: 'meta', common: { name: 'meta', type: 'meta.user' }, - native: {} + native: {}, }); // object should now exist @@ -1650,7 +1647,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(exists).to.be.true; }); - it(testName + 'Should check foreign object existence', async () => { + it(`${testName}Should check foreign object existence`, async () => { const id = `${context.adapterShortName}.0.objectForeignExistenceCheckAdapter`; // object should not exist let exists = await context.adapter.foreignObjectExists(id); @@ -1660,7 +1657,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont await context.adapter.setForeignObjectAsync(id, { type: 'meta', common: { name: 'meta', type: 'meta.user' }, - native: {} + native: {}, }); // object should now exist @@ -1669,12 +1666,12 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // files - it(testName + 'Should check file existence', async () => { + it(`${testName}Should check file existence`, async () => { // create meta object await context.objects.setObjectAsync('fileTest.0', { type: 'meta', common: { name: 'meta', type: 'meta.user' }, - native: {} + native: {}, }); // file should not exist @@ -1688,7 +1685,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // write file meta check - it(testName + 'Should not write file w/o meta', async () => { + it(`${testName}Should not write file w/o meta`, async () => { try { await context.adapter.writeFileAsync('nonExisting.0', 'test.txt', '...'); } catch (e) { diff --git a/packages/controller/test/lib/testStates.ts b/packages/controller/test/lib/testStates.ts index 1b2205fa3e..cdd7a4a97d 100644 --- a/packages/controller/test/lib/testStates.ts +++ b/packages/controller/test/lib/testStates.ts @@ -1,11 +1,11 @@ import type { TestContext } from '../_Types.js'; export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, context: TestContext): void { - const testName = context.name + ' ' + context.adapterShortName + ' adapter: '; + const testName = `${context.name} ${context.adapterShortName} adapter: `; const gid = 'testStates'; // setState - it(testName + 'Set local state', function (done) { + it(`${testName}Set local state`, function (done) { this.timeout(3_000); context.adapter.setObject( gid, @@ -17,21 +17,21 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', min: -100, - max: 100 + max: 100, }, native: {}, - type: 'state' + type: 'state', }, function (err) { expect(err).to.be.null; - context.states.getState(context.adapterShortName + '.0.' + gid, function (err, _state) { + context.states.getState(`${context.adapterShortName}.0.${gid}`, function (err, _state) { expect(err).to.be.null; context.adapter.setState(gid, 1, function (err) { expect(err).to.be.not.ok; - context.states.getState(context.adapterShortName + '.0.' + gid, function (err, state) { + context.states.getState(`${context.adapterShortName}.0.${gid}`, function (err, state) { expect(err).to.be.null; expect(state).to.be.ok; expect(state!.val).to.equal(1); @@ -40,7 +40,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont context.adapter.setState(gid, 2, true, function (err) { expect(err).to.be.not.ok; - context.states.getState(context.adapterShortName + '.0.' + gid, function (err, state) { + context.states.getState(`${context.adapterShortName}.0.${gid}`, function (err, state) { expect(err).to.be.null; expect(state).to.be.ok; expect(state!.val).to.equal(2); @@ -50,7 +50,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(err).to.be.not.ok; context.states.getState( - context.adapterShortName + '.0.' + gid, + `${context.adapterShortName}.0.${gid}`, function (err, state) { expect(err).to.be.null; expect(state).to.be.ok; @@ -61,7 +61,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(err).to.be.not.ok; context.states.getState( - context.adapterShortName + '.0.' + gid, + `${context.adapterShortName}.0.${gid}`, function (err, state) { expect(err).to.be.null; expect(state).to.be.ok; @@ -75,21 +75,21 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(err).to.be.not.ok; context.states.getState( - context.adapterShortName + '.0.' + gid, + `${context.adapterShortName}.0.${gid}`, function (err, state) { expect(err).to.be.null; expect(state).to.be.ok; expect(state!.val).to.equal(3); expect(state!.ack).to.equal(true); done(); - } + }, ); - } + }, ); - } + }, ); }); - } + }, ); }); }); @@ -97,24 +97,24 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); }); - } + }, ); }); // getState - it(testName + 'Get local state', function (done) { + it(`${testName}Get local state`, function (done) { this.timeout(3_000); context.adapter.getState(gid, function (err) { expect(err).to.be.not.ok; - context.adapter.getState(context.adapterShortName + '.0.' + gid, function (err, state) { + context.adapter.getState(`${context.adapterShortName}.0.${gid}`, function (err, state) { expect(err).to.be.null; expect(state).to.be.ok; expect(state!.val).to.equal(3); expect(state!.ack).to.equal(true); // ask for non-existing state - context.adapter.getState(gid + '6', function (err, state) { + context.adapter.getState(`${gid}6`, function (err, state) { expect(err).to.be.not.ok; expect(state).to.be.null; done(); @@ -124,14 +124,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // getStates - it(testName + 'Get local states', function (done) { + it(`${testName}Get local states`, function (done) { this.timeout(3_000); context.adapter.getStates('*', function (err, states) { expect(err).to.be.not.ok; expect(states).to.be.an('object'); - expect(states![context.adapterShortName + '.0.' + gid]).to.be.an('object'); - expect(states![context.adapterShortName + '.0.' + gid].val).to.equal(3); - expect(states![context.adapterShortName + '.0.' + gid].ack).equal(true); + expect(states![`${context.adapterShortName}.0.${gid}`]).to.be.an('object'); + expect(states![`${context.adapterShortName}.0.${gid}`].val).to.equal(3); + expect(states![`${context.adapterShortName}.0.${gid}`].ack).equal(true); context.adapter.getStates('abc*', function (err, states) { expect(err).to.be.not.ok; @@ -140,12 +140,12 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // no states should match expect(Object.keys(states!).length).to.be.equal(0); - context.adapter.getStates(gid.substring(0, gid.length - 2) + '*', function (err, states) { + context.adapter.getStates(`${gid.substring(0, gid.length - 2)}*`, function (err, states) { expect(err).to.be.not.ok; expect(states).to.be.an('object'); - expect(states![context.adapterShortName + '.0.' + gid]).to.be.an('object'); - expect(states![context.adapterShortName + '.0.' + gid].val).to.equal(3); - expect(states![context.adapterShortName + '.0.' + gid].ack).equal(true); + expect(states![`${context.adapterShortName}.0.${gid}`]).to.be.an('object'); + expect(states![`${context.adapterShortName}.0.${gid}`].val).to.equal(3); + expect(states![`${context.adapterShortName}.0.${gid}`].ack).equal(true); done(); }); @@ -154,7 +154,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // delState - it(testName + 'Delete local state', function (done) { + it(`${testName}Delete local state`, function (done) { this.timeout(3_000); context.adapter.delState(gid, function (err) { expect(err).to.be.not.ok; @@ -173,7 +173,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // setStateChanged - it(testName + 'Set local state if changed', function (done) { + it(`${testName}Set local state if changed`, function (done) { // create object context.adapter.setObject( gid, @@ -185,10 +185,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', min: -100, - max: 100 + max: 100, }, native: {}, - type: 'state' + type: 'state', }, function (err) { expect(err).to.be.null; @@ -198,20 +198,20 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont context.adapter.setStateChanged(gid, 1, function (err, id, notChanged) { expect(err).to.be.not.ok; // redis do not return ID - expect(id).to.be.equal(context.adapterShortName + '.0.' + gid); + expect(id).to.be.equal(`${context.adapterShortName}.0.${gid}`); expect(notChanged).to.be.true; - context.states.getState(context.adapterShortName + '.0.' + gid, function (err, state) { + context.states.getState(`${context.adapterShortName}.0.${gid}`, function (err, state) { expect(err).to.be.not.ok; expect(state).to.be.ok; expect(state!.ts).to.be.equal(ts); context.adapter.setStateChanged(gid, 1, true, function (err, id, notChanged) { expect(err).to.be.not.ok; - expect(id).to.be.equal(context.adapterShortName + '.0.' + gid); + expect(id).to.be.equal(`${context.adapterShortName}.0.${gid}`); expect(notChanged).to.be.false; - context.states.getState(context.adapterShortName + '.0.' + gid, function (err, state) { + context.states.getState(`${context.adapterShortName}.0.${gid}`, function (err, state) { expect(err).to.be.not.ok; expect(state).to.be.ok; expect(state!.ack).to.be.true; @@ -222,14 +222,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); }); - } + }, ); }); // subscribeStates - it(testName + 'Test subscribe local states', function (done) { + it(`${testName}Test subscribe local states`, function (done) { this.timeout(3_000); - const sGid = gid + '5'; + const sGid = `${gid}5`; context.adapter.setObject( sGid, @@ -241,19 +241,19 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', min: -100, - max: 100 + max: 100, }, native: {}, - type: 'state' + type: 'state', }, function (err) { expect(err).to.be.null; - context.states.setState(context.adapterShortName + '.0.' + sGid, 9, function (err) { + context.states.setState(`${context.adapterShortName}.0.${sGid}`, 9, function (err) { expect(err).to.be.not.ok; context.onAdapterStateChanged = function (id, state) { - if (id === context.adapterShortName + '.0.' + sGid) { + if (id === `${context.adapterShortName}.0.${sGid}`) { expect(state).to.be.ok; expect(state!.val).to.equal(10); context.onAdapterStateChanged = null; @@ -262,16 +262,16 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }; context.adapter.subscribeStates('*', function () { - context.states.setState(context.adapterShortName + '.0.' + sGid, 10, function (err) { + context.states.setState(`${context.adapterShortName}.0.${sGid}`, 10, function (err) { expect(err).to.be.not.ok; }); }); }); - } + }, ); }); - it(testName + 'Test subscribe local states on array', async () => { + it(`${testName}Test subscribe local states on array`, async () => { const sGid = `${gid}subscribeArray`; const testVal = 50; @@ -283,10 +283,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', min: -100, - max: 100 + max: 100, }, native: {}, - type: 'state' + type: 'state', }); await context.adapter.subscribeStatesAsync([sGid]); @@ -306,22 +306,22 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // unsubscribeStates - it(testName + 'Test unsubscribe local states', function (done) { + it(`${testName}Test unsubscribe local states`, function (done) { this.timeout(3_000); - const sGid = gid + '5'; + const sGid = `${gid}5`; context.onAdapterStateChanged = function (id, state) { - if (id === context.adapterShortName + '.0.' + sGid) { + if (id === `${context.adapterShortName}.0.${sGid}`) { expect(state).to.be.ok; expect(state!.val).to.equal(9); } }; - context.states.setState(context.adapterShortName + '.0.' + sGid, 9, function (err) { + context.states.setState(`${context.adapterShortName}.0.${sGid}`, 9, function (err) { expect(err).to.be.not.ok; context.adapter.unsubscribeStates('*', function () { - context.states.setState(context.adapterShortName + '.0.' + sGid, 10, function (err) { + context.states.setState(`${context.adapterShortName}.0.${sGid}`, 10, function (err) { expect(err).to.be.not.ok; }); setTimeout(function () { @@ -334,9 +334,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont // ------------------------------------------------------------------------------------- // setForeignState - it(testName + 'Set foreign state', function (done) { + it(`${testName}Set foreign state`, function (done) { this.timeout(3_000); - const fGid = context.adapterShortName + '1.0.' + gid; + const fGid = `${context.adapterShortName}1.0.${gid}`; context.objects.setObject( fGid, { @@ -347,10 +347,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', min: -100, - max: 100 + max: 100, }, native: {}, - type: 'state' + type: 'state', }, function (err) { expect(err).to.be.null; @@ -392,14 +392,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); }); - } + }, ); }); // setForeignState with acl all - it(testName + 'Set foreign state with acl', function (done) { + it(`${testName}Set foreign state with acl`, function (done) { this.timeout(3_000); - const fGid = context.adapterShortName + '3.0.' + gid; + const fGid = `${context.adapterShortName}3.0.${gid}`; context.adapter.setForeignObject( 'system.group.writer2', { @@ -412,44 +412,44 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont read: true, // required to read permissions write: false, delete: false, - create: false + create: false, }, state: { list: false, read: false, write: true, create: false, - delete: false + delete: false, }, users: { write: false, create: false, delete: false, read: false, - list: false + list: false, }, other: { execute: false, http: false, - sendto: false + sendto: false, }, file: { list: false, read: false, write: false, create: false, - delete: false - } - } + delete: false, + }, + }, }, native: {}, acl: { object: 1638, // 0666 owner: 'system.user.admin', - ownerGroup: 'system.group.administrator' + ownerGroup: 'system.group.administrator', }, _id: 'system.group.writer2', - type: 'group' + type: 'group', }, function (err) { expect(err).to.be.null; @@ -462,15 +462,15 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont name: 'write-only2', enabled: true, password: - 'pbkdf2$10000$ab4104d8bb68390ee7e6c9397588e768de6c025f0c732c18806f3d1270c83f83fa86a7bf62583770e5f8d0b405fbb3ad32214ef3584f5f9332478f2506414443a910bf15863b36ebfcaa7cbb19253ae32cd3ca390dab87b29cd31e11be7fa4ea3a01dad625d9de44e412680e1a694227698788d71f1e089e5831dc1bbacfa794b45e1c995214bf71ee4160d98b4305fa4c3e36ee5f8da19b3708f68e7d2e8197375c0f763d90e31143eb04760cc2148c8f54937b9385c95db1742595634ed004fa567655dfe1d9b9fa698074a9fb70c05a252b2d9cf7ca1c9b009f2cd70d6972ccf0ee281d777d66a0346c6c6525436dd7fe3578b28dca2c7adbfde0ecd45148$31c3248ba4dc9600a024b4e0e7c3e585' + 'pbkdf2$10000$ab4104d8bb68390ee7e6c9397588e768de6c025f0c732c18806f3d1270c83f83fa86a7bf62583770e5f8d0b405fbb3ad32214ef3584f5f9332478f2506414443a910bf15863b36ebfcaa7cbb19253ae32cd3ca390dab87b29cd31e11be7fa4ea3a01dad625d9de44e412680e1a694227698788d71f1e089e5831dc1bbacfa794b45e1c995214bf71ee4160d98b4305fa4c3e36ee5f8da19b3708f68e7d2e8197375c0f763d90e31143eb04760cc2148c8f54937b9385c95db1742595634ed004fa567655dfe1d9b9fa698074a9fb70c05a252b2d9cf7ca1c9b009f2cd70d6972ccf0ee281d777d66a0346c6c6525436dd7fe3578b28dca2c7adbfde0ecd45148$31c3248ba4dc9600a024b4e0e7c3e585', }, _id: 'system.user.write-only2', native: {}, acl: { owner: 'system.user.admin', ownerGroup: 'system.group.administrator', - object: 1638 // 0666 - } + object: 1638, // 0666 + }, }, function (_err) { context.objects.setObject( @@ -484,7 +484,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont role: 'level', min: -100, def: 10, - max: 100 + max: 100, }, native: {}, type: 'state', @@ -492,8 +492,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont object: 1638, // 0666 owner: 'system.user.write-only2', ownerGroup: 'system.group.administrator', - state: 1638 // 0666 - } + state: 1638, // 0666 + }, }, function (err) { expect(err).to.be.null; @@ -523,25 +523,25 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(err).to.be.ok; expect(state).to.be.not.ok; done(); - } + }, ); }); - } + }, ); }); }); - } + }, ); - } + }, ); - } + }, ); }); // setForeignState with acl failure - it(testName + 'Set foreign state with acl failure', function (done) { + it(`${testName}Set foreign state with acl failure`, function (done) { this.timeout(3_000); - const fGid = context.adapterShortName + '3.1.' + gid; + const fGid = `${context.adapterShortName}3.1.${gid}`; context.objects.setObject( fGid, @@ -553,7 +553,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', min: -100, - max: 100 + max: 100, }, native: {}, type: 'state', @@ -561,8 +561,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont object: 102, owner: 'system.user.write-only', ownerGroup: 'system.group.administrator', - state: 102 - } + state: 102, + }, }, function (err) { expect(err).to.be.null; @@ -575,14 +575,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont done(); }); }); - } + }, ); }); // setForeignState with acl write only - it(testName + 'Set foreign state with acl write only', function (done) { + it(`${testName}Set foreign state with acl write only`, function (done) { this.timeout(3_000); - const fGid = context.adapterShortName + '3.0.' + gid; + const fGid = `${context.adapterShortName}3.0.${gid}`; context.objects.setObject( fGid, { @@ -593,7 +593,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', min: -100, - max: 100 + max: 100, }, native: {}, type: 'state', @@ -601,8 +601,8 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont object: 1126, owner: 'system.user.write-only2', ownerGroup: 'system.group.administrator', - state: 614 - } + state: 614, + }, }, function (err) { expect(err).to.be.null; @@ -625,17 +625,17 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(state!.ack).to.equal(false); done(); }); - } + }, ); }); - } + }, ); }); // setForeignStateChanged - it(testName + 'Set foreign state if changed', function (done) { + it(`${testName}Set foreign state if changed`, function (done) { // create object - const fGid = context.adapterShortName + '1.0.1' + gid; + const fGid = `${context.adapterShortName}1.0.1${gid}`; context.adapter.setForeignObject( fGid, { @@ -646,10 +646,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', min: -100, - max: 100 + max: 100, }, native: {}, - type: 'state' + type: 'state', }, function (err) { expect(err).to.be.null; @@ -683,14 +683,14 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); }); - } + }, ); }); // getForeignState - it(testName + 'Get foreign state', function (done) { + it(`${testName}Get foreign state`, function (done) { this.timeout(3_000); - const fGid = context.adapterShortName + '1.0.' + gid; + const fGid = `${context.adapterShortName}1.0.${gid}`; context.adapter.getForeignState(fGid, function (err, state) { expect(err).to.be.null; expect(state).to.be.ok; @@ -698,7 +698,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(state!.ack).to.equal(true); // ask for non-existing state - context.adapter.getForeignState(fGid + '5', function (err, state) { + context.adapter.getForeignState(`${fGid}5`, function (err, state) { expect(err).to.be.not.ok; expect(state).to.be.null; done(); @@ -707,16 +707,16 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // getForeignStates - it(testName + 'Get foreign states', function (done) { + it(`${testName}Get foreign states`, function (done) { this.timeout(3_000); - context.adapter.getForeignStates(context.adapterShortName + '1.0.*', function (err, states) { + context.adapter.getForeignStates(`${context.adapterShortName}1.0.*`, function (err, states) { expect(err).to.be.not.ok; expect(states).to.be.an('object'); - expect(states![context.adapterShortName + '1.0.' + gid]).to.be.ok; - expect(states![context.adapterShortName + '1.0.' + gid].val).to.equal(3); - expect(states![context.adapterShortName + '1.0.' + gid].ack).equal(true); + expect(states![`${context.adapterShortName}1.0.${gid}`]).to.be.ok; + expect(states![`${context.adapterShortName}1.0.${gid}`].val).to.equal(3); + expect(states![`${context.adapterShortName}1.0.${gid}`].ack).equal(true); - context.adapter.getForeignStates(context.adapterShortName + '1.0.abc*', function (err, states) { + context.adapter.getForeignStates(`${context.adapterShortName}1.0.abc*`, function (err, states) { expect(err).to.be.not.ok; expect(states).to.be.an('object'); @@ -724,32 +724,32 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(Object.keys(states!).length).to.be.equal(0); context.adapter.getForeignStates( - context.adapterShortName + '1.0.' + gid.substring(0, gid.length - 2) + '*', + `${context.adapterShortName}1.0.${gid.substring(0, gid.length - 2)}*`, function (err, states) { expect(err).to.be.not.ok; expect(states).to.be.an('object'); - expect(states![context.adapterShortName + '1.0.' + gid]).to.be.ok; - expect(states![context.adapterShortName + '1.0.' + gid].val).to.equal(3); - expect(states![context.adapterShortName + '1.0.' + gid].ack).equal(true); + expect(states![`${context.adapterShortName}1.0.${gid}`]).to.be.ok; + expect(states![`${context.adapterShortName}1.0.${gid}`].val).to.equal(3); + expect(states![`${context.adapterShortName}1.0.${gid}`].ack).equal(true); done(); - } + }, ); }); }); }); // delForeignState - it(testName + 'Delete foreign state', function (done) { + it(`${testName}Delete foreign state`, function (done) { this.timeout(3_000); - context.adapter.delForeignState(context.adapterShortName + '1.0.' + gid, function (err) { + context.adapter.delForeignState(`${context.adapterShortName}1.0.${gid}`, function (err) { expect(err).to.be.not.ok; - context.adapter.getForeignState(context.adapterShortName + '1.0.' + gid, function (err, state) { + context.adapter.getForeignState(`${context.adapterShortName}1.0.${gid}`, function (err, state) { expect(err).to.be.not.ok; expect(state).to.be.not.ok; - context.adapter.delForeignState(context.adapterShortName + '1.0.' + gid, function (err) { + context.adapter.delForeignState(`${context.adapterShortName}1.0.${gid}`, function (err) { expect(err).to.be.not.ok; done(); @@ -759,7 +759,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // get foreign system state - it(testName + 'Get System State', function (done) { + it(`${testName}Get System State`, function (done) { this.timeout(3_000); context.adapter.getForeignState('system.adapter.test.0.memRss', (err, state) => { @@ -771,7 +771,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); // subscribeForeignStates - it(testName + 'Test subscribe foreign states', function (done) { + it(`${testName}Test subscribe foreign states`, function (done) { this.timeout(3_000); const sGid = `${context.adapterShortName}2.0.${gid}6`; @@ -785,10 +785,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', min: -100, - max: 100 + max: 100, }, native: {}, - type: 'state' + type: 'state', }, function (err) { expect(err).to.be.null; @@ -805,22 +805,22 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont } }; - context.adapter.subscribeForeignStates(context.adapterShortName + '2.0.*', function () { + context.adapter.subscribeForeignStates(`${context.adapterShortName}2.0.*`, function () { context.states.setState(sGid, 10, function (err) { expect(err).to.be.not.ok; }); }); }); - } + }, ); }); // subscribeForeignStates with array - it(testName + 'Test subscribe foreign states with array', async () => { + it(`${testName}Test subscribe foreign states with array`, async () => { const stateIds = [ `${context.adapterShortName}3.0.${gid}76`, `${context.adapterShortName}3.0.${gid}77`, - `${context.adapterShortName}3.0.${gid}78` + `${context.adapterShortName}3.0.${gid}78`, ]; for (const id of stateIds) { @@ -832,10 +832,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', min: -100, - max: 100 + max: 100, }, native: {}, - type: 'state' + type: 'state', }); } @@ -867,9 +867,9 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }).timeout(3_000); // unsubscribeForeignStates - it(testName + 'Test unsubscribe foreign states', function (done) { + it(`${testName}Test unsubscribe foreign states`, function (done) { this.timeout(3_000); - const sGid = context.adapterShortName + '2.0.' + gid + '6'; + const sGid = `${context.adapterShortName}2.0.${gid}6`; context.onAdapterStateChanged = function (id, state) { if (id === sGid) { @@ -882,23 +882,23 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont context.states.setState(sGid, 9, err => { expect(err).to.be.not.ok; - context.adapter.unsubscribeForeignStates(context.adapterShortName + '2.0.*', () => + context.adapter.unsubscribeForeignStates(`${context.adapterShortName}2.0.*`, () => context.states.setState(sGid, 10, err => { expect(err).to.be.not.ok; setTimeout(() => { context.onAdapterStateChanged = null; done(); }, 1000); - }) + }), ); }); }); // getState - it(testName + 'Set/Get local state wit expiry', function (done) { + it(`${testName}Set/Get local state wit expiry`, function (done) { this.timeout(10000); - const eGid = context.adapterShortName + '.0.' + gid + '_expire'; + const eGid = `${context.adapterShortName}.0.${gid}_expire`; context.adapter.setForeignObject( eGid, { @@ -909,10 +909,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont type: 'number', role: 'level', min: -100, - max: 100 + max: 100, }, native: {}, - type: 'state' + type: 'state', }, function (err) { expect(err).to.be.null; @@ -926,10 +926,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont } }; - context.adapter.setState(gid + '_expire', { val: 1, expire: 4, ack: true }, function (err) { + context.adapter.setState(`${gid}_expire`, { val: 1, expire: 4, ack: true }, function (err) { expect(err).to.be.not.ok; - context.adapter.getState(gid + '_expire', function (err, state) { + context.adapter.getState(`${gid}_expire`, function (err, state) { // read directly, should work expect(err).to.be.null; expect(state).to.be.ok; @@ -939,7 +939,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont context.adapter.subscribeForeignStates(eGid, function () { setTimeout(() => { // read after timeout, should not work - context.adapter.getState(gid + '_expire', function (err, state) { + context.adapter.getState(`${gid}_expire`, function (err, state) { expect(err).to.be.not.ok; expect(state).to.be.null; expect(published).to.be.true; @@ -949,11 +949,11 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); }); - } + }, ); }); - it(testName + 'Should respect from', done => { + it(`${testName}Should respect from`, done => { // we set a state and set a custom from property context.adapter.setState(`${gid}stateWithFrom`, { val: 1, from: 'Paris with love' }, err => { expect(err).to.be.not.ok; @@ -965,7 +965,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); }); - it(testName + 'Should use default from', done => { + it(`${testName}Should use default from`, done => { // we set a state without providing `from` property context.adapter.setState(`${gid}stateWithFrom`, { val: 1 }, err => { expect(err).to.be.not.ok; @@ -998,15 +998,15 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont }); */ - it(testName + 'Should also set object id', async () => { + it(`${testName}Should also set object id`, async () => { // set state with device, channel, state it is supported (legacy) but not recommended, so pass as any await context.adapter.setStateAsync({ device: `${gid}derGeraet`, channel: 'donau', state: 'awake' } as any, { - val: 5 + val: 5, }); const state = await context.adapter.getStateAsync({ device: `${gid}derGeraet`, channel: 'donau', - state: 'awake' + state: 'awake', } as any); expect(state!.val).to.equal(5); // check with string @@ -1015,7 +1015,7 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont return Promise.resolve(); }); - it(testName + 'Should round to next 5', async () => { + it(`${testName}Should round to next 5`, async () => { // we test the step attribute here await context.adapter.setObjectAsync(`${gid}step`, { common: { @@ -1026,10 +1026,10 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont role: 'level', min: -100, max: 100, - step: 5 + step: 5, }, native: {}, - type: 'state' + type: 'state', }); // now the state should be rounded @@ -1045,17 +1045,17 @@ export function register(it: Mocha.TestFunction, expect: Chai.ExpectStatic, cont expect(state!.val).to.equal(-20); }); - it(testName + 'Should throw on invalid subscribe', async () => { + it(`${testName}Should throw on invalid subscribe`, async () => { expect(context.adapter.subscribeStatesAsync('hm-rpc.0.§.test')).to.be.rejectedWith( /is not a valid ID pattern/g, - 'Should throw on invalid pattern' + 'Should throw on invalid pattern', ); await context.adapter.subscribeStatesAsync('*hm-rpc.0._.**test/*'); }); - it(testName + 'sendTo with timeout should reject in time', () => { + it(`${testName}sendTo with timeout should reject in time`, () => { return expect( - context.adapter.sendToAsync('testInstance.0', 'test', {}, { timeout: 500 }) + context.adapter.sendToAsync('testInstance.0', 'test', {}, { timeout: 500 }), ).to.be.eventually.rejectedWith('Timeout exceeded', 'Should have thrown after timeout is over'); }); } diff --git a/packages/controller/test/redis-sentinel/testAdapterStatesRedis.ts b/packages/controller/test/redis-sentinel/testAdapterStatesRedis.ts index 6da3a271e0..5f2180e98f 100644 --- a/packages/controller/test/redis-sentinel/testAdapterStatesRedis.ts +++ b/packages/controller/test/redis-sentinel/testAdapterStatesRedis.ts @@ -3,23 +3,23 @@ import fs from 'node:fs'; import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); -const dataDir = thisDir + '/../../tmp/data-redis'; +const dataDir = `${thisDir}/../../tmp/data-redis`; const statesConfig = { options: { auth_pass: null, - retry_max_delay: 15000 + retry_max_delay: 15000, }, type: 'redis', redisNamespace: 'testObjectsIo', host: ['127.0.0.1', '127.0.0.1', '127.0.0.1'], - port: [26380, 26381, 26382] + port: [26380, 26381, 26382], }; -if (!fs.existsSync(thisDir + '/../tmp')) { - fs.mkdirSync(thisDir + '/../tmp'); +if (!fs.existsSync(`${thisDir}/../tmp`)) { + fs.mkdirSync(`${thisDir}/../tmp`); } const objectsConfig = { @@ -30,12 +30,12 @@ const objectsConfig = { user: '', pass: '', noFileCache: true, - connectTimeout: 2000 + connectTimeout: 2000, }; // states in REDIS, objects in files testAdapter({ statesConfig: statesConfig, objectsConfig: objectsConfig, - name: 'Tests Redis-Sentinel' + name: 'Tests Redis-Sentinel', }); diff --git a/packages/controller/test/redis-sentinel/testStatesRedis.ts b/packages/controller/test/redis-sentinel/testStatesRedis.ts index a5083c2762..454e553e08 100644 --- a/packages/controller/test/redis-sentinel/testStatesRedis.ts +++ b/packages/controller/test/redis-sentinel/testStatesRedis.ts @@ -7,7 +7,7 @@ import type { Client as StateRedisClient } from '@iobroker/db-states-redis'; import { startController, stopController } from '../lib/setup4controller.js'; import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); const dataDir = path.join(thisDir, '..', '..', 'tmp', 'data'); let objects: ObjectsInRedisClient | null = null; @@ -38,20 +38,20 @@ describe('States-Redis-Sentinel: Test states', function () { objects: { dataDir: dataDir, onChange: (id: string, _obj: ioBroker.AnyObject) => { - console.log('object changed. ' + id); - } + console.log(`object changed. ${id}`); + }, }, states: { type: 'redis', host: ['127.0.0.1', '127.0.0.1', '127.0.0.1'], port: [26380, 26381, 26382], onChange: (id: string, state: ioBroker.State) => { - console.log('Redis-state-Sentinel changed. ' + id); + console.log(`Redis-state-Sentinel changed. ${id}`); if (onStatesChanged) { onStatesChanged(id, state); } - } - } + }, + }, }); objects = _objects; @@ -101,7 +101,7 @@ describe('States-Redis-Sentinel: Test states', function () { const testID = 'testObject.0.test1'; onStatesChanged = (id, state) => { if (id === testID) { - console.log('Receive state value: ' + state!.val); + console.log(`Receive state value: ${state!.val}`); expect(state).to.be.ok; if (state!.val !== sendCounter - 1) { // timing special case for failover ... sometimes we loose some resubmits @@ -120,7 +120,7 @@ describe('States-Redis-Sentinel: Test states', function () { expect(state!.ack).to.be.false; expect(state!.ts).to.be.ok; expect(state!.q).to.be.equal(0); - console.log('Get state: ' + state!.val); + console.log(`Get state: ${state!.val}`); if (receiveCounter === 30) { // eslint-disable-next-line @typescript-eslint/no-use-before-define @@ -143,7 +143,7 @@ describe('States-Redis-Sentinel: Test states', function () { }; const stateInterval = setInterval(() => { - console.log('Set state: ' + sendCounter); + console.log(`Set state: ${sendCounter}`); states!.setState(testID, sendCounter++, function (err) { expect(err).to.be.not.ok; }); diff --git a/packages/controller/test/redis-socket/testAdapterStatesRedis.ts b/packages/controller/test/redis-socket/testAdapterStatesRedis.ts index b7d577d2b6..8db316cfec 100644 --- a/packages/controller/test/redis-socket/testAdapterStatesRedis.ts +++ b/packages/controller/test/redis-socket/testAdapterStatesRedis.ts @@ -1,24 +1,24 @@ import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); import testAdapter from './../lib/testAdapter.js'; -const dataDir = thisDir + '/../../tmp/data-redis'; +const dataDir = `${thisDir}/../../tmp/data-redis`; import fs from 'node:fs'; const statesConfig = { options: { auth_pass: null, - retry_max_delay: 15000 + retry_max_delay: 15000, }, type: 'redis', redisNamespace: 'testObjectsIo', host: '/var/run/redis.sock', - port: 0 + port: 0, }; -if (!fs.existsSync(thisDir + '/../tmp')) { - fs.mkdirSync(thisDir + '/../tmp'); +if (!fs.existsSync(`${thisDir}/../tmp`)) { + fs.mkdirSync(`${thisDir}/../tmp`); } const objectsConfig = { @@ -29,12 +29,12 @@ const objectsConfig = { user: '', pass: '', noFileCache: true, - connectTimeout: 2000 + connectTimeout: 2000, }; // states in REDIS, objects in files testAdapter({ statesConfig: statesConfig, objectsConfig: objectsConfig, - name: 'Tests REDIS-Socket' + name: 'Tests REDIS-Socket', }); diff --git a/packages/controller/test/redis-socket/testStatesRedis.ts b/packages/controller/test/redis-socket/testStatesRedis.ts index 8acd2ecb95..ac30bd4160 100644 --- a/packages/controller/test/redis-socket/testStatesRedis.ts +++ b/packages/controller/test/redis-socket/testStatesRedis.ts @@ -6,7 +6,7 @@ import type { Client as ObjectsInRedisClient } from '@iobroker/db-objects-redis' import type { Client as StateRedisClient } from '@iobroker/db-states-redis'; import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); const dataDir = path.join(thisDir, '..', '..', 'tmp', 'data'); let objects: ObjectsInRedisClient | null = null; @@ -38,7 +38,7 @@ describe('States-Redis-Socket: Test states', () => { dataDir: dataDir, onChange: (id: string, _obj: ioBroker.AnyObject) => { console.log(`object changed. ${id}`); - } + }, }, states: { type: 'redis', @@ -49,8 +49,8 @@ describe('States-Redis-Socket: Test states', () => { if (onStatesChanged) { onStatesChanged(id, state); } - } - } + }, + }, }); objects = _objects; diff --git a/packages/controller/test/testAdapterObjectsInFile.ts b/packages/controller/test/testAdapterObjectsInFile.ts index 0bdcd69d78..c1b5ca78d8 100644 --- a/packages/controller/test/testAdapterObjectsInFile.ts +++ b/packages/controller/test/testAdapterObjectsInFile.ts @@ -8,31 +8,31 @@ import { register } from './lib/testObjects.js'; import type { TestContext } from './_Types.js'; import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); const context: TestContext = { // @ts-expect-error will be filled before usage objects: null, - name: textName + name: textName, }; -describe(textName + ' Test Objects File-Redis', function () { - before(textName + ' Start js-controller', async function () { +describe(`${textName} Test Objects File-Redis`, function () { + before(`${textName} Start js-controller`, async function () { this.timeout(23_000); const { objects: _objects, states: _states } = await startController({ objects: { dataDir: `${thisDir}/../tmp/data`, onChange: function (id: string, _obj: ioBroker.AnyObject) { - console.log('object changed. ' + id); - } + console.log(`object changed. ${id}`); + }, }, states: { dataDir: `${thisDir}/../tmp/data`, onChange: function (id: string, _state: ioBroker.State) { - console.log('state changed. ' + id); - } - } + console.log(`state changed. ${id}`); + }, + }, }); objects = _objects; @@ -45,7 +45,7 @@ describe(textName + ' Test Objects File-Redis', function () { register(it, expect, context); - after(textName + ' Stop js-controller', async function () { + after(`${textName} Stop js-controller`, async function () { this.timeout(5_000); await stopController(); await new Promise(resolve => { diff --git a/packages/controller/test/testAdapterObjectsInRedis.ts b/packages/controller/test/testAdapterObjectsInRedis.ts index a6de128f74..59e5c9e289 100644 --- a/packages/controller/test/testAdapterObjectsInRedis.ts +++ b/packages/controller/test/testAdapterObjectsInRedis.ts @@ -10,19 +10,19 @@ import { register } from './lib/testObjects.js'; import * as url from 'node:url'; import type { TestContext } from './_Types.js'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); const context: TestContext = { // @ts-expect-error will be filled in time objects: null, - name: textName + name: textName, }; -if (!fs.existsSync(thisDir + '/../tmp')) { - fs.mkdirSync(thisDir + '/../tmp'); +if (!fs.existsSync(`${thisDir}/../tmp`)) { + fs.mkdirSync(`${thisDir}/../tmp`); } const objectsConfig = { - dataDir: thisDir + '/../tmp/data', + dataDir: `${thisDir}/../tmp/data`, type: 'redis', host: '127.0.0.1', port: 6379, @@ -33,21 +33,21 @@ const objectsConfig = { connectTimeout: 2000, onChange: (id: string, _obj: ioBroker.AnyObject) => { console.log(`object changed. ${id}`); - } + }, }; -describe(textName + 'Test Objects Redis', function () { - before(textName + 'Start js-controller', async function () { +describe(`${textName}Test Objects Redis`, function () { + before(`${textName}Start js-controller`, async function () { this.timeout(23_000); const { objects: _objects, states: _states } = await startController({ objects: objectsConfig, states: { - dataDir: thisDir + '/../tmp/data', + dataDir: `${thisDir}/../tmp/data`, onChange: (id: string, _state: ioBroker.State) => { - console.log('state changed. ' + id); - } - } + console.log(`state changed. ${id}`); + }, + }, }); objects = _objects; @@ -60,7 +60,7 @@ describe(textName + 'Test Objects Redis', function () { register(it, expect, context); - after(textName + 'Stop js-controller', async function () { + after(`${textName}Stop js-controller`, async function () { this.timeout(5_000); await stopController(); await new Promise(resolve => { diff --git a/packages/controller/test/testAdapterStatesInFile.ts b/packages/controller/test/testAdapterStatesInFile.ts index a5040a0cd4..3692c22642 100644 --- a/packages/controller/test/testAdapterStatesInFile.ts +++ b/packages/controller/test/testAdapterStatesInFile.ts @@ -1,7 +1,7 @@ import path from 'node:path'; import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); import testAdapter from './lib/testAdapter.js'; const dataDir = path.join(thisDir, '..', 'tmp', 'data'); @@ -9,21 +9,21 @@ const statesConfig = { options: { auth_pass: null, retry_max_delay: 100, - retry_max_count: 2 + retry_max_count: 2, }, type: 'file', host: '127.0.0.1', port: 19000, user: '', pass: '', - dataDir: dataDir + dataDir: dataDir, }; const objectsConfig = { options: { auth_pass: null, retry_max_delay: 100, - retry_max_count: 2 + retry_max_count: 2, }, dataDir: dataDir, type: 'file', @@ -32,12 +32,12 @@ const objectsConfig = { user: '', pass: '', noFileCache: true, - connectTimeout: 2000 + connectTimeout: 2000, }; // states in files, objects in files testAdapter({ statesConfig, objectsConfig, - name: 'Tests FILE' + name: 'Tests FILE', }); diff --git a/packages/controller/test/testAdapterStatesRedis.ts b/packages/controller/test/testAdapterStatesRedis.ts index 216fa19950..e1c00ff010 100644 --- a/packages/controller/test/testAdapterStatesRedis.ts +++ b/packages/controller/test/testAdapterStatesRedis.ts @@ -1,34 +1,34 @@ import testAdapter from './lib/testAdapter.js'; import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); const statesConfig = { options: { auth_pass: null, retry_max_delay: 100, - retry_max_count: 2 + retry_max_count: 2, }, type: 'redis', host: '127.0.0.1', - port: 6379 + port: 6379, }; const objectsConfig = { - dataDir: thisDir + '/../tmp/data', + dataDir: `${thisDir}/../tmp/data`, options: { auth_pass: null, - retry_max_delay: 100 + retry_max_delay: 100, }, redisNamespace: 'test', type: 'redis', host: '127.0.0.1', - port: 6379 + port: 6379, }; // states in REDIS, objects in files testAdapter({ statesConfig, objectsConfig, - name: 'Tests REDIS' + name: 'Tests REDIS', }); diff --git a/packages/controller/test/testInternalUtilities.ts b/packages/controller/test/testInternalUtilities.ts index 66df012772..b3e6774005 100644 --- a/packages/controller/test/testInternalUtilities.ts +++ b/packages/controller/test/testInternalUtilities.ts @@ -17,15 +17,15 @@ describe('test internal helpers', () => { objects: { dataDir: `${thisDir}/../tmp/data`, onChange: function (id: string, _obj: ioBroker.AnyObject) { - console.log('object changed. ' + id); - } + console.log(`object changed. ${id}`); + }, }, states: { dataDir: `${thisDir}/../tmp/data`, onChange: function (id: string, _state: ioBroker.State) { - console.log('state changed. ' + id); - } - } + console.log(`state changed. ${id}`); + }, + }, }); if (!_objects) { @@ -49,7 +49,7 @@ describe('test internal helpers', () => { // no delay for connection types different from cloud const cronSecondsWrongConnectionType = getCronExpression({ cronExpression: cronWithoutSeconds, - connectionType: 'local' + connectionType: 'local', }); expect(cronSecondsWrongConnectionType).to.be.equal(cronWithoutSeconds); }); @@ -68,15 +68,15 @@ describe('test internal helpers', () => { expect( isInstalledFromNpm({ adapterName: 'admin', - installedFrom: 'iobroker.admin@6.13.16' as ioBroker.InstalledFrom - }) + installedFrom: 'iobroker.admin@6.13.16' as ioBroker.InstalledFrom, + }), ).to.be.true; expect( isInstalledFromNpm({ adapterName: 'benchmark', - installedFrom: 'foxriver76/ioBroker.benchmark' as ioBroker.InstalledFrom - }) + installedFrom: 'foxriver76/ioBroker.benchmark' as ioBroker.InstalledFrom, + }), ).to.be.false; }); diff --git a/packages/controller/test/testPackageFiles.ts b/packages/controller/test/testPackageFiles.ts index 948913c0b1..543fb10ba0 100644 --- a/packages/controller/test/testPackageFiles.ts +++ b/packages/controller/test/testPackageFiles.ts @@ -3,16 +3,16 @@ import fs from 'node:fs'; import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); describe('Test package.json and io-package.json', () => { it('Test package files', done => { console.log(); - const fileContentIOPackage = fs.readFileSync(thisDir + '/../io-package.json', 'utf8'); + const fileContentIOPackage = fs.readFileSync(`${thisDir}/../io-package.json`, 'utf8'); const ioPackage = JSON.parse(fileContentIOPackage); - const fileContentNPMPackage = fs.readFileSync(thisDir + '/../package.json', 'utf8'); + const fileContentNPMPackage = fs.readFileSync(`${thisDir}/../package.json`, 'utf8'); const npmPackage = JSON.parse(fileContentNPMPackage); expect(ioPackage).to.be.an('object'); @@ -26,12 +26,12 @@ describe('Test package.json and io-package.json', () => { expect( ioPackage.common.version, - 'ERROR: Version numbers in package.json and io-package.json needs to match' + 'ERROR: Version numbers in package.json and io-package.json needs to match', ).to.be.equal(npmVersion); if (!ioPackage.common.news || !ioPackage.common.news[ioPackage.common.version]) { console.log( - 'WARNING: No news entry for current version exists in io-package.json, no rollback in Admin possible!' + 'WARNING: No news entry for current version exists in io-package.json, no rollback in Admin possible!', ); console.log(); } @@ -45,18 +45,18 @@ describe('Test package.json and io-package.json', () => { if (Array.isArray(ioPackage.common.authors)) { expect( ioPackage.common.authors.length, - 'ERROR: Author in io-package.json needs to be set' + 'ERROR: Author in io-package.json needs to be set', ).to.not.be.equal(0); if (ioPackage.common.authors.length === 1) { expect( ioPackage.common.authors[0], - 'ERROR: Author in io-package.json needs to be a real name' + 'ERROR: Author in io-package.json needs to be a real name', ).to.not.be.equal('my Name '); } } else { expect( ioPackage.common.authors, - 'ERROR: Author in io-package.json needs to be a real name' + 'ERROR: Author in io-package.json needs to be a real name', ).to.not.be.equal('my Name '); } } else { @@ -64,8 +64,8 @@ describe('Test package.json and io-package.json', () => { console.log(); } expect( - fs.existsSync(thisDir + '/../README.md'), - 'ERROR: README.md needs to exist! Please create one with description, detail information and changelog. English is mandatory.' + fs.existsSync(`${thisDir}/../README.md`), + 'ERROR: README.md needs to exist! Please create one with description, detail information and changelog. English is mandatory.', ).to.be.true; if (!ioPackage.common.titleLang || typeof ioPackage.common.titleLang !== 'object') { console.log('WARNING: titleLang is not existing in io-package.json. Please add'); @@ -78,7 +78,7 @@ describe('Test package.json and io-package.json', () => { ioPackage.common.title.indexOf('Adapter') !== -1 ) { console.log( - 'WARNING: title contains Adapter or ioBroker. It is clear anyway, that it is adapter for ioBroker.' + 'WARNING: title contains Adapter or ioBroker. It is clear anyway, that it is adapter for ioBroker.', ); console.log(); } @@ -86,29 +86,29 @@ describe('Test package.json and io-package.json', () => { if (!ioPackage.common.controller && !ioPackage.common.onlyWWW && !ioPackage.common.noConfig) { if ( !ioPackage.common.materialize || - !fs.existsSync(thisDir + '/../admin/index_m.html') || - !fs.existsSync(thisDir + '/../gulpfile.js') + !fs.existsSync(`${thisDir}/../admin/index_m.html`) || + !fs.existsSync(`${thisDir}/../gulpfile.js`) ) { console.log('WARNING: Admin3 support is missing! Please add it'); console.log(); } if (ioPackage.common.materialize) { expect( - fs.existsSync(thisDir + '/../admin/index_m.html'), - 'Admin3 support is enabled in io-package.json, but index_m.html is missing!' + fs.existsSync(`${thisDir}/../admin/index_m.html`), + 'Admin3 support is enabled in io-package.json, but index_m.html is missing!', ).to.be.true; } } - const licenseFileExists = fs.existsSync(thisDir + '/../LICENSE'); - const fileContentReadme = fs.readFileSync(thisDir + '/../README.md', 'utf8'); + const licenseFileExists = fs.existsSync(`${thisDir}/../LICENSE`); + const fileContentReadme = fs.readFileSync(`${thisDir}/../README.md`, 'utf8'); if (fileContentReadme.indexOf('## Changelog') === -1) { console.log('Warning: The README.md should have a section ## Changelog'); console.log(); } expect( licenseFileExists || fileContentReadme.includes('## License'), - 'A LICENSE must exist as LICENSE file or as part of the README.md' + 'A LICENSE must exist as LICENSE file or as part of the README.md', ).to.be.true; if (!licenseFileExists) { console.log('Warning: The License should also exist as LICENSE file'); diff --git a/packages/controller/test/testStates.ts b/packages/controller/test/testStates.ts index b1d37f2921..b702ad906c 100644 --- a/packages/controller/test/testStates.ts +++ b/packages/controller/test/testStates.ts @@ -10,21 +10,21 @@ let states: StateRedisClient | null = null; let onStatesChanged: ioBroker.StateChangeHandler | null = null; import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); const dataDir = path.join(thisDir, '..', 'tmp', 'data'); function cleanDbs(): void { - if (fs.existsSync(dataDir + '/objects.json')) { - fs.unlinkSync(dataDir + '/objects.json'); + if (fs.existsSync(`${dataDir}/objects.json`)) { + fs.unlinkSync(`${dataDir}/objects.json`); } - if (fs.existsSync(dataDir + '/objects.json.bak')) { - fs.unlinkSync(dataDir + '/objects.json.bak'); + if (fs.existsSync(`${dataDir}/objects.json.bak`)) { + fs.unlinkSync(`${dataDir}/objects.json.bak`); } - if (fs.existsSync(dataDir + '/states.json')) { - fs.unlinkSync(dataDir + '/states.json'); + if (fs.existsSync(`${dataDir}/states.json`)) { + fs.unlinkSync(`${dataDir}/states.json`); } - if (fs.existsSync(dataDir + '/states.json.bak')) { - fs.unlinkSync(dataDir + '/states.json.bak'); + if (fs.existsSync(`${dataDir}/states.json.bak`)) { + fs.unlinkSync(`${dataDir}/states.json.bak`); } } @@ -36,15 +36,15 @@ describe('States: Test states in File-Redis', function () { const { objects: _objects, states: _states } = await startController({ objects: { dataDir: dataDir, - onChange: (id: string, _obj: ioBroker.AnyObject) => console.log('object changed. ' + id) + onChange: (id: string, _obj: ioBroker.AnyObject) => console.log(`object changed. ${id}`), }, states: { dataDir: dataDir, onChange: (id: string, state: ioBroker.State) => { - console.log('state changed. ' + id); + console.log(`state changed. ${id}`); onStatesChanged && onStatesChanged(id, state); - } - } + }, + }, }); objects = _objects; diff --git a/packages/controller/test/testStatesRedis.ts b/packages/controller/test/testStatesRedis.ts index 053fec6e40..bb5d922fef 100644 --- a/packages/controller/test/testStatesRedis.ts +++ b/packages/controller/test/testStatesRedis.ts @@ -9,21 +9,21 @@ let states: StateRedisClient | null = null; let onStatesChanged: ioBroker.StateChangeHandler | null = null; import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); const dataDir = path.join(thisDir, '..', 'tmp', 'data'); function cleanDbs(): void { - if (fs.existsSync(dataDir + '/objects.json')) { - fs.unlinkSync(dataDir + '/objects.json'); + if (fs.existsSync(`${dataDir}/objects.json`)) { + fs.unlinkSync(`${dataDir}/objects.json`); } - if (fs.existsSync(dataDir + '/objects.json.bak')) { - fs.unlinkSync(dataDir + '/objects.json.bak'); + if (fs.existsSync(`${dataDir}/objects.json.bak`)) { + fs.unlinkSync(`${dataDir}/objects.json.bak`); } - if (fs.existsSync(dataDir + '/states.json')) { - fs.unlinkSync(dataDir + '/states.json'); + if (fs.existsSync(`${dataDir}/states.json`)) { + fs.unlinkSync(`${dataDir}/states.json`); } - if (fs.existsSync(dataDir + '/states.json.bak')) { - fs.unlinkSync(dataDir + '/states.json.bak'); + if (fs.existsSync(`${dataDir}/states.json.bak`)) { + fs.unlinkSync(`${dataDir}/states.json.bak`); } } @@ -35,19 +35,19 @@ describe('States-Redis: Test states in Redis', function () { const { objects: _objects, states: _states } = await startController({ objects: { dataDir: dataDir, - onChange: (id: string, _obj: ioBroker.AnyObject) => console.log('object changed. ' + id) + onChange: (id: string, _obj: ioBroker.AnyObject) => console.log(`object changed. ${id}`), }, states: { type: 'redis', host: '127.0.0.1', port: 6379, onChange: (id: string, state: ioBroker.State) => { - console.log('Redis-state changed. ' + id); + console.log(`Redis-state changed. ${id}`); if (onStatesChanged) { onStatesChanged(id, state); } - } - } + }, + }, }); objects = _objects; diff --git a/packages/controller/test/testTools.ts b/packages/controller/test/testTools.ts index c06a4be976..1b4dff0379 100644 --- a/packages/controller/test/testTools.ts +++ b/packages/controller/test/testTools.ts @@ -9,7 +9,7 @@ describe('test tools.js helpers', () => { { input: 'ⴃ', expected: 'ⴃ' }, // Georgian Small Letter Don (is a lowercase letter) { input: 'Ϣ', expected: 'Ϣ' }, // Coptic Capital Letter Shei (is a uppercase letter) { input: 'ok﹏﹏ok', expected: 'ok_ok' }, // multiple disallowed characters are replaced with one "_" - { input: 'Th1s-IS_0.k4y', expected: 'Th1s-IS_0.k4y' } + { input: 'Th1s-IS_0.k4y', expected: 'Th1s-IS_0.k4y' }, ]; for (const { input, expected } of tests) { expect(input.replace(FORBIDDEN_CHARS, '_')).to.equal(expected); diff --git a/packages/controller/test/tsconfig.json b/packages/controller/test/tsconfig.json deleted file mode 100644 index 8b4ff64231..0000000000 --- a/packages/controller/test/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../tsconfig.json" -} \ No newline at end of file diff --git a/packages/db-base/src/lib/inMemFileDB.ts b/packages/db-base/src/lib/inMemFileDB.ts index ba65319428..38ecbc7afd 100644 --- a/packages/db-base/src/lib/inMemFileDB.ts +++ b/packages/db-base/src/lib/inMemFileDB.ts @@ -134,7 +134,7 @@ export class InMemoryFileDB { files: 24, // minimum number of files hours: 48, // hours period: 120, // minutes - path: '' // use default path + path: '', // use default path }; this.dataDir = this.settings.connection.dataDir || tools.getDefaultDataDir(); @@ -159,10 +159,10 @@ export class InMemoryFileDB { this.initBackupDir(); } catch (e) { this.log.error( - `Database backups are disabled, because backup directory could not be initialized: ${e.message}` + `Database backups are disabled, because backup directory could not be initialized: ${e.message}`, ); this.log.error( - 'This leads to an increased risk of data loss, please check that the configured backup directory is available and restart the controller' + 'This leads to an increased risk of data loss, please check that the configured backup directory is available and restart the controller', ); this.settings.backup.disabled = true; } @@ -205,7 +205,7 @@ export class InMemoryFileDB { await fs.readJSON(`${datasetName}.bak`); } catch (e) { this.log.info( - `${this.namespace} Rewrite bak file, because error on verify ${datasetName}.bak: ${e.message}` + `${this.namespace} Rewrite bak file, because error on verify ${datasetName}.bak: ${e.message}`, ); try { const jsonString = JSON.stringify(ret); @@ -227,14 +227,14 @@ export class InMemoryFileDB { await fs.move(datasetName, `${datasetName}.broken`, { overwrite: true }); } catch (e) { this.log.error( - `${this.namespace} Cannot copy the broken file ${datasetName} to ${datasetName}.broken ${e.message}` + `${this.namespace} Cannot copy the broken file ${datasetName} to ${datasetName}.broken ${e.message}`, ); } try { await fs.writeFile(datasetName, JSON.stringify(ret)); } catch (e) { this.log.error( - `${this.namespace} Cannot restore backup file as new main ${datasetName}: ${e.message}` + `${this.namespace} Cannot restore backup file as new main ${datasetName}: ${e.message}`, ); } } @@ -243,10 +243,10 @@ export class InMemoryFileDB { } } catch (err) { this.log.error( - `${this.namespace} Cannot load ${datasetName}.bak: ${err.message}. Continue with empty dataset!` + `${this.namespace} Cannot load ${datasetName}.bak: ${err.message}. Continue with empty dataset!`, ); this.log.error( - `${this.namespace} If this is no Migration or initial start please restore the last backup from ${this.backupDir}` + `${this.namespace} If this is no Migration or initial start please restore the last backup from ${this.backupDir}`, ); } } @@ -265,7 +265,7 @@ export class InMemoryFileDB { const maxTimeoutMinutes = Math.floor((2 ** 31 - 1) / 60000); if (this.settings.backup.period > maxTimeoutMinutes) { this.log.warn( - `${this.namespace} Configured backup period ${this.settings.backup.period} is larger than the supported maximum of ${maxTimeoutMinutes} minutes. Defaulting to 120 minutes.` + `${this.namespace} Configured backup period ${this.settings.backup.period} is larger than the supported maximum of ${maxTimeoutMinutes} minutes. Defaulting to 120 minutes.`, ); this.settings.backup.period = 120; } @@ -292,7 +292,7 @@ export class InMemoryFileDB { type: string, pattern: string | string[], options: any, - cb?: () => void + cb?: () => void, ): void; handleSubscribe( @@ -300,7 +300,7 @@ export class InMemoryFileDB { type: string, pattern: string | string[], options: any, - cb?: () => void + cb?: () => void, ): void { if (typeof options === 'function') { cb = options; @@ -332,7 +332,7 @@ export class InMemoryFileDB { client: SubscriptionClient, type: string, pattern: string | string[], - cb?: () => void + cb?: () => void, ): void | Promise { const s = client?._subscribe?.[type]; if (s) { @@ -365,7 +365,7 @@ export class InMemoryFileDB { files.sort(); const limit = Date.now() - this.settings.backup.hours * 3600000; - files = files.filter(f => f.endsWith(baseFilename + '.gz')); + files = files.filter(f => f.endsWith(`${baseFilename}.gz`)); while (files.length > this.settings.backup.files) { const file = files.shift(); @@ -379,7 +379,7 @@ export class InMemoryFileDB { fs.unlinkSync(path.join(this.backupDir, file)); } catch (e) { this.log.error( - `${this.namespace} Cannot delete file "${path.join(this.backupDir, file)}: ${e.message}` + `${this.namespace} Cannot delete file "${path.join(this.backupDir, file)}: ${e.message}`, ); } } @@ -389,24 +389,24 @@ export class InMemoryFileDB { getTimeStr(date: number): string { const dateObj = new Date(date); - let text = dateObj.getFullYear().toString() + '-'; + let text = `${dateObj.getFullYear().toString()}-`; let v = dateObj.getMonth() + 1; if (v < 10) { text += '0'; } - text += v.toString() + '-'; + text += `${v.toString()}-`; v = dateObj.getDate(); if (v < 10) { text += '0'; } - text += v.toString() + '_'; + text += `${v.toString()}_`; v = dateObj.getHours(); if (v < 10) { text += '0'; } - text += v.toString() + '-'; + text += `${v.toString()}-`; v = dateObj.getMinutes(); if (v < 10) { @@ -471,7 +471,7 @@ export class InMemoryFileDB { await fs.move(`${this.datasetName}.new`, this.datasetName, { overwrite: true }); } catch (e) { this.log.error( - `${this.namespace} Cannot move ${this.datasetName}.new to ${this.datasetName}: ${e.message}. Try direct write as fallback` + `${this.namespace} Cannot move ${this.datasetName}.new to ${this.datasetName}: ${e.message}. Try direct write as fallback`, ); try { await fs.writeFile(this.datasetName, jsonString); @@ -507,7 +507,7 @@ export class InMemoryFileDB { this.lastSave = now; const backFileName = path.join( this.backupDir, - this.getTimeStr(now) + '_' + this.settings.fileDB.fileName + '.gz' + `${this.getTimeStr(now)}_${this.settings.fileDB.fileName}.gz`, ); try { diff --git a/packages/db-base/src/lib/redisHandler.ts b/packages/db-base/src/lib/redisHandler.ts index d0bef6d0b2..9daa36971d 100644 --- a/packages/db-base/src/lib/redisHandler.ts +++ b/packages/db-base/src/lib/redisHandler.ts @@ -123,7 +123,7 @@ export class RedisHandler extends EventEmitter { .replace(/[\r\n]+/g, '') .substring(0, 100)} -- ${data.length} bytes` : data.toString().replace(/[\r\n]+/g, '') - }` + }`, ); } this.resp.write(data); @@ -173,7 +173,7 @@ export class RedisHandler extends EventEmitter { JSON.stringify(data).length > 1024 ? `${JSON.stringify(data).substring(0, 100)} -- ${JSON.stringify(data).length} bytes` : JSON.stringify(data) - }` + }`, ); } @@ -243,7 +243,7 @@ export class RedisHandler extends EventEmitter { response.data.length > 1024 ? `${data.length} bytes` : response.data.toString().replace(/[\r\n]+/g, '') - }` + }`, ); } @@ -488,7 +488,7 @@ export class RedisHandler extends EventEmitter { responseIds: [], execCalled: false, responseCount: 0, - responseMap: new Map() + responseMap: new Map(), }); } @@ -524,7 +524,7 @@ export class RedisHandler extends EventEmitter { this._sendQueued( multiObj.execId, - Buffer.concat([OK_STR_BUF, ...queuedStrArr, Resp.encodeArray(Array.from(multiObj.responseMap.values()))]) + Buffer.concat([OK_STR_BUF, ...queuedStrArr, Resp.encodeArray(Array.from(multiObj.responseMap.values()))]), ); } diff --git a/packages/db-objects-file/src/lib/objects/objectsInMemFileDB.js b/packages/db-objects-file/src/lib/objects/objectsInMemFileDB.js index 8062070c3b..e51b4f657d 100644 --- a/packages/db-objects-file/src/lib/objects/objectsInMemFileDB.js +++ b/packages/db-objects-file/src/lib/objects/objectsInMemFileDB.js @@ -17,13 +17,13 @@ import deepClone from 'deep-clone'; /** * This class inherits InMemoryFileDB class and adds all relevant logic for objects * including the available methods for use by js-controller directly - **/ + */ export class ObjectsInMemoryFileDB extends InMemoryFileDB { constructor(settings) { settings = settings || {}; settings.fileDB = settings.fileDB || { fileName: 'objects.json', - backupDirName: 'backup-objects' + backupDirName: 'backup-objects', }; super(settings); @@ -34,11 +34,9 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { } this.META_ID = '**META**'; - /** @type {Record} */ this.fileOptions = {}; this.files = {}; this.writeTimer = null; - /** @type {string[]} */ this.writeIds = []; this.preserveSettings = ['custom']; this.defaultNewAcl = this.settings.defaultNewAcl || null; @@ -162,7 +160,7 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { let results = []; const list = fs.readdirSync(dir); list.forEach(file => { - file = dir + '/' + file; + file = `${dir}/${file}`; const stat = fs.statSync(file); if (stat && stat.isDirectory()) { /* Recurse into a subdirectory */ @@ -183,7 +181,7 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { if (!fs.existsSync(this.objectsDir)) { return { numberSuccess: resSynced, - notifications: resNotifies + notifications: resNotifies, }; } const baseDirs = fs.readdirSync(this.objectsDir); @@ -202,7 +200,7 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { } if (!metaIds.includes(dir)) { resNotifies.push( - `Ignoring Directory "${dir}" because officially not created as meta object. Please remove directory!` + `Ignoring Directory "${dir}" because officially not created as meta object. Please remove directory!`, ); return; } @@ -231,11 +229,11 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { (this.defaultNewAcl && this.defaultNewAcl.file) || utils.CONSTS.ACCESS_USER_RW | utils.CONSTS.ACCESS_GROUP_READ | - utils.CONSTS.ACCESS_EVERY_READ // 0x644 + utils.CONSTS.ACCESS_EVERY_READ, // 0x644 }, mimeType: _mimeType, binary: isBinary, - modifiedAt: fileStat.mtimeMs + modifiedAt: fileStat.mtimeMs, }; dirSynced++; } @@ -246,7 +244,7 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { }); return { numberSuccess: resSynced, - notifications: resNotifies + notifications: resNotifies, }; } @@ -278,10 +276,10 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { } } catch (e) { this.log.error( - `${this.namespace} Cannot create directories: ${path.join(this.objectsDir, id)}: ${e.message}` + `${this.namespace} Cannot create directories: ${path.join(this.objectsDir, id)}: ${e.message}`, ); this.log.error( - `${this.namespace} Check the permissions! Or run installation fixer or "iobroker fix" command!` + `${this.namespace} Check the permissions! Or run installation fixer or "iobroker fix" command!`, ); throw e; } @@ -301,7 +299,7 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { permissions: options.mode || (this.defaultNewAcl && this.defaultNewAcl.file) || - utils.CONSTS.ACCESS_USER_RW | utils.CONSTS.ACCESS_GROUP_READ | utils.CONSTS.ACCESS_EVERY_READ // 0x644 + utils.CONSTS.ACCESS_USER_RW | utils.CONSTS.ACCESS_GROUP_READ | utils.CONSTS.ACCESS_EVERY_READ, // 0x644 }; this.fileOptions[id][name].mimeType = options.mimeType || _mimeType; @@ -318,7 +316,7 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { // Store file fs.writeFileSync(path.join(this.objectsDir, id, name), data, { flag: 'w', - encoding: isBinary ? 'binary' : 'utf8' + encoding: isBinary ? 'binary' : 'utf8', }); if (isBinary) { @@ -332,7 +330,7 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { this._saveFileSettings(id); } catch (e) { this.log.error( - `${this.namespace} Cannot write files: ${path.join(this.objectsDir, id, name)}: ${e.message}` + `${this.namespace} Cannot write files: ${path.join(this.objectsDir, id, name)}: ${e.message}`, ); throw e; } @@ -344,7 +342,7 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { this.publishAll('files', `${id}$%$${name}`, size); }, name, - data.byteLength + data.byteLength, ); } @@ -378,8 +376,8 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { (this.defaultNewAcl && this.defaultNewAcl.file.permissions) || utils.CONSTS.ACCESS_USER_ALL | utils.CONSTS.ACCESS_GROUP_ALL | - utils.CONSTS.ACCESS_EVERY_ALL // 777 - } + utils.CONSTS.ACCESS_EVERY_ALL, // 777 + }, }; if (typeof this.fileOptions[id][name] !== 'object') { this.fileOptions[id][name] = { @@ -394,8 +392,8 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { (this.defaultNewAcl && this.defaultNewAcl.file.permissions) || utils.CONSTS.ACCESS_USER_ALL | utils.CONSTS.ACCESS_GROUP_ALL | - utils.CONSTS.ACCESS_EVERY_ALL // 777 - } + utils.CONSTS.ACCESS_EVERY_ALL, // 777 + }, }; } @@ -430,7 +428,7 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { (this.defaultNewAcl && this.defaultNewAcl.ownerGroup) || utils.CONSTS.SYSTEM_ADMIN_GROUP, permissions: (this.defaultNewAcl && this.defaultNewAcl.file.permissions) || - utils.CONSTS.ACCESS_USER_ALL | utils.CONSTS.ACCESS_GROUP_ALL | utils.CONSTS.ACCESS_EVERY_RW // 776 + utils.CONSTS.ACCESS_USER_ALL | utils.CONSTS.ACCESS_GROUP_ALL | utils.CONSTS.ACCESS_EVERY_RW, // 776 }; } @@ -442,7 +440,7 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { } return { fileContent: this.files[id][name], - fileMime: this.fileOptions[id][name].mimeType + fileMime: this.fileOptions[id][name].mimeType, }; } } catch (e) { @@ -455,12 +453,11 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { /** * Check if given object exists * - * @param {string} id id of the object - * @param {object} [_options] optional user context - * @return {boolean} + * @param id id of the object + * @returns if the object exists */ // needed by server - _objectExists(id, _options) { + _objectExists(id) { if (!id || typeof id !== 'string') { throw new Error(`invalid id ${JSON.stringify(id)}`); } @@ -477,9 +474,9 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { /** * Check if given file exists * - * @param {string} id id of the namespace - * @param {string} [name] name of the file - * @returns {boolean} + * @param id id of the namespace + * @param [name] name of the file + * @returns */ // needed by server _fileExists(id, name) { @@ -504,9 +501,9 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { /** * Check if given directory exists * - * @param {string} id id of the namespace - * @param {string} [name] name of the directory - * @returns {boolean} + * @param id id of the namespace + * @param [name] name of the directory + * @returns */ // special functionality only for Server (used together with SyncFileDirectory) dirExists(id, name) { @@ -542,7 +539,7 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { if (stat.isDirectory()) { // read all entries and delete every one - fs.readdirSync(location).forEach(dir => this._unlink(id, name + '/' + dir)); + fs.readdirSync(location).forEach(dir => this._unlink(id, `${name}/${dir}`)); this.log.debug(`Delete directory ${path.join(id, name)}`); try { @@ -559,7 +556,7 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { delete this.files[id]; } } else { - this.log.debug('Delete file ' + path.join(id, name)); + this.log.debug(`Delete file ${path.join(id, name)}`); try { fs.removeSync(location); } catch (e) { @@ -582,12 +579,12 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { (id, name) => { // publish event in states this.log.silly( - `${this.namespace} memory publish ${id} ${JSON.stringify({ name, file: true, size: null })}` + `${this.namespace} memory publish ${id} ${JSON.stringify({ name, file: true, size: null })}`, ); this.publishAll('files', `${id}$%$${name}`, null); }, id, - name + name, ); } } @@ -621,7 +618,6 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { const len = name ? name.length : 0; for (const f of Object.keys(this.fileOptions[id])) { if (!name || f.substring(0, len) === name) { - /** @type {string|string[]} */ let rest = f.substring(len); rest = rest.split('/', 2); if (rest[0] && _files.indexOf(rest[0]) === -1) { @@ -670,7 +666,7 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { (this.defaultNewAcl && this.defaultNewAcl.file.permissions) || utils.CONSTS.ACCESS_USER_RW | utils.CONSTS.ACCESS_GROUP_READ | - utils.CONSTS.ACCESS_EVERY_READ + utils.CONSTS.ACCESS_EVERY_READ, }; // if filter for user @@ -739,13 +735,13 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { : undefined, createdAt: this.fileOptions[id][name + file] ? this.fileOptions[id][name + file].createdAt - : undefined + : undefined, }); } catch (e) { this.log.error( `${this.namespace} Cannot read permissions of ${path.join(this.objectsDir, id, name, file)}: ${ e.message - }` + }`, ); } } @@ -868,8 +864,8 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { /** * Get value of given meta id * - * @param {string} id - * @returns {*} + * @param id + * @returns */ getMeta(id) { const meta = this._ensureMetaDict(); @@ -879,8 +875,8 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { /** * Sets given value to id in metaNamespace * - * @param {string} id - * @param {string} value + * @param id + * @param value */ setMeta(id, value) { const meta = this._ensureMetaDict(); @@ -916,8 +912,7 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { /** * Delete the given object from the dataset * - * @param {string} id unique id of the object - * @private + * @param id unique id of the object */ _delObject(id) { const obj = this.dataset[id]; @@ -947,15 +942,15 @@ export class ObjectsInMemoryFileDB extends InMemoryFileDB { // internal functionality _applyView(func, params) { const result = { - rows: [] + rows: [], }; - // eslint-disable-next-line no-unused-vars + // eslint-disable-next-line @typescript-eslint/no-unused-vars function _emit_(id, obj) { result.rows.push({ id: id, value: obj }); } - const f = eval('(' + func.map.replace(/emit/g, '_emit_') + ')'); + const f = eval(`(${func.map.replace(/emit/g, '_emit_')})`); for (const [id, obj] of Object.entries(this.dataset)) { if (params) { diff --git a/packages/db-objects-file/src/lib/objects/objectsInMemServerClass.js b/packages/db-objects-file/src/lib/objects/objectsInMemServerClass.js index e276314d47..6192afce04 100644 --- a/packages/db-objects-file/src/lib/objects/objectsInMemServerClass.js +++ b/packages/db-objects-file/src/lib/objects/objectsInMemServerClass.js @@ -22,7 +22,7 @@ export class ObjectsInMemoryServerClass extends ObjectsInRedisClient { hostname: settings.hostname, connected: () => { this.connectDb(); // now that server is connected also connect client - } + }, }; this.objectsServer = new ObjectsInMemoryServer(serverSettings); } diff --git a/packages/db-objects-file/src/lib/objects/objectsInMemServerRedis.js b/packages/db-objects-file/src/lib/objects/objectsInMemServerRedis.js index 7681133e75..0145a3c1b7 100644 --- a/packages/db-objects-file/src/lib/objects/objectsInMemServerRedis.js +++ b/packages/db-objects-file/src/lib/objects/objectsInMemServerRedis.js @@ -43,22 +43,23 @@ import { ObjectsInMemoryFileDB } from './objectsInMemFileDB.js'; /** * This class inherits statesInMemoryFileDB class and adds redis communication layer * to access the methods via redis protocol - **/ + */ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { /** * Constructor + * * @param settings State and InMem-DB settings */ constructor(settings) { super(settings); this.serverConnections = {}; - this.namespaceObjects = - (this.settings.redisNamespace || (settings.connection && settings.connection.redisNamespace) || 'cfg') + - '.'; - this.namespaceFile = this.namespaceObjects + 'f.'; - this.namespaceObj = this.namespaceObjects + 'o.'; - this.namespaceSet = this.namespaceObjects + 's.'; + this.namespaceObjects = `${ + this.settings.redisNamespace || (settings.connection && settings.connection.redisNamespace) || 'cfg' + }.`; + this.namespaceFile = `${this.namespaceObjects}f.`; + this.namespaceObj = `${this.namespaceObjects}o.`; + this.namespaceSet = `${this.namespaceObjects}s.`; this.namespaceSetLen = this.namespaceSet.length; // this.namespaceObjectsLen = this.namespaceObjects.length; @@ -78,11 +79,9 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { }) .then(() => { this.log.debug( - this.namespace + - ' ' + - (settings.secure ? 'Secure ' : '') + - ' Redis inMem-objects listening on port ' + - (settings.port || 9001) + `${this.namespace} ${settings.secure ? 'Secure ' : ''} Redis inMem-objects listening on port ${ + settings.port || 9001 + }`, ); if (typeof this.settings.connected === 'function') { @@ -91,7 +90,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { }) .catch(e => { this.log.error( - `${this.namespace} Cannot start inMem-objects on port ${settings.port || 9001}: ${e.message}` + `${this.namespace} Cannot start inMem-objects on port ${settings.port || 9001}: ${e.message}`, ); process.exit(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB); }); @@ -99,10 +98,10 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { /** * Separate Namespace from ID and return both + * * @param idWithNamespace ID or Array of IDs containing a redis namespace and the real ID - * @returns {{namespace: (string); id: string; name?: string; isMeta?: boolean}} Object with namespace and the + * @returns Object with namespace and the * ID/Array of IDs without the namespace - * @private */ _normalizeId(idWithNamespace) { let ns = this.namespaceObjects; @@ -164,11 +163,12 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { /** * Publish a subscribed value to one of the redis connections in redis format + * * @param client Instance of RedisHandler * @param type Type of subscribed key * @param id Subscribed ID * @param obj Object to publish - * @returns {number} Publish counter 0 or 1 depending on if send out or not + * @returns Publish counter 0 or 1 depending on if send out or not */ publishToClients(client, type, id, obj) { if (!client._subscribe || !client._subscribe[type]) { @@ -204,10 +204,11 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { /** * Generate ID for a File + * * @param id ID of the File * @param name Name of the file * @param isMeta generate a META ID or a Data ID? - * @returns {string} File-ID + * @returns File-ID */ getFileId(id, name, isMeta) { // e.g. ekey.admin and admin/ekey.png @@ -220,13 +221,13 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { } } - return this.namespaceFile + id + '$%$' + name + (isMeta !== undefined ? (isMeta ? '$%$meta' : '$%$data') : ''); + return `${this.namespaceFile + id}$%$${name}${isMeta !== undefined ? (isMeta ? '$%$meta' : '$%$data') : ''}`; } /** * Register all event listeners for Handler and implement the relevant logic + * * @param handler RedisHandler instance - * @private */ _socketEvents(handler) { let connectionName = null; @@ -250,7 +251,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { // Handle Redis "QUIT" request handler.on('quit', (_data, responseId) => { - this.log.silly(namespaceLog + ' Redis QUIT received, close connection'); + this.log.silly(`${namespaceLog} Redis QUIT received, close connection`); handler.sendString(responseId, 'OK'); handler.close(); }); @@ -283,8 +284,8 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { if (this.settings.connection.enhancedLogging) { this.log.silly( `${namespaceLog} Register View LUA Script: ${scriptChecksum} = ${JSON.stringify( - this.knownScripts[scriptChecksum] - )}` + this.knownScripts[scriptChecksum], + )}`, ); } handler.sendBulk(responseId, scriptChecksum); @@ -293,8 +294,8 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { if (this.settings.connection.enhancedLogging) { this.log.silly( `${namespaceLog} Register Func LUA Script: ${scriptChecksum} = ${JSON.stringify( - this.knownScripts[scriptChecksum] - )}` + this.knownScripts[scriptChecksum], + )}`, ); } handler.sendBulk(responseId, scriptChecksum); @@ -304,8 +305,8 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { if (this.settings.connection.enhancedLogging) { this.log.silly( `${namespaceLog} Register Func LUA Script: ${scriptChecksum} = ${JSON.stringify( - this.knownScripts[scriptChecksum] - )}` + this.knownScripts[scriptChecksum], + )}`, ); } handler.sendBulk(responseId, scriptChecksum); @@ -334,7 +335,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { } if (this.settings.connection.enhancedLogging) { this.log.silly( - `${namespaceLog} Script transformed into getObjectView: design=${scriptDesign}, search=${scriptSearch}` + `${namespaceLog} Script transformed into getObjectView: design=${scriptDesign}, search=${scriptSearch}`, ); } let objs; @@ -342,12 +343,12 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { objs = this._getObjectView(scriptDesign, scriptSearch, { startkey: data[3], endkey: data[4], - include_docs: true + include_docs: true, }); } catch (err) { return void handler.sendError( responseId, - new Error(`_getObjectView Error for ${scriptDesign}/${scriptSearch}: ${err.message}`) + new Error(`_getObjectView Error for ${scriptDesign}/${scriptSearch}: ${err.message}`), ); } @@ -362,7 +363,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { const objs = this._applyView(scriptFunc, { startkey: data[3], endkey: data[4], - include_docs: true + include_docs: true, }); const res = objs.rows.map(obj => JSON.stringify(this.dataset[obj.value._id || obj.id])); @@ -405,7 +406,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { if (namespace !== this.namespaceObj) { keys.push(null); this.log.warn( - `${namespaceLog} Got MGET request for non Object-ID in Objects-ID chunk for ${namespace} / ${dataId}` + `${namespaceLog} Got MGET request for non Object-ID in Objects-ID chunk for ${namespace} / ${dataId}`, ); return; } @@ -415,7 +416,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { try { result = this._getObjects(keys); } catch (err) { - return void handler.sendError(responseId, new Error('ERROR _getObjects: ' + err.message)); + return void handler.sendError(responseId, new Error(`ERROR _getObjects: ${err.message}`)); } result = result.map(el => (el ? JSON.stringify(el) : null)); handler.sendArray(responseId, result); @@ -428,7 +429,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { if (namespace !== this.namespaceFile) { response.push(null); this.log.warn( - `${namespaceLog} Got MGET request for non File ID in File-ID chunk for ${dataId}` + `${namespaceLog} Got MGET request for non File ID in File-ID chunk for ${dataId}`, ); return; } @@ -439,12 +440,11 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { } const obj = this._clone(this.fileOptions[id][name]); try { - // @ts-ignore obj.stats = fs.statSync(path.join(this.objectsDir, id, name)); } catch (err) { if (!name.endsWith('/_data.json')) { this.log.warn( - `${namespaceLog} Got MGET request for non existing file ${dataId}, err: ${err.message}` + `${namespaceLog} Got MGET request for non existing file ${dataId}, err: ${err.message}`, ); } response.push(null); @@ -460,7 +460,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`MGET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`MGET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -491,8 +491,8 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { JSON.stringify({ file: name, stats: {}, - isDir: true - }) + isDir: true, + }), ); } this._loadFileSettings(id); @@ -514,8 +514,8 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { (this.defaultNewAcl && this.defaultNewAcl.file.permissions) || utils.CONSTS.ACCESS_USER_ALL | utils.CONSTS.ACCESS_GROUP_ALL | - utils.CONSTS.ACCESS_EVERY_ALL // 777 - } + utils.CONSTS.ACCESS_EVERY_ALL, // 777 + }, }; } obj.stats = stats; @@ -536,7 +536,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { // if its an invalid object, stringify it and log warning fileData = JSON.stringify(fileData); this.log.warn( - `${namespaceLog} Data of "${id}/${name}" has invalid structure at file data request: ${fileData}` + `${namespaceLog} Data of "${id}/${name}" has invalid structure at file data request: ${fileData}`, ); } handler.sendBufBulk(responseId, Buffer.from(fileData)); @@ -557,7 +557,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`GET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`GET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -588,13 +588,13 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { this.fileOptions[id][name] = JSON.parse(data[1].toString('utf-8')); fs.writeFileSync( path.join(this.objectsDir, id, '_data.json'), - JSON.stringify(this.fileOptions[id]) + JSON.stringify(this.fileOptions[id]), ); } } catch (err) { return void handler.sendError( responseId, - new Error(`ERROR writeFile-Meta id=${id}: ${err.message}`) + new Error(`ERROR writeFile-Meta id=${id}: ${err.message}`), ); } handler.sendString(responseId, 'OK'); @@ -605,7 +605,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { } catch (err) { return void handler.sendError( responseId, - new Error(`ERROR writeFile id=${id}: ${err.message}`) + new Error(`ERROR writeFile id=${id}: ${err.message}`), ); } handler.sendString(responseId, 'OK'); @@ -616,7 +616,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`SET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`SET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -630,7 +630,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { if (oldDetails.id !== newDetails.id) { return void handler.sendError( responseId, - new Error('ERROR renameObject: id needs to stay the same') + new Error('ERROR renameObject: id needs to stay the same'), ); } @@ -649,7 +649,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`RENAME-UNSUPPORTED for namespace ${oldDetails.namespace}: Data=${JSON.stringify(data)}`) + new Error(`RENAME-UNSUPPORTED for namespace ${oldDetails.namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -682,7 +682,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`DEL-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`DEL-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -775,7 +775,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`PSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`PSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -793,7 +793,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`PUNSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`PUNSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -818,7 +818,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { // we ignore these type of commands for now, irrelevant handler.sendString(responseId, 'OK'); } else { - handler.sendError(responseId, new Error('CONFIG-UNSUPPORTED for ' + JSON.stringify(data))); + handler.sendError(responseId, new Error(`CONFIG-UNSUPPORTED for ${JSON.stringify(data)}`)); } }); @@ -850,7 +850,8 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { /** * Return connected RedisHandlers/Connections - * @returns {{}|*} + * + * @returns */ getClients() { return this.serverConnections; @@ -886,10 +887,9 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { * Get keys matching pattern and send it to given responseId, for "SCAN" and "KEYS" - Objects and files supported * * @param handler RedisHandler instance - * @param {string} pattern - pattern without namespace prefix - * @param {number} responseId - Id where response will be sent to - * @param {boolean} isScan - if used by "SCAN" this flag should be true - * @private + * @param pattern - pattern without namespace prefix + * @param responseId - Id where response will be sent to + * @param isScan - if used by "SCAN" this flag should be true */ _handleScanOrKeys(handler, pattern, responseId, isScan = false) { const { id, namespace, name, isMeta } = this._normalizeId(pattern); @@ -921,8 +921,8 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { stats: {}, isDir: false, virtualFile: true, - notExists: true - } + notExists: true, + }, ]; } } catch (e) { @@ -959,42 +959,42 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`${isScan ? 'SCAN' : 'KEYS'}-UNSUPPORTED for namespace ${namespace}: Pattern=${pattern}`) + new Error(`${isScan ? 'SCAN' : 'KEYS'}-UNSUPPORTED for namespace ${namespace}: Pattern=${pattern}`), ); } } /** * Initialize RedisHandler for a new network connection + * * @param socket Network socket - * @private */ _initSocket(socket) { if (this.settings.connection.enhancedLogging) { - this.log.silly(this.namespace + ' Handling new Redis Objects connection'); + this.log.silly(`${this.namespace} Handling new Redis Objects connection`); } const options = { log: this.log, logScope: `${this.settings.namespace || ''} Objects`, handleAsBuffers: true, - enhancedLogging: this.settings.connection.enhancedLogging + enhancedLogging: this.settings.connection.enhancedLogging, }; const handler = new RedisHandler(socket, options); this._socketEvents(handler); - this.serverConnections[socket.remoteAddress + ':' + socket.remotePort] = handler; + this.serverConnections[`${socket.remoteAddress}:${socket.remotePort}`] = handler; socket.on('close', () => { - if (this.serverConnections[socket.remoteAddress + ':' + socket.remotePort]) { - delete this.serverConnections[socket.remoteAddress + ':' + socket.remotePort]; + if (this.serverConnections[`${socket.remoteAddress}:${socket.remotePort}`]) { + delete this.serverConnections[`${socket.remoteAddress}:${socket.remotePort}`]; } }); } /** * Initialize Redis Server + * * @param settings Settings object - * @private - * @return {Promise} + * @returns */ _initRedisServer(settings) { return new Promise((resolve, reject) => { @@ -1007,15 +1007,15 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryFileDB { this.log.info( `${this.namespace} ${settings.secure ? 'Secure ' : ''} Error inMem-objects listening on port ${ settings.port || 9001 - }: ${err}` - ) + }: ${err}`, + ), ); this.server.on('connection', socket => this._initSocket(socket)); this.server.listen( settings.port || 9001, settings.host === 'localhost' ? getLocalAddress() : settings.host ? settings.host : undefined, - () => resolve() + () => resolve(), ); } catch (err) { reject(err); diff --git a/packages/db-objects-jsonl/src/lib/objects/objectsInMemJsonlDB.js b/packages/db-objects-jsonl/src/lib/objects/objectsInMemJsonlDB.js index 0bef47d2ce..682377c5b2 100644 --- a/packages/db-objects-jsonl/src/lib/objects/objectsInMemJsonlDB.js +++ b/packages/db-objects-jsonl/src/lib/objects/objectsInMemJsonlDB.js @@ -16,11 +16,11 @@ import { tools } from '@iobroker/js-controller-common-db'; /** * Normalizes options for the JsonlDB - * @param {Record | undefined} conf The jsonlOptions options from iobroker.json - * @returns {import("@alcalzone/jsonl-db").JsonlDBOptions} + * + * @param conf The jsonlOptions options from iobroker.json + * @returns */ function normalizeJsonlOptions(conf = {}) { - /** @type {import("@alcalzone/jsonl-db").JsonlDBOptions} */ const ret = { autoCompress: { // Compress when the number of uncompressed entries has grown a lot @@ -28,12 +28,12 @@ function normalizeJsonlOptions(conf = {}) { sizeFactorMinimumSize: 25000, // Compress at least daily to avoid a huge file when DBs have few objects // but big objects are updated regularly (e.g. the repositories) - intervalMs: 1000 * 60 * 60 * 23 + intervalMs: 1000 * 60 * 60 * 23, }, ignoreReadErrors: true, throttleFS: { intervalMs: 60000, - maxBufferedCommands: 1000 + maxBufferedCommands: 1000, }, lockfile: { // 5 retries starting at 250ms add up to just above 2s, @@ -41,8 +41,8 @@ function normalizeJsonlOptions(conf = {}) { retries: 5, retryMinTimeoutMs: 250, // This makes sure the DB stays locked for maximum 2s even if the process crashes - staleMs: 2000 - } + staleMs: 2000, + }, }; // Be really careful what we allow here. Incorrect settings may cause problems in production. @@ -83,22 +83,21 @@ function normalizeJsonlOptions(conf = {}) { /** * This class inherits InMemoryFileDB class and adds all relevant logic for objects * including the available methods for use by js-controller directly - **/ + */ export class ObjectsInMemoryJsonlDB extends ObjectsInMemoryFileDB { constructor(settings) { settings = settings || {}; settings.fileDB = { fileName: 'objects.json', - backupDirName: 'backup-objects' + backupDirName: 'backup-objects', }; const jsonlOptions = normalizeJsonlOptions(settings.connection.jsonlOptions); settings.jsonlDB = { - fileName: 'objects.jsonl' + fileName: 'objects.jsonl', }; super(settings); - /** @type {JsonlDB} */ this._db = new JsonlDB(path.join(this.dataDir, settings.jsonlDB.fileName), jsonlOptions); } @@ -109,27 +108,43 @@ export class ObjectsInMemoryJsonlDB extends ObjectsInMemoryFileDB { // Create an object-like wrapper around the internal Map this.dataset = new Proxy(this._db, { - /** @param {any} prop */ + /** + * @param target + * @param prop + */ get(target, prop) { return target.get(prop); }, - /** @param {any} prop */ + /** + * @param target + * @param prop + */ has(target, prop) { return target.has(prop); }, - /** @param {any} prop */ + /** + * @param target + * @param prop + * @param value + */ set(target, prop, value) { target.set(prop, value); return true; }, - /** @param {any} prop */ + /** + * @param target + * @param prop + */ deleteProperty(target, prop) { return target.delete(prop); }, ownKeys(target) { return [...target.keys()]; }, - /** @param {any} prop */ + /** + * @param target + * @param prop + */ getOwnPropertyDescriptor(target, prop) { if (!target.has(prop)) { return undefined; @@ -138,9 +153,9 @@ export class ObjectsInMemoryJsonlDB extends ObjectsInMemoryFileDB { configurable: true, enumerable: true, writable: true, - value: target.get(prop) + value: target.get(prop), }; - } + }, }); if (this.settings.backup && this.settings.backup.period && !this.settings.backup.disabled) { @@ -152,13 +167,14 @@ export class ObjectsInMemoryJsonlDB extends ObjectsInMemoryFileDB { /** * Checks if an existing file DB should be migrated to JSONL - * @returns {Promise} true if the file DB was migrated. false if not. + * + * @returns true if the file DB was migrated. false if not. * If this returns true, the jsonl DB was opened and doesn't need to be opened again. */ async _maybeMigrateFileDB() { const jsonlFileName = path.join(this.dataDir, this.settings.jsonlDB.fileName); const jsonFileName = path.join(this.dataDir, this.settings.fileDB.fileName); - const bakFileName = path.join(this.dataDir, this.settings.fileDB.fileName + '.bak'); + const bakFileName = path.join(this.dataDir, `${this.settings.fileDB.fileName}.bak`); // Check the timestamps of each file, defaulting to 0 if they don't exist let jsonlTimeStamp = 0; @@ -190,7 +206,6 @@ export class ObjectsInMemoryJsonlDB extends ObjectsInMemoryFileDB { } // Figure out which file needs to be imported - /** @type {string} */ let importFilename; if (jsonTimeStamp > 0 && jsonTimeStamp >= bakTimeStamp && jsonTimeStamp >= jsonlTimeStamp) { importFilename = jsonFileName; @@ -236,7 +251,7 @@ export class ObjectsInMemoryJsonlDB extends ObjectsInMemoryFileDB { const tmpBackupFileName = path.join(os.tmpdir(), `${this.getTimeStr(now)}_${this.settings.jsonlDB.fileName}`); const backupFileName = path.join( this.backupDir, - `${this.getTimeStr(now)}_${this.settings.jsonlDB.fileName}.gz` + `${this.getTimeStr(now)}_${this.settings.jsonlDB.fileName}.gz`, ); if (!this._db.isOpen) { diff --git a/packages/db-objects-jsonl/src/lib/objects/objectsInMemServerClass.js b/packages/db-objects-jsonl/src/lib/objects/objectsInMemServerClass.js index e276314d47..6192afce04 100644 --- a/packages/db-objects-jsonl/src/lib/objects/objectsInMemServerClass.js +++ b/packages/db-objects-jsonl/src/lib/objects/objectsInMemServerClass.js @@ -22,7 +22,7 @@ export class ObjectsInMemoryServerClass extends ObjectsInRedisClient { hostname: settings.hostname, connected: () => { this.connectDb(); // now that server is connected also connect client - } + }, }; this.objectsServer = new ObjectsInMemoryServer(serverSettings); } diff --git a/packages/db-objects-jsonl/src/lib/objects/objectsInMemServerRedis.js b/packages/db-objects-jsonl/src/lib/objects/objectsInMemServerRedis.js index a1e5cbfcbc..571fb313a1 100644 --- a/packages/db-objects-jsonl/src/lib/objects/objectsInMemServerRedis.js +++ b/packages/db-objects-jsonl/src/lib/objects/objectsInMemServerRedis.js @@ -43,22 +43,23 @@ import { EXIT_CODES } from '@iobroker/js-controller-common-db'; /** * This class inherits statesInMemoryJsonlDB class and adds redis communication layer * to access the methods via redis protocol - **/ + */ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { /** * Constructor + * * @param settings State and InMem-DB settings */ constructor(settings) { super(settings); this.serverConnections = {}; - this.namespaceObjects = - (this.settings.redisNamespace || (settings.connection && settings.connection.redisNamespace) || 'cfg') + - '.'; - this.namespaceFile = this.namespaceObjects + 'f.'; - this.namespaceObj = this.namespaceObjects + 'o.'; - this.namespaceSet = this.namespaceObjects + 's.'; + this.namespaceObjects = `${ + this.settings.redisNamespace || (settings.connection && settings.connection.redisNamespace) || 'cfg' + }.`; + this.namespaceFile = `${this.namespaceObjects}f.`; + this.namespaceObj = `${this.namespaceObjects}o.`; + this.namespaceSet = `${this.namespaceObjects}s.`; this.namespaceSetLen = this.namespaceSet.length; // this.namespaceObjectsLen = this.namespaceObjects.length; @@ -78,11 +79,9 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { }) .then(() => { this.log.debug( - this.namespace + - ' ' + - (settings.secure ? 'Secure ' : '') + - ' Redis inMem-objects listening on port ' + - (settings.port || 9001) + `${this.namespace} ${settings.secure ? 'Secure ' : ''} Redis inMem-objects listening on port ${ + settings.port || 9001 + }`, ); if (typeof this.settings.connected === 'function') { @@ -91,7 +90,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { }) .catch(e => { this.log.error( - `${this.namespace} Cannot start inMem-objects on port ${settings.port || 9001}: ${e.message}` + `${this.namespace} Cannot start inMem-objects on port ${settings.port || 9001}: ${e.message}`, ); process.exit(EXIT_CODES.NO_CONNECTION_TO_OBJ_DB); }); @@ -99,10 +98,10 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { /** * Separate Namespace from ID and return both + * * @param idWithNamespace ID or Array of IDs containing a redis namespace and the real ID - * @returns {{namespace: (string); id: string; name?: string; isMeta?: boolean}} Object with namespace and the + * @returns Object with namespace and the * ID/Array of IDs without the namespace - * @private */ _normalizeId(idWithNamespace) { let ns = this.namespaceObjects; @@ -164,11 +163,12 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { /** * Publish a subscribed value to one of the redis connections in redis format + * * @param client Instance of RedisHandler * @param type Type of subscribed key * @param id Subscribed ID * @param obj Object to publish - * @returns {number} Publish counter 0 or 1 depending on if send out or not + * @returns Publish counter 0 or 1 depending on if send out or not */ publishToClients(client, type, id, obj) { if (!client._subscribe || !client._subscribe[type]) { @@ -204,10 +204,11 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { /** * Generate ID for a File + * * @param id ID of the File * @param name Name of the file * @param isMeta generate a META ID or a Data ID? - * @returns {string} File-ID + * @returns File-ID */ getFileId(id, name, isMeta) { // e.g. ekey.admin and admin/ekey.png @@ -220,13 +221,13 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { } } - return this.namespaceFile + id + '$%$' + name + (isMeta !== undefined ? (isMeta ? '$%$meta' : '$%$data') : ''); + return `${this.namespaceFile + id}$%$${name}${isMeta !== undefined ? (isMeta ? '$%$meta' : '$%$data') : ''}`; } /** * Register all event listeners for Handler and implement the relevant logic + * * @param handler RedisHandler instance - * @private */ _socketEvents(handler) { let connectionName = null; @@ -250,7 +251,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { // Handle Redis "QUIT" request handler.on('quit', (_data, responseId) => { - this.log.silly(namespaceLog + ' Redis QUIT received, close connection'); + this.log.silly(`${namespaceLog} Redis QUIT received, close connection`); handler.sendString(responseId, 'OK'); handler.close(); }); @@ -283,8 +284,8 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { if (this.settings.connection.enhancedLogging) { this.log.silly( `${namespaceLog} Register View LUA Script: ${scriptChecksum} = ${JSON.stringify( - this.knownScripts[scriptChecksum] - )}` + this.knownScripts[scriptChecksum], + )}`, ); } handler.sendBulk(responseId, scriptChecksum); @@ -293,8 +294,8 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { if (this.settings.connection.enhancedLogging) { this.log.silly( `${namespaceLog} Register Func LUA Script: ${scriptChecksum} = ${JSON.stringify( - this.knownScripts[scriptChecksum] - )}` + this.knownScripts[scriptChecksum], + )}`, ); } handler.sendBulk(responseId, scriptChecksum); @@ -304,8 +305,8 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { if (this.settings.connection.enhancedLogging) { this.log.silly( `${namespaceLog} Register Func LUA Script: ${scriptChecksum} = ${JSON.stringify( - this.knownScripts[scriptChecksum] - )}` + this.knownScripts[scriptChecksum], + )}`, ); } handler.sendBulk(responseId, scriptChecksum); @@ -334,7 +335,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { } if (this.settings.connection.enhancedLogging) { this.log.silly( - `${namespaceLog} Script transformed into getObjectView: design=${scriptDesign}, search=${scriptSearch}` + `${namespaceLog} Script transformed into getObjectView: design=${scriptDesign}, search=${scriptSearch}`, ); } let objs; @@ -342,12 +343,12 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { objs = this._getObjectView(scriptDesign, scriptSearch, { startkey: data[3], endkey: data[4], - include_docs: true + include_docs: true, }); } catch (err) { return void handler.sendError( responseId, - new Error(`_getObjectView Error for ${scriptDesign}/${scriptSearch}: ${err.message}`) + new Error(`_getObjectView Error for ${scriptDesign}/${scriptSearch}: ${err.message}`), ); } @@ -362,7 +363,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { const objs = this._applyView(scriptFunc, { startkey: data[3], endkey: data[4], - include_docs: true + include_docs: true, }); const res = objs.rows.map(obj => JSON.stringify(this.dataset[obj.value._id || obj.id])); @@ -405,7 +406,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { if (namespace !== this.namespaceObj) { keys.push(null); this.log.warn( - `${namespaceLog} Got MGET request for non Object-ID in Objects-ID chunk for ${namespace} / ${dataId}` + `${namespaceLog} Got MGET request for non Object-ID in Objects-ID chunk for ${namespace} / ${dataId}`, ); return; } @@ -415,7 +416,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { try { result = this._getObjects(keys); } catch (err) { - return void handler.sendError(responseId, new Error('ERROR _getObjects: ' + err.message)); + return void handler.sendError(responseId, new Error(`ERROR _getObjects: ${err.message}`)); } result = result.map(el => (el ? JSON.stringify(el) : null)); handler.sendArray(responseId, result); @@ -428,7 +429,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { if (namespace !== this.namespaceFile) { response.push(null); this.log.warn( - `${namespaceLog} Got MGET request for non File ID in File-ID chunk for ${dataId}` + `${namespaceLog} Got MGET request for non File ID in File-ID chunk for ${dataId}`, ); return; } @@ -439,12 +440,11 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { } const obj = this._clone(this.fileOptions[id][name]); try { - // @ts-ignore obj.stats = fs.statSync(path.join(this.objectsDir, id, name)); } catch (err) { if (!name.endsWith('/_data.json')) { this.log.warn( - `${namespaceLog} Got MGET request for non existing file ${dataId}, err: ${err.message}` + `${namespaceLog} Got MGET request for non existing file ${dataId}, err: ${err.message}`, ); } response.push(null); @@ -460,7 +460,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`MGET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`MGET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -491,8 +491,8 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { JSON.stringify({ file: name, stats: {}, - isDir: true - }) + isDir: true, + }), ); } this._loadFileSettings(id); @@ -514,8 +514,8 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { (this.defaultNewAcl && this.defaultNewAcl.file.permissions) || utils.CONSTS.ACCESS_USER_ALL | utils.CONSTS.ACCESS_GROUP_ALL | - utils.CONSTS.ACCESS_EVERY_ALL // 777 - } + utils.CONSTS.ACCESS_EVERY_ALL, // 777 + }, }; } obj.stats = stats; @@ -536,7 +536,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { // if its an invalid object, stringify it and log warning fileData = JSON.stringify(fileData); this.log.warn( - `${namespaceLog} Data of "${id}/${name}" has invalid structure at file data request: ${fileData}` + `${namespaceLog} Data of "${id}/${name}" has invalid structure at file data request: ${fileData}`, ); } handler.sendBufBulk(responseId, Buffer.from(fileData)); @@ -557,7 +557,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`GET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`GET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -588,13 +588,13 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { this.fileOptions[id][name] = JSON.parse(data[1].toString('utf-8')); fs.writeFileSync( path.join(this.objectsDir, id, '_data.json'), - JSON.stringify(this.fileOptions[id]) + JSON.stringify(this.fileOptions[id]), ); } } catch (err) { return void handler.sendError( responseId, - new Error(`ERROR writeFile-Meta id=${id}: ${err.message}`) + new Error(`ERROR writeFile-Meta id=${id}: ${err.message}`), ); } handler.sendString(responseId, 'OK'); @@ -605,7 +605,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { } catch (err) { return void handler.sendError( responseId, - new Error(`ERROR writeFile id=${id}: ${err.message}`) + new Error(`ERROR writeFile id=${id}: ${err.message}`), ); } handler.sendString(responseId, 'OK'); @@ -616,7 +616,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`SET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`SET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -630,7 +630,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { if (oldDetails.id !== newDetails.id) { return void handler.sendError( responseId, - new Error('ERROR renameObject: id needs to stay the same') + new Error('ERROR renameObject: id needs to stay the same'), ); } @@ -649,7 +649,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`RENAME-UNSUPPORTED for namespace ${oldDetails.namespace}: Data=${JSON.stringify(data)}`) + new Error(`RENAME-UNSUPPORTED for namespace ${oldDetails.namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -682,7 +682,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`DEL-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`DEL-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -775,7 +775,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`PSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`PSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -793,7 +793,7 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`PUNSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`PUNSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -850,7 +850,8 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { /** * Return connected RedisHandlers/Connections - * @returns {{}|*} + * + * @returns */ getClients() { return this.serverConnections; @@ -886,10 +887,9 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { * Get keys matching pattern and send it to given responseId, for "SCAN" and "KEYS" - Objects and files supported * * @param handler RedisHandler instance - * @param {string} pattern - pattern without namespace prefix - * @param {number} responseId - Id where response will be sent to - * @param {boolean} isScan - if used by "SCAN" this flag should be true - * @private + * @param pattern - pattern without namespace prefix + * @param responseId - Id where response will be sent to + * @param isScan - if used by "SCAN" this flag should be true */ _handleScanOrKeys(handler, pattern, responseId, isScan = false) { const { id, namespace, name, isMeta } = this._normalizeId(pattern); @@ -921,8 +921,8 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { stats: {}, isDir: false, virtualFile: true, - notExists: true - } + notExists: true, + }, ]; } } catch (e) { @@ -959,42 +959,42 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`${isScan ? 'SCAN' : 'KEYS'}-UNSUPPORTED for namespace ${namespace}: Pattern=${pattern}`) + new Error(`${isScan ? 'SCAN' : 'KEYS'}-UNSUPPORTED for namespace ${namespace}: Pattern=${pattern}`), ); } } /** * Initialize RedisHandler for a new network connection + * * @param socket Network socket - * @private */ _initSocket(socket) { if (this.settings.connection.enhancedLogging) { - this.log.silly(this.namespace + ' Handling new Redis Objects connection'); + this.log.silly(`${this.namespace} Handling new Redis Objects connection`); } const options = { log: this.log, logScope: `${this.settings.namespace || ''} Objects`, handleAsBuffers: true, - enhancedLogging: this.settings.connection.enhancedLogging + enhancedLogging: this.settings.connection.enhancedLogging, }; const handler = new RedisHandler(socket, options); this._socketEvents(handler); - this.serverConnections[socket.remoteAddress + ':' + socket.remotePort] = handler; + this.serverConnections[`${socket.remoteAddress}:${socket.remotePort}`] = handler; socket.on('close', () => { - if (this.serverConnections[socket.remoteAddress + ':' + socket.remotePort]) { - delete this.serverConnections[socket.remoteAddress + ':' + socket.remotePort]; + if (this.serverConnections[`${socket.remoteAddress}:${socket.remotePort}`]) { + delete this.serverConnections[`${socket.remoteAddress}:${socket.remotePort}`]; } }); } /** * Initialize Redis Server + * * @param settings Settings object - * @private - * @return {Promise} + * @returns */ _initRedisServer(settings) { return new Promise((resolve, reject) => { @@ -1007,15 +1007,15 @@ export class ObjectsInMemoryServer extends ObjectsInMemoryJsonlDB { this.log.info( `${this.namespace} ${settings.secure ? 'Secure ' : ''} Error inMem-objects listening on port ${ settings.port || 9001 - }: ${err}` - ) + }: ${err}`, + ), ); this.server.on('connection', socket => this._initSocket(socket)); this.server.listen( settings.port || 9001, settings.host === 'localhost' ? getLocalAddress() : settings.host ? settings.host : undefined, - () => resolve() + () => resolve(), ); } catch (err) { reject(err); diff --git a/packages/db-objects-redis/src/lib/objects/constants.ts b/packages/db-objects-redis/src/lib/objects/constants.ts index 373fc7e1c7..4a34725d61 100644 --- a/packages/db-objects-redis/src/lib/objects/constants.ts +++ b/packages/db-objects-redis/src/lib/objects/constants.ts @@ -1,7 +1,7 @@ export enum ERRORS { ERROR_PERMISSION = 'permissionError', ERROR_NOT_FOUND = 'Not exists', - ERROR_DB_CLOSED = 'DB closed' + ERROR_DB_CLOSED = 'DB closed', } export const SYSTEM_ADMIN_USER = 'system.user.admin'; diff --git a/packages/db-objects-redis/src/lib/objects/objectsInRedisClient.ts b/packages/db-objects-redis/src/lib/objects/objectsInRedisClient.ts index 26956a053c..559dd2747f 100644 --- a/packages/db-objects-redis/src/lib/objects/objectsInRedisClient.ts +++ b/packages/db-objects-redis/src/lib/objects/objectsInRedisClient.ts @@ -19,7 +19,7 @@ import type { ACLObject, FileObject, CheckFileRightsCallback, - GetUserGroupPromiseReturn + GetUserGroupPromiseReturn, } from '@/lib/objects/objectsUtils.js'; import * as utils from '@/lib/objects/objectsUtils.js'; import semver from 'semver'; @@ -29,7 +29,7 @@ import type { ConnectionOptions, DbStatus } from '@iobroker/db-base/inMemFileDB' import * as url from 'node:url'; // eslint-disable-next-line unicorn/prefer-module -const thisDir = url.fileURLToPath(new URL('.', import.meta.url || 'file://' + __filename)); +const thisDir = url.fileURLToPath(new URL('.', import.meta.url || `file://${__filename}`)); const ERRORS = CONSTS.ERRORS; @@ -262,9 +262,8 @@ export class ObjectsInRedisClient { if (!ready) { return 300; - } else { - return retry_max_delay; } + return retry_max_delay; }; delete this.settings.connection.options.retry_max_delay; @@ -275,7 +274,7 @@ export class ObjectsInRedisClient { // initiate a unix socket connection this.settings.connection.options.path = this.settings.connection.host; this.log.debug( - `${this.namespace} Redis Objects: Use File Socket for connection: ${this.settings.connection.options.path}` + `${this.namespace} Redis Objects: Use File Socket for connection: ${this.settings.connection.options.path}`, ); } else if (Array.isArray(this.settings.connection.host)) { const configuredPort = this.settings.connection.port; @@ -285,7 +284,7 @@ export class ObjectsInRedisClient { this.settings.connection.options.sentinels = this.settings.connection.host.map((redisNode, idx) => ({ host: redisNode, // @ts-expect-error ts does not get that if defPort is null we have an array - port: defaultPort === null ? configuredPort[idx] : defaultPort + port: defaultPort === null ? configuredPort[idx] : defaultPort, })); this.settings.connection.options.name = this.settings.connection.sentinelName @@ -294,13 +293,13 @@ export class ObjectsInRedisClient { this.log.debug( `${this.namespace} Redis Objects: Use Sentinel for connection: ${ this.settings.connection.options.name - }, ${JSON.stringify(this.settings.connection.options.sentinels)}` + }, ${JSON.stringify(this.settings.connection.options.sentinels)}`, ); } else { this.settings.connection.options.host = this.settings.connection.host; this.settings.connection.options.port = this.settings.connection.port; this.log.debug( - `${this.namespace} Redis Objects: Use Redis connection: ${this.settings.connection.options.host}:${this.settings.connection.options.port}` + `${this.namespace} Redis Objects: Use Redis connection: ${this.settings.connection.options.host}:${this.settings.connection.options.port}`, ); } this.settings.connection.options.db = this.settings.connection.options.db || 0; @@ -317,7 +316,7 @@ export class ObjectsInRedisClient { this.client.on('error', error => { this.settings.connection.enhancedLogging && this.log.silly( - `${this.namespace} Redis ERROR Objects: (${this.stop}) ${error.message} / ${error.stack}` + `${this.namespace} Redis ERROR Objects: (${this.stop}) ${error.message} / ${error.stack}`, ); if (this.stop) { return; @@ -327,7 +326,7 @@ export class ObjectsInRedisClient { // Seems we have a socket.io server if (error.message.startsWith('Protocol error, got "H" as reply type byte.')) { this.log.error( - `${this.namespace} Could not connect to objects database at ${this.settings.connection.options.host}:${this.settings.connection.options.port} (invalid protocol). Please make sure the configured IP and port points to a host running JS-Controller >= 2.0. and that the port is not occupied by other software!` + `${this.namespace} Could not connect to objects database at ${this.settings.connection.options.host}:${this.settings.connection.options.port} (invalid protocol). Please make sure the configured IP and port points to a host running JS-Controller >= 2.0. and that the port is not occupied by other software!`, ); } return; @@ -365,13 +364,13 @@ export class ObjectsInRedisClient { this.settings.connection.enhancedLogging && this.log.silly( - `${this.namespace} Objects-Redis Event reconnect (reconnectCounter=${reconnectCounter}, stop=${this.stop})` + `${this.namespace} Objects-Redis Event reconnect (reconnectCounter=${reconnectCounter}, stop=${this.stop})`, ); if (reconnectCounter > 2) { // fallback logic for nodejs <10 this.log.error( - `${this.namespace} The DB port ${this.settings.connection.options.port} is occupied by something that is not a Redis protocol server. Please check other software running on this port or, if you use iobroker, make sure to update to js-controller 2.0 or higher!` + `${this.namespace} The DB port ${this.settings.connection.options.port} is occupied by something that is not a Redis protocol server. Please check other software running on this port or, if you use iobroker, make sure to update to js-controller 2.0 or higher!`, ); return; } @@ -404,7 +403,7 @@ export class ObjectsInRedisClient { await this.client.config('SET', 'notify-keyspace-events', 'Exe'); } catch (e) { this.log.warn( - `${this.namespace} Unable to enable Expiry Keyspace events from Redis Server: ${e.message}` + `${this.namespace} Unable to enable Expiry Keyspace events from Redis Server: ${e.message}`, ); } @@ -429,7 +428,7 @@ export class ObjectsInRedisClient { this.subSystem.on('pmessage', (pattern, channel, message) => setImmediate(() => { this.log.silly( - `${this.namespace} Objects system redis pmessage ${pattern}/${channel}:${message}` + `${this.namespace} Objects system redis pmessage ${pattern}/${channel}:${message}`, ); if (channel.startsWith(this.metaNamespace)) { @@ -440,7 +439,7 @@ export class ObjectsInRedisClient { if (typeof this.settings.disconnected === 'function') { // protocol version has changed, restart controller this.log.info( - `${this.namespace} Objects protocol version has changed, disconnecting!` + `${this.namespace} Objects protocol version has changed, disconnecting!`, ); this.settings.disconnected(); } @@ -450,7 +449,7 @@ export class ObjectsInRedisClient { this.log.info( `${this.namespace} Sets ${ newUseSets ? 'activated' : 'deactivated' - }: restarting ...` + }: restarting ...`, ); this.useSets = newUseSets; // luas are no longer up to date, lets restart @@ -482,24 +481,24 @@ export class ObjectsInRedisClient { onChange(id, obj); } catch (e) { this.log.warn( - `${this.namespace} Objects Cannot process system pmessage ${id} - ${message}: ${e.message}` + `${this.namespace} Objects Cannot process system pmessage ${id} - ${message}: ${e.message}`, ); this.log.warn(`${this.namespace} ${e.stack}`); } } else { this.log.warn( - `${this.namespace} Objects Received unexpected system pmessage: ${channel}` + `${this.namespace} Objects Received unexpected system pmessage: ${channel}`, ); } } catch (e) { this.log.warn( `${this.namespace} Objects system pmessage ${channel} ${JSON.stringify(message)} ${ e.message - }` + }`, ); this.log.warn(`${this.namespace} ${e.stack}`); } - }) + }), ); } @@ -516,28 +515,28 @@ export class ObjectsInRedisClient { this.settings.connection.enhancedLogging && this.log.silly( `${this.namespace} PubSub System client Objects No redis connection: ${JSON.stringify( - error - )}` + error, + )}`, ); }); if (this.settings.connection.enhancedLogging) { this.subSystem.on('connect', () => this.log.silly( - `${this.namespace} PubSub System client Objects-Redis Event connect (stop=${this.stop})` - ) + `${this.namespace} PubSub System client Objects-Redis Event connect (stop=${this.stop})`, + ), ); this.subSystem.on('close', () => this.log.silly( - `${this.namespace} PubSub System client Objects-Redis Event close (stop=${this.stop})` - ) + `${this.namespace} PubSub System client Objects-Redis Event close (stop=${this.stop})`, + ), ); this.subSystem.on('reconnecting', reconnectCounter => this.log.silly( - `${this.namespace} PubSub System client Objects-Redis Event reconnect (reconnectCounter=${reconnectCounter}, stop=${this.stop})` - ) + `${this.namespace} PubSub System client Objects-Redis Event reconnect (reconnectCounter=${reconnectCounter}, stop=${this.stop})`, + ), ); } @@ -547,15 +546,15 @@ export class ObjectsInRedisClient { this.log.debug( `${this.namespace} Objects ${ ready ? 'system re' : '' - }connected to redis: ${tools.maybeArrayToString(this.settings.connection.host)}` + }connected to redis: ${tools.maybeArrayToString(this.settings.connection.host)}`, ); } else { this.log.debug( `${this.namespace} Objects ${ ready ? 'system re' : '' }connected to redis: ${tools.maybeArrayToString( - this.settings.connection.host - )}:${tools.maybeArrayToString(this.settings.connection.port)}` + this.settings.connection.host, + )}:${tools.maybeArrayToString(this.settings.connection.port)}`, ); } !ready && typeof this.settings.connected === 'function' && this.settings.connected(); @@ -573,7 +572,7 @@ export class ObjectsInRedisClient { this.subSystem && (await this.subSystem.psubscribe(`${this.metaNamespace}*`)); } catch (e) { this.log.warn( - `${this.namespace} Unable to subscribe to meta namespace "${this.metaNamespace}" changes: ${e.message}` + `${this.namespace} Unable to subscribe to meta namespace "${this.metaNamespace}" changes: ${e.message}`, ); } @@ -597,7 +596,7 @@ export class ObjectsInRedisClient { this.sub.on('pmessage', (pattern, channel, message) => { setImmediate(() => { this.log.silly( - `${this.namespace} Objects user redis pmessage ${pattern}/${channel}:${message}` + `${this.namespace} Objects user redis pmessage ${pattern}/${channel}:${message}`, ); try { if (channel.startsWith(this.objNamespace) && channel.length > this.objNamespaceL) { @@ -609,7 +608,7 @@ export class ObjectsInRedisClient { onChangeUser(id, obj); } catch (e) { this.log.warn( - `${this.namespace} Objects user cannot process pmessage ${id} - ${message}: ${e.message}` + `${this.namespace} Objects user cannot process pmessage ${id} - ${message}: ${e.message}`, ); this.log.warn(`${this.namespace} ${e.stack}`); } @@ -625,21 +624,21 @@ export class ObjectsInRedisClient { onChangeFileUser(id, fileName, obj); } catch (e) { this.log.warn( - `${this.namespace} Objects user cannot process pmessage ${id}/${fileName} - ${message}: ${e.message}` + `${this.namespace} Objects user cannot process pmessage ${id}/${fileName} - ${message}: ${e.message}`, ); this.log.warn(`${this.namespace} ${e.stack}`); } } } else { this.log.warn( - `${this.namespace} Objects user received unexpected pmessage: ${channel}` + `${this.namespace} Objects user received unexpected pmessage: ${channel}`, ); } } catch (e) { this.log.warn( `${this.namespace} Objects user pmessage ${channel} ${JSON.stringify(message)} ${ e.message - }` + }`, ); this.log.warn(`${this.namespace} ${e.stack}`); } @@ -658,27 +657,27 @@ export class ObjectsInRedisClient { } this.settings.connection.enhancedLogging && this.log.silly( - `${this.namespace} PubSub user client Objects No redis connection: ${JSON.stringify(error)}` + `${this.namespace} PubSub user client Objects No redis connection: ${JSON.stringify(error)}`, ); }); if (this.settings.connection.enhancedLogging) { this.sub.on('connect', () => this.log.silly( - `${this.namespace} PubSub user client Objects-Redis Event connect (stop=${this.stop})` - ) + `${this.namespace} PubSub user client Objects-Redis Event connect (stop=${this.stop})`, + ), ); this.sub.on('close', () => this.log.silly( - `${this.namespace} PubSub user client Objects-Redis Event close (stop=${this.stop})` - ) + `${this.namespace} PubSub user client Objects-Redis Event close (stop=${this.stop})`, + ), ); this.sub.on('reconnecting', reconnectCounter => this.log.silly( - `${this.namespace} PubSub user client Objects-Redis Event reconnect (reconnectCounter=${reconnectCounter}, stop=${this.stop})` - ) + `${this.namespace} PubSub user client Objects-Redis Event reconnect (reconnectCounter=${reconnectCounter}, stop=${this.stop})`, + ), ); } @@ -693,15 +692,15 @@ export class ObjectsInRedisClient { this.log.debug( `${this.namespace} Objects ${ ready ? 'user re' : '' - }connected to redis: ${tools.maybeArrayToString(this.settings.connection.host)}` + }connected to redis: ${tools.maybeArrayToString(this.settings.connection.host)}`, ); } else { this.log.debug( `${this.namespace} Objects ${ ready ? 'user re' : '' }connected to redis: ${tools.maybeArrayToString( - this.settings.connection.host - )}:${tools.maybeArrayToString(this.settings.connection.port)}` + this.settings.connection.host, + )}:${tools.maybeArrayToString(this.settings.connection.port)}`, ); } !ready && typeof this.settings.connected === 'function' && this.settings.connected(); @@ -728,16 +727,15 @@ export class ObjectsInRedisClient { try { // check if we are allowed to use sets this.useSets = !!parseInt( - (await this.client.get(`${this.metaNamespace}objects.features.useSets`)) || '0' + (await this.client.get(`${this.metaNamespace}objects.features.useSets`)) || '0', ); } catch (e) { // if unsupported we have a legacy host if (!e.message.includes('UNSUPPORTED')) { this.log.error(`${this.namespace} Cannot determine Set feature status: ${e.message}`); return; - } else { - this.useSets = false; } + this.useSets = false; } try { @@ -779,7 +777,7 @@ export class ObjectsInRedisClient { } } catch (e) { this.log.error( - `${this.namespace} Cannot determine Lua scripts strategy: ${e.message} ${JSON.stringify(keys)}` + `${this.namespace} Cannot determine Lua scripts strategy: ${e.message} ${JSON.stringify(keys)}`, ); return; } @@ -819,15 +817,15 @@ export class ObjectsInRedisClient { this.log.debug( `${this.namespace} Objects ${ ready ? 'client re' : '' - }connected to redis: ${tools.maybeArrayToString(this.settings.connection.host)}` + }connected to redis: ${tools.maybeArrayToString(this.settings.connection.host)}`, ); } else { this.log.debug( `${this.namespace} Objects ${ ready ? 'client re' : '' }connected to redis: ${tools.maybeArrayToString( - this.settings.connection.host - )}:${tools.maybeArrayToString(this.settings.connection.port)}` + this.settings.connection.host, + )}:${tools.maybeArrayToString(this.settings.connection.port)}`, ); } !ready && typeof this.settings.connected === 'function' && this.settings.connected(); @@ -942,7 +940,7 @@ export class ObjectsInRedisClient { name: string, options: CallOptions, flag: any, - callback?: CheckFileCallback + callback?: CheckFileCallback, ): Promise | void> { // read file settings from redis const fileId = this.getFileId(id, name, true); @@ -950,9 +948,8 @@ export class ObjectsInRedisClient { const fileOptions = { notExists: true }; if (utils.checkFile(fileOptions, options, flag, this.defaultNewAcl)) { return tools.maybeCallback(callback, false, options, fileOptions); // NO error - } else { - return tools.maybeCallback(callback, true, options); // error } + return tools.maybeCallback(callback, true, options); // error } if (!this.client) { // @ts-expect-error TODO: not in specs, better just maybe cb check false? @@ -973,9 +970,8 @@ export class ObjectsInRedisClient { } if (utils.checkFile(fileOptions, options, flag, this.defaultNewAcl)) { return tools.maybeCallback(callback, false, options, fileOptions); // NO error - } else { - return tools.maybeCallback(callback, true, options); // error } + return tools.maybeCallback(callback, true, options); // error } checkFileRights( @@ -983,7 +979,7 @@ export class ObjectsInRedisClient { name: string | null, options?: CallOptions | null, flag?: any, - callback?: CheckFileRightsCallback + callback?: CheckFileRightsCallback, ): void { return utils.checkFileRights(this, id, name, options, flag, callback); } @@ -1000,7 +996,7 @@ export class ObjectsInRedisClient { this.log.error( `${this.namespace} _setDefaultAcl error on id "${id}" with acl "${JSON.stringify(defaultAcl)}": ${ e.message - }` + }`, ); } } @@ -1012,7 +1008,7 @@ export class ObjectsInRedisClient { ownerGroup: CONSTS.SYSTEM_ADMIN_GROUP, object: 0x664, state: 0x664, - file: 0x664 + file: 0x664, }; try { // Get ALL Objects @@ -1027,7 +1023,7 @@ export class ObjectsInRedisClient { getUserGroup( user: ioBroker.ObjectIDs.User, - callback: GetUserGroupCallbackNoError + callback: GetUserGroupCallbackNoError, ): Promise | void { return utils.getUserGroup(this, user, (error, user, userGroups, userAcl) => { if (error) { @@ -1041,18 +1037,26 @@ export class ObjectsInRedisClient { id: string, name: string, data: Buffer | string, - options: { virtualFile?: any; user?: any; group?: any; mode?: any; mimeType?: string }, + options: { + virtualFile?: any; + user?: any; + group?: any; + mode?: any; + mimeType?: string; + }, callback: ioBroker.ErrorCallback | undefined, meta: { acl?: Record; - stats?: { size: number }; + stats?: { + size: number; + }; notExists?: boolean; mimeType?: string; binary?: boolean; modifiedAt?: number; virtualFile?: boolean; createdAt?: number; - } + }, ): Promise { const matchedExtension = name.match(/\.[^.]+$/); const ext = matchedExtension ? matchedExtension[0] : ''; @@ -1069,7 +1073,7 @@ export class ObjectsInRedisClient { if (options.virtualFile) { meta = { notExists: true, - virtualFile: true + virtualFile: true, }; // Store file with flags as it would not exist try { await this.client.set(metaID, JSON.stringify(meta)); @@ -1088,11 +1092,11 @@ export class ObjectsInRedisClient { options.group || (this.defaultNewAcl && this.defaultNewAcl.ownerGroup) || CONSTS.SYSTEM_ADMIN_GROUP, - permissions: options.mode || (this.defaultNewAcl && this.defaultNewAcl.file) || 0x644 + permissions: options.mode || (this.defaultNewAcl && this.defaultNewAcl.file) || 0x644, }; } meta.stats = { - size: data ? data.length : 0 + size: data ? data.length : 0, }; if (Object.prototype.hasOwnProperty.call(meta, 'notExists')) { delete meta.notExists; @@ -1124,7 +1128,7 @@ export class ObjectsInRedisClient { name: string, data: any, options?: WriteFileOptions | null, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): Promise; async writeFile( @@ -1132,7 +1136,7 @@ export class ObjectsInRedisClient { name: string, data: any, options?: WriteFileOptions | ioBroker.ErrorCallback | null, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): Promise { if (typeof options === 'function') { callback = options; @@ -1173,15 +1177,14 @@ export class ObjectsInRedisClient { return this.checkFileRights(id, name, options, CONSTS.ACCESS_WRITE, (err, options, meta) => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - return this._writeFile(id, name, data, options, callback, meta); } + return this._writeFile(id, name, data, options, callback, meta); }); } writeFileAsync(id: string, name: string, data: any, options?: WriteFileOptions | null): Promise { return new Promise((resolve, reject) => - this.writeFile(id, name, data, options, err => (err ? reject(err) : resolve())) + this.writeFile(id, name, data, options, err => (err ? reject(err) : resolve())), ); } @@ -1212,13 +1215,13 @@ export class ObjectsInRedisClient { id: string, name: string, options: CallOptions | null | undefined, - callback: ioBroker.ReadFileCallback + callback: ioBroker.ReadFileCallback, ): void; readFile( id: string, name: string, options?: CallOptions | null, - callback?: ioBroker.ReadFileCallback + callback?: ioBroker.ReadFileCallback, ): void | ioBroker.ReadFilePromise { if (typeof options === 'function') { callback = options; @@ -1231,8 +1234,8 @@ export class ObjectsInRedisClient { if (!callback) { return new Promise((resolve, reject) => this.readFile(id, name, options, (err, res, mimeType) => - err ? reject(err) : resolve({ file: res!, mimeType: mimeType }) - ) + err ? reject(err) : resolve({ file: res!, mimeType: mimeType }), + ), ); } @@ -1248,13 +1251,12 @@ export class ObjectsInRedisClient { this.checkFileRights(id, name, options, CONSTS.ACCESS_READ, async (err, options, meta) => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - try { - const { file, mimeType } = await this._readFile(id, name, meta); - return tools.maybeCallbackWithError(callback, null, file, mimeType); - } catch (e) { - return tools.maybeCallbackWithError(callback, e); - } + } + try { + const { file, mimeType } = await this._readFile(id, name, meta); + return tools.maybeCallbackWithError(callback, null, file, mimeType); + } catch (e) { + return tools.maybeCallbackWithError(callback, e); } }); } @@ -1335,19 +1337,18 @@ export class ObjectsInRedisClient { id: string, name: string, options: CallOptions, - meta: MetaObject + meta: MetaObject, ): Promise { if (!this.client) { throw new Error(ERRORS.ERROR_DB_CLOSED); } if (meta && meta.notExists) { return this._rm(id, name, options); - } else { - const metaID = this.getFileId(id, name, true); - const dataID = this.getFileId(id, name, false); - await this._delBinaryState(dataID); - await this.client.del(metaID); } + const metaID = this.getFileId(id, name, true); + const dataID = this.getFileId(id, name, false); + await this._delBinaryState(dataID); + await this.client.del(metaID); } unlink(id: string, name: string, options: CallOptions | null | undefined, callback?: ioBroker.RmCallback): void { @@ -1370,24 +1371,22 @@ export class ObjectsInRedisClient { this.checkFileRights(id, name, options, CONSTS.ACCESS_DELETE, async (err, options, meta) => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - if (!options.acl.file.delete) { - return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); - } else { - try { - const files = await this._unlink(id, name, options, meta); - return tools.maybeCallbackWithError(callback, null, files); - } catch (e) { - return tools.maybeCallbackWithError(callback, e); - } - } + } + if (!options.acl.file.delete) { + return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); + } + try { + const files = await this._unlink(id, name, options, meta); + return tools.maybeCallbackWithError(callback, null, files); + } catch (e) { + return tools.maybeCallbackWithError(callback, e); } }); } unlinkAsync(id: string, name: string, options?: CallOptions): Promise { return new Promise((resolve, reject) => - this.unlink(id, name, options, err => (err ? reject(err) : resolve())) + this.unlink(id, name, options, err => (err ? reject(err) : resolve())), ); } @@ -1403,7 +1402,7 @@ export class ObjectsInRedisClient { id: string, name: string, options: CallOptions, - callback: (err?: Error | null, res?: ioBroker.ReadDirResult[]) => void + callback: (err?: Error | null, res?: ioBroker.ReadDirResult[]) => void, ): Promise { name = this.normalizeFilename(name); if (!this.client) { @@ -1435,7 +1434,7 @@ export class ObjectsInRedisClient { result.push({ file: dir, stats: {}, - isDir: true + isDir: true, }); } lastDir = dir; @@ -1470,11 +1469,10 @@ export class ObjectsInRedisClient { const parts = key.substr(start, key.length - end).split('/'); if (parts.length === deepLevel) { return !key.includes('/_data.json$%$') && key !== '_data.json'; // sort out "virtual" files that are used to mark directories - } else { - const dir = parts[deepLevel - 1]; - if (dirs.indexOf(dir) === -1) { - dirs.push(dir); - } + } + const dir = parts[deepLevel - 1]; + if (dirs.indexOf(dir) === -1) { + dirs.push(dir); } } }); @@ -1482,7 +1480,7 @@ export class ObjectsInRedisClient { const result: ioBroker.ReadDirResult[] = dirs.map(file => ({ file, stats: {}, - isDir: true + isDir: true, })); return tools.maybeCallbackWithError(callback, null, result); @@ -1508,7 +1506,7 @@ export class ObjectsInRedisClient { result.push({ file: dirs.shift()!, stats: {}, - isDir: true + isDir: true, }); } @@ -1543,7 +1541,7 @@ export class ObjectsInRedisClient { isDir: false, acl: obj.acl, modifiedAt: obj.modifiedAt, - createdAt: obj.createdAt + createdAt: obj.createdAt, }); } } @@ -1551,7 +1549,7 @@ export class ObjectsInRedisClient { result.push({ file: dirs.shift()!, stats: {}, - isDir: true + isDir: true, }); } return tools.maybeCallbackWithError(callback, null, result); @@ -1561,7 +1559,7 @@ export class ObjectsInRedisClient { id: string, name: string, options: CallOptions | null | undefined, - callback: ioBroker.ReadDirCallback + callback: ioBroker.ReadDirCallback, ): void { if (typeof options === 'function') { callback = options; @@ -1586,19 +1584,17 @@ export class ObjectsInRedisClient { this.checkFileRights(id, name, options, CONSTS.ACCESS_READ, (err, options) => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - if (!options.acl.file.list) { - return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); - } else { - this._readDir(id, name, options, callback); - } } + if (!options.acl.file.list) { + return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); + } + this._readDir(id, name, options, callback); }); } readDirAsync(id: string, name: string, options?: CallOptions): ioBroker.ReadDirPromise { return new Promise((resolve, reject) => - this.readDir(id, name, options, (err, res) => (err ? reject(err) : resolve(res!))) + this.readDir(id, name, options, (err, res) => (err ? reject(err) : resolve(res!))), ); } @@ -1606,34 +1602,33 @@ export class ObjectsInRedisClient { keys: string[], oldBase: string, newBase: string, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): Promise { if (!keys || !keys.length) { return tools.maybeCallback(callback); - } else { - if (!this.client) { - return tools.maybeCallbackWithError(callback, ERRORS.ERROR_DB_CLOSED); - } - for (const id of keys) { + } + if (!this.client) { + return tools.maybeCallbackWithError(callback, ERRORS.ERROR_DB_CLOSED); + } + for (const id of keys) { + try { try { - try { - await this.client.rename( - id.replace(/\$%\$meta$/, '$%$data'), - id.replace(oldBase, newBase).replace(/\$%\$meta$/, '$%$data') - ); - } catch (e) { - // _data.json is not having a data key, so ignore error - if (!(id.endsWith('/_data.json$%$meta') && e.message.includes('no such key'))) { - throw e; - } - } - await this.client.rename(id, id.replace(oldBase, newBase)); + await this.client.rename( + id.replace(/\$%\$meta$/, '$%$data'), + id.replace(oldBase, newBase).replace(/\$%\$meta$/, '$%$data'), + ); } catch (e) { - return tools.maybeCallbackWithRedisError(callback, e); + // _data.json is not having a data key, so ignore error + if (!(id.endsWith('/_data.json$%$meta') && e.message.includes('no such key'))) { + throw e; + } } + await this.client.rename(id, id.replace(oldBase, newBase)); + } catch (e) { + return tools.maybeCallbackWithRedisError(callback, e); } - return tools.maybeCallback(callback); } + return tools.maybeCallback(callback); } private async _rename( @@ -1642,7 +1637,7 @@ export class ObjectsInRedisClient { newName: string, options: CallOptions, callback?: ioBroker.ErrorCallback, - meta?: MetaObject + meta?: MetaObject, ): Promise { const oldMetaID = this.getFileId(id, oldName, true); const oldDataID = this.getFileId(id, oldName, false); @@ -1721,14 +1716,13 @@ export class ObjectsInRedisClient { result = keys; } return this._renameHelper(result, oldBase, newBase, callback); - } else { - try { - await this.client.rename(oldDataID, newDataID); - await this.client.rename(oldMetaID, newMetaID); - return tools.maybeCallback(callback); - } catch (e) { - return tools.maybeCallbackWithRedisError(callback, e); - } + } + try { + await this.client.rename(oldDataID, newDataID); + await this.client.rename(oldMetaID, newMetaID); + return tools.maybeCallback(callback); + } catch (e) { + return tools.maybeCallbackWithRedisError(callback, e); } } @@ -1737,7 +1731,7 @@ export class ObjectsInRedisClient { oldName: string, newName: string, options?: CallOptions | null, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void | Promise { if (typeof options === 'function') { callback = options; @@ -1774,19 +1768,17 @@ export class ObjectsInRedisClient { this.checkFileRights(id, oldName, options, CONSTS.ACCESS_WRITE, (err, options, meta) => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - if (!options.acl.file.write) { - return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); - } else { - this._rename(id, oldName, newName, options, callback, meta); - } } + if (!options.acl.file.write) { + return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); + } + this._rename(id, oldName, newName, options, callback, meta); }); } renameAsync(id: string, oldName: string, newName: string, options: CallOptions): Promise { return new Promise((resolve, reject) => - this.rename(id, oldName, newName, options, err => (err ? reject(err) : resolve())) + this.rename(id, oldName, newName, options, err => (err ? reject(err) : resolve())), ); } @@ -1827,9 +1819,8 @@ export class ObjectsInRedisClient { this.checkFileRights(id, name, options, CONSTS.ACCESS_WRITE, (err, options, meta) => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - return this._touch(id, name, callback, meta); } + return this._touch(id, name, callback, meta); }); } @@ -1840,15 +1831,14 @@ export class ObjectsInRedisClient { private async _rmHelper(keys: string[]): Promise { if (!keys.length) { return; - } else { - if (!this.client) { - throw new Error(ERRORS.ERROR_DB_CLOSED); - } + } + if (!this.client) { + throw new Error(ERRORS.ERROR_DB_CLOSED); + } - for (const id of keys) { - await this._delBinaryState(id.replace(/\$%\$meta$/, '$%$data')); - await this.client.del(id); - } + for (const id of keys) { + await this._delBinaryState(id.replace(/\$%\$meta$/, '$%$data')); + await this.client.del(id); } } @@ -1856,7 +1846,7 @@ export class ObjectsInRedisClient { id: string, name: string, options: CallOptions, - meta?: any + meta?: any, ): Promise { if (meta && !meta.isDir) { // it is file @@ -1925,9 +1915,8 @@ export class ObjectsInRedisClient { const pos = name.lastIndexOf('/'); if (pos !== -1) { return { file: name.substring(pos + 1), path: name.substring(0, pos) }; - } else { - return { file: id, path: '' }; } + return { file: id, path: '' }; }); try { @@ -1956,34 +1945,27 @@ export class ObjectsInRedisClient { this.checkFileRights(id, null, options, CONSTS.ACCESS_DELETE, async (err, options, meta) => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - if (!options.acl.file.delete) { - return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); - } else { - try { - const files = await this._rm(id, name, options, meta && meta.notExists ? null : meta); - return tools.maybeCallbackWithError(callback, null, files); - } catch (e) { - return tools.maybeCallbackWithError(callback, e); - } - } + } + if (!options.acl.file.delete) { + return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); + } + try { + const files = await this._rm(id, name, options, meta && meta.notExists ? null : meta); + return tools.maybeCallbackWithError(callback, null, files); + } catch (e) { + return tools.maybeCallbackWithError(callback, e); } }); } rmAsync(id: string, name: string, options: CallOptions): Promise { return new Promise((resolve, reject) => - this.rm(id, name, options, (err, files) => (err ? reject(err) : resolve(files))) + this.rm(id, name, options, (err, files) => (err ? reject(err) : resolve(files))), ); } // simulate. redis has no dirs - mkdir( - id: string, - dirName?: string, - options?: CallOptions | null | undefined, - callback?: ioBroker.ErrorCallback - ): void { + mkdir(id: string, dirName?: string, options?: CallOptions | null, callback?: ioBroker.ErrorCallback): void { if (typeof options === 'function') { callback = options; options = null; @@ -1999,22 +1981,20 @@ export class ObjectsInRedisClient { this.checkFileRights(id, dirName, options, CONSTS.ACCESS_WRITE, (err, options) => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - if (!options.acl.file.write) { - return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); - } else { - // we create a dummy file (for file this file exists to store meta data) - do not override passed options - options = { ...options, virtualFile: true }; - const realName = dirName + (dirName!.endsWith('/') ? '' : '/'); - this.writeFile(id, `${realName}_data.json`, '', options, callback); - } } + if (!options.acl.file.write) { + return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); + } + // we create a dummy file (for file this file exists to store meta data) - do not override passed options + options = { ...options, virtualFile: true }; + const realName = dirName + (dirName.endsWith('/') ? '' : '/'); + this.writeFile(id, `${realName}_data.json`, '', options, callback); }); } mkdirAsync(id: string, dirName?: string, options?: CallOptions): Promise { return new Promise((resolve, reject) => - this.mkdir(id, dirName, options, err => (err ? reject(err) : resolve())) + this.mkdir(id, dirName, options, err => (err ? reject(err) : resolve())), ); } @@ -2022,7 +2002,7 @@ export class ObjectsInRedisClient { keys: string[], metas: any[], options: CallOptions, - callback: ioBroker.ErrorCallback + callback: ioBroker.ErrorCallback, ): Promise { if (!keys.length) { return tools.maybeCallback(callback); @@ -2049,7 +2029,7 @@ export class ObjectsInRedisClient { name: string, options: CallOptions, callback: ioBroker.ChownFileCallback, - meta: ChmodMetaObject + meta: ChmodMetaObject, ): Promise { if (!meta) { return tools.maybeCallbackWithError(callback, ERRORS.ERROR_NOT_FOUND); @@ -2079,8 +2059,8 @@ export class ObjectsInRedisClient { isDir: false, acl: meta.acl || {}, modifiedAt: meta.modifiedAt, - createdAt: meta.createdAt - } + createdAt: meta.createdAt, + }, ]; return tools.maybeCallbackWithError(callback, null, res); } @@ -2152,7 +2132,7 @@ export class ObjectsInRedisClient { isDir: false, acl: meta.acl || {}, modifiedAt: meta.modifiedAt, - createdAt: meta.createdAt + createdAt: meta.createdAt, }); } } @@ -2196,9 +2176,9 @@ export class ObjectsInRedisClient { this.getUserGroup(options.owner, (user, groups) => { if (!groups || !groups[0]) { return tools.maybeCallbackWithError(callback, `user "${options.owner}" belongs to no group`); - } else { - options.ownerGroup = groups[0]; } + options.ownerGroup = groups[0]; + this.chownFile(id, name, options, callback); }); return; @@ -2207,23 +2187,21 @@ export class ObjectsInRedisClient { this.checkFileRights(id, name, options, CONSTS.ACCESS_WRITE, (err, options, meta) => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - if (!options.acl.file.write) { - return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); - } else { - return this._chownFile(id, name, options, callback, meta); - } } + if (!options.acl.file.write) { + return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); + } + return this._chownFile(id, name, options, callback, meta); }); } chownFileAsync( id: string, name: string, - options: CallOptions + options: CallOptions, ): Promise> { return new Promise((resolve, reject) => - this.chownFile(id, name, options, (err, processed) => (err ? reject(err) : resolve(processed))) + this.chownFile(id, name, options, (err, processed) => (err ? reject(err) : resolve(processed))), ); } @@ -2238,7 +2216,7 @@ export class ObjectsInRedisClient { keys: string[], metas: any[], options: CallOptions, - callback: ioBroker.ErrorCallback + callback: ioBroker.ErrorCallback, ): Promise { if (!keys || !keys.length) { return tools.maybeCallback(callback); @@ -2265,7 +2243,7 @@ export class ObjectsInRedisClient { name: string, options: CallOptions, callback: ioBroker.ChownFileCallback, - meta: ChmodMetaObject + meta: ChmodMetaObject, ): Promise { if (!meta) { return tools.maybeCallbackWithError(callback, ERRORS.ERROR_NOT_FOUND); @@ -2294,8 +2272,8 @@ export class ObjectsInRedisClient { isDir: false, acl: meta.acl || {}, modifiedAt: meta.modifiedAt, - createdAt: meta.createdAt - } + createdAt: meta.createdAt, + }, ]; return tools.maybeCallbackWithError(callback, null, res); } @@ -2369,12 +2347,12 @@ export class ObjectsInRedisClient { isDir: false, acl: obj.acl || {}, modifiedAt: obj.modifiedAt, - createdAt: obj.createdAt + createdAt: obj.createdAt, }); } } this._chmodFileHelper(keysFiltered, objsFiltered, options, err => - tools.maybeCallbackWithError(callback, err, processed) + tools.maybeCallbackWithError(callback, err, processed), ); } @@ -2407,23 +2385,21 @@ export class ObjectsInRedisClient { this.checkFileRights(id, name, options, CONSTS.ACCESS_WRITE, (err, options, meta) => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - if (!options.acl.file.write) { - return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); - } else { - return this._chmodFile(id, name, options, callback, meta); - } } + if (!options.acl.file.write) { + return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); + } + return this._chmodFile(id, name, options, callback, meta); }); } chmodFileAsync( id: string, name: string, - options: CallOptions + options: CallOptions, ): Promise> { return new Promise((resolve, reject) => - this.chmodFile(id, name, options, (err, processed) => (err ? reject(err) : resolve(processed))) + this.chmodFile(id, name, options, (err, processed) => (err ? reject(err) : resolve(processed))), ); } @@ -2433,12 +2409,12 @@ export class ObjectsInRedisClient { enableFileCache( enabled: boolean, options?: CallOptions, - callback?: (err: Error | null | undefined, res: boolean) => void + callback?: (err: Error | null | undefined, res: boolean) => void, ): void; enableFileCache( enabled: boolean, options?: any, - callback?: (err: Error | null | undefined, res: boolean) => void + callback?: (err: Error | null | undefined, res: boolean) => void, ): void { if (typeof options === 'function') { callback = options; @@ -2452,16 +2428,15 @@ export class ObjectsInRedisClient { utils.checkObjectRights(this, null, null, options, CONSTS.ACCESS_WRITE, (err, _options) => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - // cache cannot be enabled - return tools.maybeCallbackWithError(callback, null, false); } + // cache cannot be enabled + return tools.maybeCallbackWithError(callback, null, false); }); } enableFileCacheAsync(enabled: boolean, options?: CallOptions): Promise { return new Promise((resolve, reject) => - this.enableFileCache(enabled, options, (err, res) => (err ? reject(err) : resolve(res))) + this.enableFileCache(enabled, options, (err, res) => (err ? reject(err) : resolve(res))), ); } @@ -2519,7 +2494,7 @@ export class ObjectsInRedisClient { } else { return this._subscribeFile(id, pattern) .then(() => resolve()) - .catch(err => reject(err)); + .catch((err: Error) => reject(err)); } }); }); @@ -2533,7 +2508,7 @@ export class ObjectsInRedisClient { } else { return this._unsubscribeFile(id, pattern) .then(() => resolve()) - .catch(err => reject(err)); + .catch((err: Error) => reject(err)); } }); }); @@ -2544,12 +2519,12 @@ export class ObjectsInRedisClient { private _subscribe( pattern: string | string[], asUser: boolean, - callback?: T + callback?: T, ): T extends ioBroker.ErrorCallback ? void : Promise; private _subscribe( pattern: string | string[], asUser: boolean, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void | Promise { const subClient = asUser ? this.sub : this.subSystem; if (!subClient) { @@ -2584,14 +2559,13 @@ export class ObjectsInRedisClient { private subscribeConfig( pattern: string | string[], options?: CallOptions | null, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void { utils.checkObjectRights(this, null, null, options, 'list', err => { if (err) { return tools.maybeCallbackWithRedisError(callback, err); - } else { - return this._subscribe(pattern, false, callback); } + return this._subscribe(pattern, false, callback); }); } @@ -2600,7 +2574,7 @@ export class ObjectsInRedisClient { subscribe( pattern: string | string[], options?: CallOptions | ioBroker.ErrorCallback | null, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void { if (typeof options === 'function') { callback = options; @@ -2611,7 +2585,7 @@ export class ObjectsInRedisClient { subscribeAsync(pattern: string | string[], options?: CallOptions): Promise { return new Promise((resolve, reject) => - this.subscribe(pattern, options, err => (err ? reject(err) : resolve())) + this.subscribe(pattern, options, err => (err ? reject(err) : resolve())), ); } @@ -2627,15 +2601,14 @@ export class ObjectsInRedisClient { utils.checkObjectRights(this, null, null, options, 'list', err => { if (err) { return tools.maybeCallbackWithRedisError(callback, err); - } else { - return this._subscribe(pattern, true, callback); } + return this._subscribe(pattern, true, callback); }); } subscribeUserAsync(pattern: string | string[], options: CallOptions): Promise { return new Promise((resolve, reject) => - this.subscribeUser(pattern, options, err => (err ? reject(err) : resolve())) + this.subscribeUser(pattern, options, err => (err ? reject(err) : resolve())), ); } @@ -2667,18 +2640,17 @@ export class ObjectsInRedisClient { private unsubscribeConfig( pattern: string | string[], options?: CallOptions | null, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void { utils.checkObjectRights(this, null, null, options, 'list', async err => { if (err) { return tools.maybeCallbackWithRedisError(callback, err); - } else { - try { - await this._unsubscribe(pattern, false); - return tools.maybeCallback(callback); - } catch (e) { - return tools.maybeCallbackWithRedisError(callback, e); - } + } + try { + await this._unsubscribe(pattern, false); + return tools.maybeCallback(callback); + } catch (e) { + return tools.maybeCallbackWithRedisError(callback, e); } }); } @@ -2690,7 +2662,7 @@ export class ObjectsInRedisClient { unsubscribe( pattern: string | string[], options?: CallOptions | ioBroker.ErrorCallback | null, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): void { if (typeof options === 'function') { callback = options; @@ -2702,7 +2674,7 @@ export class ObjectsInRedisClient { unsubscribeAsync(pattern: string | string[], options: CallOptions): Promise { return new Promise((resolve, reject) => - this.unsubscribe(pattern, options, err => (err ? reject(err) : resolve())) + this.unsubscribe(pattern, options, err => (err ? reject(err) : resolve())), ); } @@ -2714,57 +2686,55 @@ export class ObjectsInRedisClient { utils.checkObjectRights(this, null, null, options, 'list', async err => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - try { - await this._unsubscribe(pattern, true); - return tools.maybeCallback(callback); - } catch (e) { - return tools.maybeCallbackWithRedisError(callback, e); - } + } + try { + await this._unsubscribe(pattern, true); + return tools.maybeCallback(callback); + } catch (e) { + return tools.maybeCallbackWithRedisError(callback, e); } }); } unsubscribeUserAsync(pattern: string | string[], options: CallOptions): Promise { return new Promise((resolve, reject) => - this.unsubscribeUser(pattern, options, err => (err ? reject(err) : resolve())) + this.unsubscribeUser(pattern, options, err => (err ? reject(err) : resolve())), ); } private async _objectHelper(keys: string[], objs: any[]): Promise { if (!keys.length) { return; - } else { - if (!this.client) { - throw new Error(ERRORS.ERROR_DB_CLOSED); - } - for (const id of keys) { - const obj = objs.shift(); - const message = JSON.stringify(obj); - const commands = []; - if (this.useSets) { - if (obj.type) { - // e.g. _design/ has no type - // add the object to the set + set object atomic - commands.push(['sadd', `${this.setNamespace}object.type.${obj.type}`, id]); - } - - if (obj.common?.custom) { - // add to "common" set - commands.push(['sadd', `${this.setNamespace}object.common.custom`, id]); - } + } + if (!this.client) { + throw new Error(ERRORS.ERROR_DB_CLOSED); + } + for (const id of keys) { + const obj = objs.shift(); + const message = JSON.stringify(obj); + const commands = []; + if (this.useSets) { + if (obj.type) { + // e.g. _design/ has no type + // add the object to the set + set object atomic + commands.push(['sadd', `${this.setNamespace}object.type.${obj.type}`, id]); } - if (!commands.length) { - // only set - await this.client.set(id, message); - } else { - // set all commands atomic - commands.push(['set', id, message]); - await this.client.multi(commands).exec(); + if (obj.common?.custom) { + // add to "common" set + commands.push(['sadd', `${this.setNamespace}object.common.custom`, id]); } - await this.client.publish(id, message); } + + if (!commands.length) { + // only set + await this.client.set(id, message); + } else { + // set all commands atomic + commands.push(['set', id, message]); + await this.client.multi(commands).exec(); + } + await this.client.publish(id, message); } } @@ -2812,7 +2782,7 @@ export class ObjectsInRedisClient { (this.defaultNewAcl && this.defaultNewAcl.ownerGroup) || CONSTS.SYSTEM_ADMIN_GROUP, object: (this.defaultNewAcl && this.defaultNewAcl.object) || - CONSTS.ACCESS_USER_RW | CONSTS.ACCESS_GROUP_READ | CONSTS.ACCESS_EVERY_READ // '0644' + CONSTS.ACCESS_USER_RW | CONSTS.ACCESS_GROUP_READ | CONSTS.ACCESS_EVERY_READ, // '0644' }; if (obj.type === 'state') { obj.acl!.state = @@ -2833,7 +2803,7 @@ export class ObjectsInRedisClient { // @ts-expect-error TODO we are returning type Object for ease of use to devs, but formally these are AnyObjects, e.g. not guaranteed to have common return tools.maybeCallbackWithError(callback, null, filteredObjs); }, - true + true, ); } @@ -2866,9 +2836,9 @@ export class ObjectsInRedisClient { this.getUserGroup(options.owner, (user, groups /* , permissions*/) => { if (!groups || !groups[0]) { return tools.maybeCallbackWithError(callback, `user "${options.owner}" belongs to no group`); - } else { - options.ownerGroup = groups[0]; } + options.ownerGroup = groups[0]; + this.chownObject(pattern, options, callback); }); return; @@ -2877,22 +2847,20 @@ export class ObjectsInRedisClient { utils.checkObjectRights(this, null, null, options, CONSTS.ACCESS_WRITE, (err, options) => { if (err) { return tools.maybeCallbackWithRedisError(callback, err); - } else { - if (!options.acl.object || !options.acl.object.write) { - return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); - } else { - return this._chownObject(pattern, options, callback); - } } + if (!options.acl.object || !options.acl.object.write) { + return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); + } + return this._chownObject(pattern, options, callback); }); } chownObjectAsync( pattern: string, - options: CallOptions + options: CallOptions, ): Promise> { return new Promise((resolve, reject) => - this.chownObject(pattern, options, (err, list) => (err ? reject(err) : resolve(list))) + this.chownObject(pattern, options, (err, list) => (err ? reject(err) : resolve(list))), ); } @@ -2941,7 +2909,7 @@ export class ObjectsInRedisClient { (this.defaultNewAcl && this.defaultNewAcl.ownerGroup) || CONSTS.SYSTEM_ADMIN_GROUP, object: (this.defaultNewAcl && this.defaultNewAcl.object) || - CONSTS.ACCESS_USER_RW | CONSTS.ACCESS_GROUP_READ | CONSTS.ACCESS_EVERY_READ // '0644' + CONSTS.ACCESS_USER_RW | CONSTS.ACCESS_GROUP_READ | CONSTS.ACCESS_EVERY_READ, // '0644' }; if (obj.type === 'state') { obj.acl!.state = @@ -2966,14 +2934,14 @@ export class ObjectsInRedisClient { this.log.error(`${this.namespace} _chmodObject error: ${e.message}`); } }, - true + true, ); } chmodObject( pattern: string, options: CallOptions | null, - callback?: ioBroker.ChownObjectCallback + callback?: ioBroker.ChownObjectCallback, ): void | Promise { if (typeof options === 'function') { callback = options; @@ -3000,22 +2968,20 @@ export class ObjectsInRedisClient { utils.checkObjectRights(this, null, null, options, CONSTS.ACCESS_WRITE, (err, options) => { if (err) { return tools.maybeCallbackWithRedisError(callback, err); - } else { - if (!options.acl.file.write) { - return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); - } else { - return this._chmodObject(pattern, options, callback); - } } + if (!options.acl.file.write) { + return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); + } + return this._chmodObject(pattern, options, callback); }); } chmodObjectAsync( pattern: string, - options: CallOptions + options: CallOptions, ): Promise> { return new Promise((resolve, reject) => - this.chmodObject(pattern, options, (err, list) => (err ? reject(err) : resolve(list))) + this.chmodObject(pattern, options, (err, list) => (err ? reject(err) : resolve(list))), ); } @@ -3048,19 +3014,17 @@ export class ObjectsInRedisClient { // Check permissions if (utils.checkObject(obj, options, CONSTS.ACCESS_READ)) { return tools.maybeCallbackWithError(callback, null, obj); - } else { - return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); } - } else { - return tools.maybeCallbackWithRedisError(callback, err, obj); + return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); } + return tools.maybeCallbackWithRedisError(callback, err, obj); } // cb version with options getObject( id: T, options: Options | undefined | null, - callback: ioBroker.GetObjectCallback + callback: ioBroker.GetObjectCallback, ): void; // Promise version getObject(id: T, options?: Options | null): ioBroker.GetObjectPromise; @@ -3070,7 +3034,7 @@ export class ObjectsInRedisClient { getObject( id: T, options?: any, - callback?: ioBroker.GetObjectCallback + callback?: ioBroker.GetObjectCallback, ): void | ioBroker.GetObjectPromise { if (typeof options === 'function') { callback = options; @@ -3078,7 +3042,7 @@ export class ObjectsInRedisClient { } if (!callback) { return new Promise((resolve, reject) => - this.getObject(id, options, (err, obj) => (err ? reject(err) : resolve(obj))) + this.getObject(id, options, (err, obj) => (err ? reject(err) : resolve(obj))), ); } @@ -3089,9 +3053,8 @@ export class ObjectsInRedisClient { utils.checkObjectRights(this, null, null, options, CONSTS.ACCESS_READ, (err, options) => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - return this._getObject(id, options, callback); } + return this._getObject(id, options, callback); }); } } @@ -3104,10 +3067,10 @@ export class ObjectsInRedisClient { */ getObjectAsync( id: T, - options?: Record | null + options?: Record | null, ): Promise>> { return new Promise((resolve, reject) => - this.getObject(id, options, (err, obj) => (err ? reject(err) : resolve(obj))) + this.getObject(id, options, (err, obj) => (err ? reject(err) : resolve(obj))), ); } @@ -3115,7 +3078,7 @@ export class ObjectsInRedisClient { pattern: string, options: CallOptions, callback?: ioBroker.GetKeysCallback, - dontModify?: boolean + dontModify?: boolean, ): Promise | void> { if (!this.client) { return tools.maybeCallbackWithError(callback, ERRORS.ERROR_DB_CLOSED); @@ -3158,38 +3121,36 @@ export class ObjectsInRedisClient { } } return tools.maybeCallbackWithError(callback, null, result); - } else { - // Check permissions - let metas: (string | null)[]; + } + // Check permissions + let metas: (string | null)[]; + try { + metas = await this.client.mget(keys); + } catch (e) { + return tools.maybeCallbackWithRedisError(callback, e); + } + metas = metas || []; + for (let i = 0; i < keys.length; i++) { + const metaStr = metas[i]; + let meta: ioBroker.AnyObject; try { - metas = await this.client.mget(keys); - } catch (e) { - return tools.maybeCallbackWithRedisError(callback, e); + meta = metaStr ? JSON.parse(metaStr) : null; + } catch { + this.log.error(`${this.namespace} Cannot parse JSON ${keys[i]}: ${metaStr}`); + continue; } - metas = metas || []; - for (let i = 0; i < keys.length; i++) { - const metaStr = metas[i]; - let meta: ioBroker.AnyObject; - try { - meta = metaStr ? JSON.parse(metaStr) : null; - } catch { - this.log.error(`${this.namespace} Cannot parse JSON ${keys[i]}: ${metaStr}`); - continue; - } - if (r.test(keys[i]) && utils.checkObject(meta, options, CONSTS.ACCESS_READ)) { - if (!dontModify) { - result.push(keys[i].substring(this.objNamespaceL)); - } else { - result.push(keys[i]); - } + if (r.test(keys[i]) && utils.checkObject(meta, options, CONSTS.ACCESS_READ)) { + if (!dontModify) { + result.push(keys[i].substring(this.objNamespaceL)); + } else { + result.push(keys[i]); } } - return tools.maybeCallbackWithError(callback, null, result); } - } else { return tools.maybeCallbackWithError(callback, null, result); } + return tools.maybeCallbackWithError(callback, null, result); } // User has provided a callback, thus we call the callback function @@ -3197,7 +3158,7 @@ export class ObjectsInRedisClient { pattern: string, options: CallOptions | null | undefined, callback: ioBroker.GetKeysCallback, - dontModify?: boolean + dontModify?: boolean, ): void; // User has provided callback without options, we call it getKeys(pattern: string, callback: ioBroker.GetKeysCallback): void; @@ -3206,13 +3167,13 @@ export class ObjectsInRedisClient { pattern: string, options?: CallOptions | null, callback?: undefined, - dontModify?: boolean + dontModify?: boolean, ): Promise>; getKeys( pattern: string, options?: CallOptions | null | ioBroker.GetKeysCallback, callback?: ioBroker.GetKeysCallback, - dontModify?: boolean + dontModify?: boolean, ): void | Promise> { if (typeof options === 'function') { callback = options; @@ -3220,16 +3181,15 @@ export class ObjectsInRedisClient { } if (!callback) { return new Promise((resolve, reject) => - this.getKeys(pattern, options, (err, obj) => (err ? reject(err) : resolve(obj)), dontModify) + this.getKeys(pattern, options, (err, obj) => (err ? reject(err) : resolve(obj)), dontModify), ); } if (typeof callback === 'function') { utils.checkObjectRights(this, null, null, options, 'list', (err, options) => { if (err) { return tools.maybeCallbackWithRedisError(callback, err); - } else { - return this._getKeys(pattern, options, callback, dontModify); } + return this._getKeys(pattern, options, callback, dontModify); }); } } @@ -3242,7 +3202,7 @@ export class ObjectsInRedisClient { keys: string[], options: CallOptions, callback?: (err?: Error | null, objs?: ioBroker.AnyObject[]) => void, - dontModify?: boolean + dontModify?: boolean, ): Promise { if (!keys) { return tools.maybeCallbackWithError(callback, 'no keys'); @@ -3322,13 +3282,13 @@ export class ObjectsInRedisClient { keys: string[], options: CallOptions | null, callback: (err?: Error | null, objs?: ioBroker.AnyObject[]) => void, - dontModify?: boolean + dontModify?: boolean, ): void; getObjects( keys: string[], options?: CallOptions | null, callback?: (err?: Error | null, objs?: ioBroker.AnyObject[]) => void, - dontModify?: boolean + dontModify?: boolean, ): void | Promise { if (typeof options === 'function') { callback = options; @@ -3337,7 +3297,7 @@ export class ObjectsInRedisClient { if (!callback) { return new Promise((resolve, reject) => // @ts-expect-error need to clarify, that objs is not undefined if no error is provided - this.getObjects(keys, options, (err, objs) => (err ? reject(err) : resolve(objs)), dontModify) + this.getObjects(keys, options, (err, objs) => (err ? reject(err) : resolve(objs)), dontModify), ); } @@ -3348,9 +3308,8 @@ export class ObjectsInRedisClient { utils.checkObjectRights(this, null, null, options, CONSTS.ACCESS_READ, (err, options) => { if (err) { return tools.maybeCallbackWithRedisError(callback, err); - } else { - return this._getObjects(keys, options, callback, dontModify); } + return this._getObjects(keys, options, callback, dontModify); }); } } @@ -3362,7 +3321,7 @@ export class ObjectsInRedisClient { private async _getObjectsByPattern( pattern: string, options: CallOptions, - callback: (err?: Error | null, objs?: ioBroker.AnyObject[]) => void + callback: (err?: Error | null, objs?: ioBroker.AnyObject[]) => void, ): Promise { if (!pattern || typeof pattern !== 'string') { return tools.maybeCallbackWithError(callback, `invalid pattern ${JSON.stringify(pattern)}`); @@ -3391,12 +3350,12 @@ export class ObjectsInRedisClient { getObjectsByPattern( pattern: string, options: CallOptions | null, - callback: (err?: Error | null, objs?: ioBroker.AnyObject[]) => void + callback: (err?: Error | null, objs?: ioBroker.AnyObject[]) => void, ): void; getObjectsByPattern( pattern: string, options: CallOptions | null, - callback?: (err?: Error | null, objs?: ioBroker.AnyObject[]) => void + callback?: (err?: Error | null, objs?: ioBroker.AnyObject[]) => void, ): void | Promise { if (typeof options === 'function') { callback = options; @@ -3404,7 +3363,7 @@ export class ObjectsInRedisClient { } if (!callback) { return new Promise((resolve, reject) => - this.getObjectsByPattern(pattern, options, (err, obj) => (err ? reject(err) : resolve(obj))) + this.getObjectsByPattern(pattern, options, (err, obj) => (err ? reject(err) : resolve(obj))), ); } if (options && options.acl) { @@ -3414,23 +3373,22 @@ export class ObjectsInRedisClient { utils.checkObjectRights(this, null, null, options, CONSTS.ACCESS_READ, (err, options) => { if (err) { return tools.maybeCallbackWithRedisError(callback, err); - } else { - return this._getObjectsByPattern(pattern, options, callback!); } + return this._getObjectsByPattern(pattern, options, callback); }); } } getObjectsByPatternAsync(pattern: string, options: CallOptions): Promise { return new Promise((resolve, reject) => - this.getObjectsByPattern(pattern, options, (err, objs) => (err ? reject(err) : resolve(objs))) + this.getObjectsByPattern(pattern, options, (err, objs) => (err ? reject(err) : resolve(objs))), ); } private async _setObject( id: T, obj: ioBroker.SettableObject>, - options: CallOptions + options: CallOptions, ): ioBroker.SetObjectPromise { if (!id || typeof id !== 'string' || utils.REG_CHECK_ID.test(id)) { throw new Error(`Invalid ID: ${id}`); @@ -3595,7 +3553,7 @@ export class ObjectsInRedisClient { // the old obj had a type which differs from the new type -> rem old, add new commands.push( ['sadd', `${this.setNamespace}object.type.${obj.type}`, this.objNamespace + id], - ['srem', `${this.setNamespace}object.type.${oldObj.type}`, this.objNamespace + id] + ['srem', `${this.setNamespace}object.type.${oldObj.type}`, this.objNamespace + id], ); } else if (oldObj?.type && !obj.type) { // the oldObj had a type, the new one has no -> rem @@ -3631,14 +3589,14 @@ export class ObjectsInRedisClient { setObject( id: T, - obj: ioBroker.SettableObject> + obj: ioBroker.SettableObject>, ): Promise>; // method called without options setObject( id: T, obj: ioBroker.SettableObject>, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void | Promise>; // method called with options @@ -3646,7 +3604,7 @@ export class ObjectsInRedisClient { id: T, obj: ioBroker.SettableObject>, options?: CallOptions | null, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void | Promise>; /** @@ -3663,7 +3621,7 @@ export class ObjectsInRedisClient { id: T, obj: ioBroker.SettableObject>, options?: CallOptions | null, - callback?: ioBroker.SetObjectCallback + callback?: ioBroker.SetObjectCallback, ): void | Promise> { if (typeof options === 'function') { callback = options; @@ -3671,7 +3629,7 @@ export class ObjectsInRedisClient { } if (!callback) { return new Promise((resolve, reject) => - this.setObject(id, obj, options, (err, res) => (err ? reject(err) : resolve(res))) + this.setObject(id, obj, options, (err, res) => (err ? reject(err) : resolve(res))), ); } if (options && options.acl) { @@ -3682,13 +3640,12 @@ export class ObjectsInRedisClient { // do not use options from checkObjectRights because this will mess up configured default acl if (err) { return tools.maybeCallbackWithRedisError(callback, err); - } else { - try { - const res = await this._setObject(id, obj, options || {}); - return tools.maybeCallbackWithError(callback, null, res); - } catch (e) { - return tools.maybeCallbackWithError(callback, e); - } + } + try { + const res = await this._setObject(id, obj, options || {}); + return tools.maybeCallbackWithError(callback, null, res); + } catch (e) { + return tools.maybeCallbackWithError(callback, e); } }); } @@ -3703,11 +3660,11 @@ export class ObjectsInRedisClient { setObjectAsync( id: string, obj: ioBroker.SettableObject, - options?: CallOptions | null + options?: CallOptions | null, ): Promise> { return new Promise((resolve, reject) => // @ts-expect-error TODO we are returning type Object for ease of use to devs, but formally these are AnyObjects, e.g. not guaranteed to have common - this.setObject(id, obj, options, (err, res) => (err ? reject(err) : resolve(res))) + this.setObject(id, obj, options, (err, res) => (err ? reject(err) : resolve(res))), ); } @@ -3792,7 +3749,7 @@ export class ObjectsInRedisClient { } if (!callback) { return new Promise((resolve, reject) => - this.delObject(id, options, err => (err ? reject(err) : resolve())) + this.delObject(id, options, err => (err ? reject(err) : resolve())), ); } @@ -3802,13 +3759,12 @@ export class ObjectsInRedisClient { utils.checkObjectRights(this, null, null, options, CONSTS.ACCESS_DELETE, async (err, options) => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - try { - await this._delObject(id, options); - return tools.maybeCallback(callback); - } catch (e) { - return tools.maybeCallbackWithRedisError(callback, e); - } + } + try { + await this._delObject(id, options); + return tools.maybeCallback(callback); + } catch (e) { + return tools.maybeCallbackWithRedisError(callback, e); } }); } @@ -3838,13 +3794,13 @@ export class ObjectsInRedisClient { private async _applyViewFunc( func: ObjectViewFunction, params?: ioBroker.GetObjectViewParams, - options: CallOptions = {} + options: CallOptions = {}, ): ioBroker.GetObjectViewPromise { if (!this.client) { throw new Error(ERRORS.ERROR_DB_CLOSED); } const result: ViewFuncResult = { - rows: [] + rows: [], }; /** @@ -3859,17 +3815,15 @@ export class ObjectsInRedisClient { return arr.filter(obj => { if (included.has(obj.id) || obj.value === null) { return false; - } else { - included.set(obj.id, true); - return true; } - }); - } else { - return arr.filter(obj => { - // only filter parse Errors - return obj.value !== null; + included.set(obj.id, true); + return true; }); } + return arr.filter(obj => { + // only filter parse Errors + return obj.value !== null; + }); }; params = params || {}; @@ -3887,7 +3841,7 @@ export class ObjectsInRedisClient { } const matches: string[] | null = func.map.match( - /if\s\(doc\.type\s?===?\s?'(\w+)'\)\semit\(([^,]+),\s?doc\s?\)/ + /if\s\(doc\.type\s?===?\s?'(\w+)'\)\semit\(([^,]+),\s?doc\s?\)/, ); // filter by type @@ -3909,7 +3863,7 @@ export class ObjectsInRedisClient { params.endkey, matches[1], cursor, - `${this.setNamespace}object.type.${matches[1]}` + `${this.setNamespace}object.type.${matches[1]}`, ]); } catch (e) { this.log.warn(`${this.namespace} Cannot get view: ${e.message}`); @@ -3945,16 +3899,13 @@ export class ObjectsInRedisClient { if (typeof obj.common.name === 'object') { if (obj.common.name.en) { return { id: obj.common.name.en, value: obj }; - } else { - return { id: JSON.stringify(obj.common.name), value: obj }; } - } else { - return { id: obj.common.name, value: obj }; + return { id: JSON.stringify(obj.common.name), value: obj }; } - } else { - this.log.error(`${this.namespace} Cannot filter "${matches[2]}": ${JSON.stringify(obj)}`); - return { id: 'parseError', value: null }; + return { id: obj.common.name, value: obj }; } + this.log.error(`${this.namespace} Cannot filter "${matches[2]}": ${JSON.stringify(obj)}`); + return { id: 'parseError', value: null }; }); if (currRows.length) { result.rows = [...result.rows, ...currRows]; @@ -4001,7 +3952,7 @@ export class ObjectsInRedisClient { params.startkey, params.endkey, cursor, - `${this.setNamespace}object.type.script` + `${this.setNamespace}object.type.script`, ]); } catch (e) { this.log.warn(`${this.namespace} Cannot get "scripts" view: ${e.message}`); @@ -4059,7 +4010,7 @@ export class ObjectsInRedisClient { params.startkey, params.endkey, cursor, - `${this.setNamespace}object.type.channel` + `${this.setNamespace}object.type.channel`, ]); } catch (e) { this.log.warn(`${this.namespace} Cannot get view: ${e.message}`); @@ -4114,7 +4065,7 @@ export class ObjectsInRedisClient { params.startkey, params.endkey, cursor, - `${this.setNamespace}object.type.state` + `${this.setNamespace}object.type.state`, ]); } catch (e) { this.log.warn(`${this.namespace} Cannot get view ${e.message}`); @@ -4168,7 +4119,7 @@ export class ObjectsInRedisClient { params.startkey, params.endkey, cursor, - `${this.setNamespace}object.common.custom` + `${this.setNamespace}object.common.custom`, ]); } catch (e) { this.log.warn(`${this.namespace} Cannot get view: ${e.message}`); @@ -4207,109 +4158,107 @@ export class ObjectsInRedisClient { // apply filter if needed result.rows = filterEntries(result.rows, filterRequired); return result; + } + if (!wildCardLastPos) { + this.log.debug( + `${this.namespace} Search can't be optimized because wildcard not at the end, fallback to keys!: ${func.map}`, + ); } else { - if (!wildCardLastPos) { - this.log.debug( - `${this.namespace} Search can't be optimized because wildcard not at the end, fallback to keys!: ${func.map}` - ); - } else { - this.log.debug(`${this.namespace} No suitable Lua script, fallback to keys!: ${func.map}`); - } + this.log.debug(`${this.namespace} No suitable Lua script, fallback to keys!: ${func.map}`); + } - let searchKeys = `${this.objNamespace}*`; - if (wildcardPos !== -1) { - // Wildcard included - searchKeys = this.objNamespace + params.endkey.replace(/\u9999/g, '*'); - } + let searchKeys = `${this.objNamespace}*`; + if (wildcardPos !== -1) { + // Wildcard included + searchKeys = this.objNamespace + params.endkey.replace(/\u9999/g, '*'); + } - let keys; - keys = await this._getKeysViaScan(searchKeys); + let keys; + keys = await this._getKeysViaScan(searchKeys); - if (!this.client) { - throw new Error(ERRORS.ERROR_DB_CLOSED); - } + if (!this.client) { + throw new Error(ERRORS.ERROR_DB_CLOSED); + } - const endAfterWildcard = params.endkey.substr(wildcardPos + 1); - params.startkey = this.objNamespace + params.startkey; - params.endkey = this.objNamespace + params.endkey; + const endAfterWildcard = params.endkey.substr(wildcardPos + 1); + params.startkey = this.objNamespace + params.startkey; + params.endkey = this.objNamespace + params.endkey; - keys = keys.sort().filter(key => { - if (key && !utils.REG_CHECK_ID.test(key)) { - if (params && wildcardPos > 0) { - if (params.startkey && key < params.startkey) { - return false; - } - if (params.endkey && key > params.endkey) { - return false; - } - } else if (params && wildcardPos === 0) { - if (!key.endsWith(endAfterWildcard)) { - return false; - } + keys = keys.sort().filter(key => { + if (key && !utils.REG_CHECK_ID.test(key)) { + if (params && wildcardPos > 0) { + if (params.startkey && key < params.startkey) { + return false; + } + if (params.endkey && key > params.endkey) { + return false; + } + } else if (params && wildcardPos === 0) { + if (!key.endsWith(endAfterWildcard)) { + return false; } - return true; - } else { - return false; } - }); + return true; + } + return false; + }); + + let objs: (null | string)[]; + try { + objs = await this.client.mget(keys); + } catch { + objs = []; + } - let objs: (null | string)[]; + const _emit_ = (id: string, obj: ioBroker.AnyObject): void => { + result.rows.push({ id: id, value: obj }); + }; + + const f = eval(`(${func.map.replace(/^function\(([a-z0-9A-Z_]+)\)/g, 'function($1, emit)')})`); + + for (let i = 0; i < keys.length; i++) { + const strObj = objs[i]; + let obj: ioBroker.AnyObject | null; try { - objs = await this.client.mget(keys); + obj = strObj !== null ? JSON.parse(strObj) : null; } catch { - objs = []; + this.log.error(`${this.namespace} Cannot parse JSON ${keys[i]}: ${objs[i]}`); + continue; + } + if (!utils.checkObject(obj, options, CONSTS.ACCESS_READ)) { + continue; } - const _emit_ = (id: string, obj: ioBroker.AnyObject): void => { - result.rows.push({ id: id, value: obj }); - }; - - const f = eval(`(${func.map.replace(/^function\(([a-z0-9A-Z_]+)\)/g, 'function($1, emit)')})`); - - for (let i = 0; i < keys.length; i++) { - const strObj = objs[i]; - let obj: ioBroker.AnyObject | null; + if (obj) { try { - obj = strObj !== null ? JSON.parse(strObj) : null; - } catch { - this.log.error(`${this.namespace} Cannot parse JSON ${keys[i]}: ${objs[i]}`); - continue; - } - if (!utils.checkObject(obj, options, CONSTS.ACCESS_READ)) { - continue; - } - - if (obj) { - try { - f(obj, _emit_); - } catch (e) { - this.log.error(`${this.namespace} Cannot execute map: ${e.message}`); - } + f(obj, _emit_); + } catch (e) { + this.log.error(`${this.namespace} Cannot execute map: ${e.message}`); } } - // Calculate max - if (func.reduce === '_stats') { - let max = null; - for (let i = 0; i < result.rows.length; i++) { - if (max === null || result.rows[i].value > max) { - max = result.rows[i].value; - } - } - if (max !== null) { - result.rows = [{ id: '_stats', value: { max: max } }]; - } else { - result.rows = []; + } + // Calculate max + if (func.reduce === '_stats') { + let max = null; + for (let i = 0; i < result.rows.length; i++) { + if (max === null || result.rows[i].value > max) { + max = result.rows[i].value; } } - return result; + if (max !== null) { + result.rows = [{ id: '_stats', value: { max: max } }]; + } else { + result.rows = []; + } } + return result; } private async _getObjectView( design: Design, search: Search, params?: ioBroker.GetObjectViewParams, - options?: CallOptions + options?: CallOptions, ): ioBroker.GetObjectViewPromise> { if (!this.client) { throw new Error(ERRORS.ERROR_DB_CLOSED); @@ -4333,10 +4282,9 @@ export class ObjectsInRedisClient { if (obj.views?.[search]) { return this._applyViewFunc(obj.views[search], params, options); - } else { - this.log.error(`${this.namespace} Cannot find search "${search}" in "${design}"`); - throw new Error(`Cannot find search "${search}" in "${design}"`); } + this.log.error(`${this.namespace} Cannot find search "${search}" in "${design}"`); + throw new Error(`Cannot find search "${search}" in "${design}"`); } else { this.log.error(`${this.namespace} Cannot find view "${design}" for search "${search}"`); throw new Error(`Cannot find view "${design}"`); @@ -4348,7 +4296,7 @@ export class ObjectsInRedisClient { design: Design, search: Search, params?: ioBroker.GetObjectViewParams, - options?: CallOptions | null + options?: CallOptions | null, ): ioBroker.GetObjectViewPromise>; // callback and options provided, we send result in callback @@ -4357,7 +4305,7 @@ export class ObjectsInRedisClient { search: Search, params: ioBroker.GetObjectViewParams | undefined, options: CallOptions | undefined | null, - callback: ioBroker.GetObjectViewCallback> + callback: ioBroker.GetObjectViewCallback>, ): void; // callback but no options provided, we send result in callback @@ -4365,7 +4313,7 @@ export class ObjectsInRedisClient { design: Design, search: Search, params: ioBroker.GetObjectViewParams, - callback: ioBroker.GetObjectViewCallback> + callback: ioBroker.GetObjectViewCallback>, ): void; getObjectView( @@ -4373,7 +4321,7 @@ export class ObjectsInRedisClient { search: Search, params?: ioBroker.GetObjectViewParams, options?: any, - callback?: ioBroker.GetObjectViewCallback> + callback?: ioBroker.GetObjectViewCallback>, ): void | ioBroker.GetObjectViewPromise> { if (typeof options === 'function') { callback = options; @@ -4381,7 +4329,7 @@ export class ObjectsInRedisClient { } if (!callback) { return new Promise((resolve, reject) => - this.getObjectView(design, search, params, options, (err, obj) => (err ? reject(err) : resolve(obj!))) + this.getObjectView(design, search, params, options, (err, obj) => (err ? reject(err) : resolve(obj!))), ); } @@ -4393,13 +4341,12 @@ export class ObjectsInRedisClient { utils.checkObjectRights(this, null, null, options, 'list', async (err, options) => { if (err) { return tools.maybeCallbackWithRedisError(callback, err); - } else { - try { - const res = await this._getObjectView(design, search, params, options); - return tools.maybeCallbackWithError(callback, null, res); - } catch (e) { - return tools.maybeCallbackWithRedisError(callback, e); - } + } + try { + const res = await this._getObjectView(design, search, params, options); + return tools.maybeCallbackWithError(callback, null, res); + } catch (e) { + return tools.maybeCallbackWithRedisError(callback, e); } }); } @@ -4409,14 +4356,14 @@ export class ObjectsInRedisClient { design: Design, search: Search, params?: ioBroker.GetObjectViewParams, - options?: CallOptions + options?: CallOptions, ): ioBroker.GetObjectViewPromise> { return this.getObjectView(design, search, params, options); } private async _getObjectList( params: ioBroker.GetObjectListParams, - options: CallOptions + options: CallOptions, ): ioBroker.GetObjectListPromise { if (!this.client) { throw new Error(ERRORS.ERROR_DB_CLOSED); @@ -4463,7 +4410,7 @@ export class ObjectsInRedisClient { } // return rows with id and doc const result: ObjectListResult = { - rows: [] + rows: [], }; if (objs) { for (let i = 0; i < objs.length; i++) { @@ -4495,20 +4442,20 @@ export class ObjectsInRedisClient { // getObjectList is called without options with callback getObjectList( params: ioBroker.GetObjectListParams, - callback: ioBroker.GetObjectListCallback + callback: ioBroker.GetObjectListCallback, ): void; // getObjectList is called with options getObjectList>( params: ioBroker.GetObjectListParams, options?: CallOptions | null, - callback?: T + callback?: T, ): T extends ioBroker.GetObjectListCallback ? void : ioBroker.GetObjectListPromise; getObjectList( params: ioBroker.GetObjectListParams, options?: CallOptions | null, - callback?: ioBroker.GetObjectListCallback + callback?: ioBroker.GetObjectListCallback, ): void | ioBroker.GetObjectListPromise { if (typeof options === 'function') { callback = options; @@ -4516,7 +4463,7 @@ export class ObjectsInRedisClient { } if (!callback) { return new Promise((resolve, reject) => - this.getObjectList(params, options, (err, obj) => (err ? reject(err) : resolve(obj!))) + this.getObjectList(params, options, (err, obj) => (err ? reject(err) : resolve(obj!))), ); } @@ -4528,13 +4475,12 @@ export class ObjectsInRedisClient { utils.checkObjectRights(this, null, null, options, 'list', async (err, options) => { if (err) { return tools.maybeCallbackWithRedisError(callback, err); - } else { - try { - const res = await this._getObjectList(params, options || {}); - return tools.maybeCallbackWithError(callback, null, res); - } catch (e) { - return tools.maybeCallbackWithError(callback, e); - } + } + try { + const res = await this._getObjectList(params, options || {}); + return tools.maybeCallbackWithError(callback, null, res); + } catch (e) { + return tools.maybeCallbackWithError(callback, e); } }); } @@ -4549,7 +4495,7 @@ export class ObjectsInRedisClient { id: T, obj: ioBroker.PartialObject>, options: CallOptions, - callback?: (err?: Error | null, obj?: ObjectIdValue, id?: string) => void + callback?: (err?: Error | null, obj?: ObjectIdValue, id?: string) => void, ): Promise<[ObjectIdValue, string] | void> { if (!id || typeof id !== 'string' || utils.REG_CHECK_ID.test(id)) { // @ts-expect-error we fix when removing cb @@ -4670,7 +4616,7 @@ export class ObjectsInRedisClient { // the old obj had a type which differs from the new type -> rem old, add new commands.push( ['sadd', `${this.setNamespace}object.type.${obj.type}`, this.objNamespace + id], - ['srem', `${this.setNamespace}object.type.${oldObj.type}`, this.objNamespace + id] + ['srem', `${this.setNamespace}object.type.${oldObj.type}`, this.objNamespace + id], ); } else if (oldType && !oldObj.type) { // the oldObj had a type, the new one has no -> rem @@ -4709,19 +4655,19 @@ export class ObjectsInRedisClient { extendObject( id: T, obj: ioBroker.PartialObject>, - options?: ioBroker.ExtendObjectOptions | null + options?: ioBroker.ExtendObjectOptions | null, ): Promise>; extendObject( id: T, obj: ioBroker.PartialObject>, options?: ioBroker.ExtendObjectOptions | null, - callback?: ioBroker.ExtendObjectCallback + callback?: ioBroker.ExtendObjectCallback, ): void | Promise>; extendObject( id: T, obj: ioBroker.PartialObject>, options?: ioBroker.ExtendObjectOptions | null, - callback?: ioBroker.ExtendObjectCallback + callback?: ioBroker.ExtendObjectCallback, ): void | Promise> { if (typeof options === 'function') { callback = options; @@ -4729,7 +4675,7 @@ export class ObjectsInRedisClient { } if (!callback) { return new Promise((resolve, reject) => - this.extendObject(id, obj, options, (err, res) => (err ? reject(err) : resolve(res))) + this.extendObject(id, obj, options, (err, res) => (err ? reject(err) : resolve(res))), ); } @@ -4740,20 +4686,19 @@ export class ObjectsInRedisClient { utils.checkObjectRights(this, null, null, options, CONSTS.ACCESS_WRITE, (err, options) => { if (err) { return tools.maybeCallbackWithRedisError(callback, err); - } else { - // @ts-expect-error TODO we are returning type Object for ease of use to devs, but formally these are AnyObjects, e.g. not guaranteed to have common - return this._extendObject(id, obj, options, callback); } + // @ts-expect-error TODO we are returning type Object for ease of use to devs, but formally these are AnyObjects, e.g. not guaranteed to have common + return this._extendObject(id, obj, options, callback); }); } extendObjectAsync( id: string, obj: Partial, - options?: ioBroker.ExtendObjectOptions + options?: ioBroker.ExtendObjectOptions, ): Promise> { return new Promise((resolve, reject) => - this.extendObject(id, obj, options || null, (err, res) => (err ? reject(err) : resolve(res))) + this.extendObject(id, obj, options || null, (err, res) => (err ? reject(err) : resolve(res))), ); } @@ -4769,7 +4714,7 @@ export class ObjectsInRedisClient { idOrName: string, type: string | null, options: CallOptions, - callback?: ioBroker.FindObjectCallback + callback?: ioBroker.FindObjectCallback, ): void { this._getObject(idOrName, options, (err, obj) => { // Assume it is ID @@ -4779,49 +4724,48 @@ export class ObjectsInRedisClient { (!type || (obj.common && obj.common.type === type)) ) { return tools.maybeCallbackWithError(callback, null, idOrName, obj.common.name); - } else { - this._getKeys( - '*', - options, - async (err, keys) => { - if (!this.client) { - return tools.maybeCallbackWithError(callback, ERRORS.ERROR_DB_CLOSED); - } + } + this._getKeys( + '*', + options, + async (err, keys) => { + if (!this.client) { + return tools.maybeCallbackWithError(callback, ERRORS.ERROR_DB_CLOSED); + } - if (!keys || err) { - return tools.maybeCallbackWithError(callback, err); - } + if (!keys || err) { + return tools.maybeCallbackWithError(callback, err); + } - let objs; + let objs; + try { + objs = await this.client.mget(keys); + } catch (e) { + return tools.maybeCallbackWithRedisError(callback, e); + } + objs = objs || []; + // Assume it is name + for (let i = 0; i < keys.length; i++) { + const strObj = objs[i]; + let obj: ioBroker.AnyObject | null; try { - objs = await this.client.mget(keys); - } catch (e) { - return tools.maybeCallbackWithRedisError(callback, e); + obj = strObj ? JSON.parse(strObj) : null; + } catch { + this.log.error(`${this.namespace} Cannot parse JSON ${keys[i]}: ${objs[i]}`); + continue; } - objs = objs || []; - // Assume it is name - for (let i = 0; i < keys.length; i++) { - const strObj = objs[i]; - let obj: ioBroker.AnyObject | null; - try { - obj = strObj ? JSON.parse(strObj) : null; - } catch { - this.log.error(`${this.namespace} Cannot parse JSON ${keys[i]}: ${objs[i]}`); - continue; - } - if ( - obj?.common && - obj.common.name === idOrName && - (!type || ('type' in obj.common && obj.common.type === type)) - ) { - return tools.maybeCallbackWithError(callback, null, obj._id, idOrName); - } + if ( + obj?.common && + obj.common.name === idOrName && + (!type || ('type' in obj.common && obj.common.type === type)) + ) { + return tools.maybeCallbackWithError(callback, null, obj._id, idOrName); } - return tools.maybeCallbackWithError(callback, null, undefined, idOrName); - }, - true - ); - } + } + return tools.maybeCallbackWithError(callback, null, undefined, idOrName); + }, + true, + ); }); } @@ -4830,7 +4774,7 @@ export class ObjectsInRedisClient { idOrName: string, type: string | null, options: CallOptions | null, - callback: ioBroker.FindObjectCallback + callback: ioBroker.FindObjectCallback, ): void; // The user has provided a callback without options @@ -4840,14 +4784,14 @@ export class ObjectsInRedisClient { findObject( idOrName: string, type?: string | null, - options?: CallOptions | null + options?: CallOptions | null, ): Promise>; findObject( idOrName: string, type: string | null, options: CallOptions | null, - callback?: ioBroker.FindObjectCallback + callback?: ioBroker.FindObjectCallback, ): void | Promise> { if (typeof type === 'function') { callback = type; @@ -4860,7 +4804,7 @@ export class ObjectsInRedisClient { } if (!callback) { return new Promise((resolve, reject) => - this.findObject(idOrName, type, options, (err, id, _idOrName) => (err ? reject(err) : resolve(id))) + this.findObject(idOrName, type, options, (err, id, _idOrName) => (err ? reject(err) : resolve(id))), ); } @@ -4872,9 +4816,8 @@ export class ObjectsInRedisClient { utils.checkObjectRights(this, null, null, options, CONSTS.ACCESS_LIST, (err, options) => { if (err) { return tools.maybeCallbackWithError(callback, err); - } else { - return this._findObject(idOrName, type, options, callback); } + return this._findObject(idOrName, type, options, callback); }); } } @@ -4897,33 +4840,31 @@ export class ObjectsInRedisClient { private async _destroyDBHelper(keys: string[], callback: ioBroker.ErrorCallback): Promise { if (!keys || !keys.length) { return tools.maybeCallback(callback); - } else { - if (!this.client) { - return tools.maybeCallbackWithError(callback, ERRORS.ERROR_DB_CLOSED); - } + } + if (!this.client) { + return tools.maybeCallbackWithError(callback, ERRORS.ERROR_DB_CLOSED); + } - for (const id of keys) { - try { - await this.client.del(id); - } catch { - // ignore - } + for (const id of keys) { + try { + await this.client.del(id); + } catch { + // ignore } - - return tools.maybeCallback(callback); } + + return tools.maybeCallback(callback); } private async _destroyDB(callback: ioBroker.ErrorCallback): Promise { if (!this.client) { return tools.maybeCallbackWithError(callback, ERRORS.ERROR_DB_CLOSED); - } else { - try { - const keys = await this._getKeysViaScan(`${this.redisNamespace}*`); - return this._destroyDBHelper(keys, callback); - } catch (e) { - return tools.maybeCallbackWithRedisError(callback, e); - } + } + try { + const keys = await this._getKeysViaScan(`${this.redisNamespace}*`); + return this._destroyDBHelper(keys, callback); + } catch (e) { + return tools.maybeCallbackWithRedisError(callback, e); } } @@ -4937,13 +4878,11 @@ export class ObjectsInRedisClient { utils.checkObjectRights(this, null, null, options, CONSTS.ACCESS_WRITE, (err, options) => { if (err) { return tools.maybeCallbackWithRedisError(callback, err); - } else { - if (!options.acl.file.write || options.user !== CONSTS.SYSTEM_ADMIN_USER) { - return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); - } else { - return this._destroyDB(callback); - } } + if (!options.acl.file.write || options.user !== CONSTS.SYSTEM_ADMIN_USER) { + return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION); + } + return this._destroyDB(callback); }); } @@ -5125,7 +5064,7 @@ export class ObjectsInRedisClient { // 1 if added else 0 (mostly always part of the set) const migrated = await this.client.sadd( `${this.setNamespace}object.type.${obj.value.type}`, - this.objNamespace + obj.id + this.objNamespace + obj.id, ); noMigrated += migrated; } @@ -5134,7 +5073,7 @@ export class ObjectsInRedisClient { if (obj.value.common?.custom) { const migrated = await this.client.sadd( `${this.setNamespace}object.common.custom`, - this.objNamespace + obj.id + this.objNamespace + obj.id, ); noMigrated += migrated; } @@ -5176,7 +5115,7 @@ export class ObjectsInRedisClient { 3, `${this.metaNamespace}objects.primaryHost`, this.hostname, - ms + ms, ]); } @@ -5203,7 +5142,7 @@ export class ObjectsInRedisClient { 3, `${this.metaNamespace}objects.primaryHost`, this.hostname, - ms + ms, ]); } @@ -5242,7 +5181,7 @@ export class ObjectsInRedisClient { `${this.metaNamespace}objects.primaryHost`, this.hostname, this.settings.connection.options.db, - `${this.metaNamespace}objects.primaryHost` + `${this.metaNamespace}objects.primaryHost`, ]); } diff --git a/packages/db-objects-redis/src/lib/objects/objectsUtils.ts b/packages/db-objects-redis/src/lib/objects/objectsUtils.ts index b776da5f18..b78a10ed76 100644 --- a/packages/db-objects-redis/src/lib/objects/objectsUtils.ts +++ b/packages/db-objects-redis/src/lib/objects/objectsUtils.ts @@ -74,30 +74,30 @@ const defaultAcl = { read: false, write: false, create: false, - delete: false + delete: false, }, object: { list: false, read: false, write: false, create: false, - delete: false + delete: false, }, state: { list: false, read: false, write: false, create: false, - delete: false + delete: false, }, users: { list: false, read: false, write: false, create: false, - delete: false - } - } + delete: false, + }, + }, } as const; // FIXME: This should have better types. Probably Record @@ -119,16 +119,15 @@ export function getMimeType(ext: string, isTextData: boolean): FileMimeInformati const mimeInfo = getKnownMimeType(ext); if (mimeInfo) { return mimeInfo; - } else { - return { mimeType: isTextData ? 'text/plain' : 'application/octet-stream', isBinary: !isTextData }; } + return { mimeType: isTextData ? 'text/plain' : 'application/octet-stream', isBinary: !isTextData }; } export function checkFile( fileOptions: Record, options: Record, flag: any, - defaultNewAcl?: ACLObject | null + defaultNewAcl?: ACLObject | null, ): boolean { if (typeof fileOptions.acl !== 'object') { fileOptions = {}; @@ -138,7 +137,7 @@ export function checkFile( ownerGroup: (defaultNewAcl && defaultNewAcl.ownerGroup) || CONSTS.SYSTEM_ADMIN_GROUP, permissions: (defaultNewAcl && defaultNewAcl.file) || - CONSTS.ACCESS_USER_RW | CONSTS.ACCESS_GROUP_READ | CONSTS.ACCESS_EVERY_READ // '0644' + CONSTS.ACCESS_USER_RW | CONSTS.ACCESS_GROUP_READ | CONSTS.ACCESS_EVERY_READ, // '0644' }; } @@ -185,7 +184,7 @@ export function checkFileRights( name: string | null, options: Record | null | undefined, flag: CONSTS.GenericAccessFlags, - callback?: CheckFileRightsCallback + callback?: CheckFileRightsCallback, ): any { const _options = options || {}; if (!_options.user) { @@ -219,16 +218,15 @@ export function checkFileRights( objects.checkFile(id, name, _options, flag, (err: Error, options: Record, opt: any) => { if (err) { return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, options); - } else { - return tools.maybeCallbackWithError(callback, null, options, opt); } + return tools.maybeCallbackWithError(callback, null, options, opt); }); } // For users and groups function getDefaultAdminRights( acl?: ioBroker.ObjectPermissions, - _isState?: boolean + _isState?: boolean, ): Omit { return { ...acl, @@ -237,34 +235,34 @@ function getDefaultAdminRights( read: true, write: true, create: true, - delete: true + delete: true, }, object: { create: true, list: true, read: true, write: true, - delete: true + delete: true, }, users: { create: true, list: true, read: true, write: true, - delete: true + delete: true, }, state: { read: true, write: true, delete: true, create: true, - list: true + list: true, }, other: { execute: false, http: false, - sendto: false - } + sendto: false, + }, }; } @@ -274,13 +272,13 @@ type GetUserGroupCallback = ( err: Error | null | undefined, user: string, groups: string[], - acl: ioBroker.ObjectPermissions + acl: ioBroker.ObjectPermissions, ) => void; export function getUserGroup( objects: any, user: ioBroker.ObjectIDs.User, - callback?: GetUserGroupCallback + callback?: GetUserGroupCallback, ): Promise | void { if (!user || typeof user !== 'string' || !user.startsWith(USER_STARTS_WITH)) { console.log(`invalid user name: ${user}`); @@ -290,7 +288,7 @@ export function getUserGroup( `invalid user name: ${user}`, deepClone(user), [], - deepClone(defaultAcl.acl) + deepClone(defaultAcl.acl), ); } if (users[user]) { @@ -302,7 +300,12 @@ export function getUserGroup( objects.getObjectList( { startkey: 'system.group.', endkey: 'system.group.\u9999' }, { checked: true }, - (err: Error, arr: { rows: Array> }) => { + ( + err: Error, + arr: { + rows: Array>; + }, + ) => { if (err) { error = err; } @@ -325,7 +328,12 @@ export function getUserGroup( objects.getObjectList( { startkey: 'system.user.', endkey: 'system.user.\u9999' }, { checked: true }, - (err?: Error | null, arr?: { rows: ioBroker.GetObjectListItem[] }) => { + ( + err?: Error | null, + arr?: { + rows: ioBroker.GetObjectListItem[]; + }, + ) => { if (err) { error = err; } @@ -455,15 +463,21 @@ export function getUserGroup( error, user, users[user] ? users[user].groups : [], - users[user] ? users[user].acl : deepClone(defaultAcl.acl) + users[user] ? users[user].acl : deepClone(defaultAcl.acl), ); - } + }, ); - } + }, ); } -export function sanitizePath(id: string, name: string): { id: string; name: string } { +export function sanitizePath( + id: string, + name: string, +): { + id: string; + name: string; +} { if (!name) { name = ''; } @@ -479,12 +493,12 @@ export function sanitizePath(id: string, name: string): { id: string; name: stri id = id.replace(/\.\./g, ''); // do not allow to write in parent directories if (name.includes('..')) { - name = path.normalize('/' + name); + name = path.normalize(`/${name}`); } if (name.includes('..')) { // Also after normalization we still have .. in it - should not happen if normalize worked correctly name = name.replace(/\.\./g, ''); - name = path.normalize('/' + name); + name = path.normalize(`/${name}`); } name = name.replace(/\\/g, '/'); // replace win path backslashes @@ -499,7 +513,7 @@ export function sanitizePath(id: string, name: string): { id: string; name: stri export function checkObject( obj: ioBroker.AnyObject | FileObject | null, options: Record, - flag: CONSTS.GenericAccessFlags + flag: CONSTS.GenericAccessFlags, ): boolean { // read rights of object if (!obj || !('common' in obj) || !obj.acl || flag === CONSTS.ACCESS_LIST) { @@ -552,7 +566,7 @@ export function checkObjectRights( object: ioBroker.Object | null, options: Record | null | undefined, flag: CONSTS.GenericAccessFlags, - callback: (err: Error | null | undefined, options: Record) => void + callback: (err: Error | null | undefined, options: Record) => void, ): void | Promise> { options = options || {}; @@ -563,7 +577,7 @@ export function checkObjectRights( params: options, group: CONSTS.SYSTEM_ADMIN_GROUP, groups: [CONSTS.SYSTEM_ADMIN_GROUP], - acl: getDefaultAdminRights() + acl: getDefaultAdminRights(), }; } @@ -657,7 +671,6 @@ export function checkObjectRights( if (id && !checkObject(object, options, flag)) { return tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, options); - } else { - return tools.maybeCallbackWithError(callback, null, options); } + return tools.maybeCallbackWithError(callback, null, options); } diff --git a/packages/db-states-file/src/lib/states/statesInMemFileDB.js b/packages/db-states-file/src/lib/states/statesInMemFileDB.js index 8cce5356cf..5291b68098 100644 --- a/packages/db-states-file/src/lib/states/statesInMemFileDB.js +++ b/packages/db-states-file/src/lib/states/statesInMemFileDB.js @@ -34,13 +34,13 @@ import { tools } from '@iobroker/db-base'; /** * This class inherits InMemoryFileDB class and adds all relevant logic for states * including the available methods for use by js-controller directly - **/ + */ export class StatesInMemoryFileDB extends InMemoryFileDB { constructor(settings) { settings = settings || {}; settings.fileDB = settings.fileDB || { fileName: 'states.json', - backupDirName: 'backup-objects' + backupDirName: 'backup-objects', }; super(settings); @@ -154,8 +154,8 @@ export class StatesInMemoryFileDB extends InMemoryFileDB { /** * Get value of given meta id * - * @param {string} id - * @returns {*} + * @param id + * @returns */ getMeta(id) { const meta = this._ensureMetaDict(); @@ -165,8 +165,8 @@ export class StatesInMemoryFileDB extends InMemoryFileDB { /** * Sets given value to id in metaNamespace * - * @param {string} id - * @param {string} value + * @param id + * @param value */ setMeta(id, value) { const meta = this._ensureMetaDict(); @@ -253,22 +253,22 @@ export class StatesInMemoryFileDB extends InMemoryFileDB { // needed by Server _subscribeMessageForClient(client, id) { - this.handleSubscribe(client, 'messagebox', 'messagebox.' + id); + this.handleSubscribe(client, 'messagebox', `messagebox.${id}`); } // needed by Server _unsubscribeMessageForClient(client, id) { - this.handleUnsubscribe(client, 'messagebox', 'messagebox.' + id); + this.handleUnsubscribe(client, 'messagebox', `messagebox.${id}`); } // needed by Server _subscribeLogForClient(client, id) { - this.handleSubscribe(client, 'log', 'log.' + id); + this.handleSubscribe(client, 'log', `log.${id}`); } // needed by Server _unsubscribeLogForClient(client, id) { - this.handleUnsubscribe(client, 'log', 'log.' + id); + this.handleUnsubscribe(client, 'log', `log.${id}`); } // needed by Server @@ -291,7 +291,7 @@ export class StatesInMemoryFileDB extends InMemoryFileDB { timeout: setTimeout(() => { this.sessionExpires[id].timeout = null; this._expireSession(id); - }, expireDate) + }, expireDate), }; } else { this.sessionExpires[id] = { @@ -299,7 +299,7 @@ export class StatesInMemoryFileDB extends InMemoryFileDB { timeout: setTimeout(() => { this.sessionExpires[id].timeout = null; this._handleSessionExpire(id, expireDate); - }, this.ONE_DAY_IN_SECS) + }, this.ONE_DAY_IN_SECS), }; } } diff --git a/packages/db-states-file/src/lib/states/statesInMemServerClass.js b/packages/db-states-file/src/lib/states/statesInMemServerClass.js index feb21f2c45..0bec2490ae 100644 --- a/packages/db-states-file/src/lib/states/statesInMemServerClass.js +++ b/packages/db-states-file/src/lib/states/statesInMemServerClass.js @@ -22,7 +22,7 @@ export class StatesInMemoryServerClass extends StatesInRedisClient { hostname: settings.hostname, connected: () => { this.connectDb(); // now that server is connected also connect client - } + }, }; this.statesServer = new StatesInMemoryServer(serverSettings); } diff --git a/packages/db-states-file/src/lib/states/statesInMemServerRedis.js b/packages/db-states-file/src/lib/states/statesInMemServerRedis.js index 8533b57b3b..28075b2fee 100644 --- a/packages/db-states-file/src/lib/states/statesInMemServerRedis.js +++ b/packages/db-states-file/src/lib/states/statesInMemServerRedis.js @@ -39,25 +39,26 @@ import { EXIT_CODES } from '@iobroker/js-controller-common-db'; /** * This class inherits statesInMemoryFileDB class and adds socket.io communication layer * to access the methods via socket.io - **/ + */ export class StatesInMemoryServer extends StatesInMemoryFileDB { /** * Constructor + * * @param settings State and InMem-DB settings */ constructor(settings) { super(settings); this.serverConnections = {}; - this.namespaceStates = (this.settings.redisNamespace || 'io') + '.'; - this.namespaceMsg = (this.settings.namespaceMsg || 'messagebox') + '.'; - this.namespaceLog = (this.settings.namespaceLog || 'log') + '.'; - this.namespaceSession = (this.settings.namespaceSession || 'session') + '.'; + this.namespaceStates = `${this.settings.redisNamespace || 'io'}.`; + this.namespaceMsg = `${this.settings.namespaceMsg || 'messagebox'}.`; + this.namespaceLog = `${this.settings.namespaceLog || 'log'}.`; + this.namespaceSession = `${this.settings.namespaceSession || 'session'}.`; //this.namespaceStatesLen = this.namespaceStates.length; this.namespaceMsgLen = this.namespaceMsg.length; this.namespaceLogLen = this.namespaceLog.length; //this.namespaceSessionlen = this.namespaceSession.length; - this.metaNamespace = (this.settings.metaNamespace || 'meta') + '.'; + this.metaNamespace = `${this.settings.metaNamespace || 'meta'}.`; this.metaNamespaceLen = this.metaNamespace.length; this.open() @@ -68,7 +69,7 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { this.log.debug( `${this.namespace} ${settings.secure ? 'Secure ' : ''} Redis inMem-states listening on port ${ this.settings.port || 9000 - }` + }`, ); if (typeof this.settings.connected === 'function') { @@ -77,7 +78,7 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { }) .catch(e => { this.log.error( - `${this.namespace} Cannot start inMem-states on port ${this.settings.port || 9000}: ${e.message}` + `${this.namespace} Cannot start inMem-states on port ${this.settings.port || 9000}: ${e.message}`, ); process.exit(EXIT_CODES.NO_CONNECTION_TO_STATES_DB); }); @@ -85,10 +86,10 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { /** * Separate Namespace from ID and return both + * * @param idWithNamespace ID or Array of IDs containing a redis namespace and the real ID - * @returns {{namespace: (string), id: string}} Object with namespace and the + * @returns Object with namespace and the * ID/Array of IDs without the namespace - * @private */ _normalizeId(idWithNamespace) { let ns = this.namespaceStates; @@ -116,11 +117,12 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { /** * Publish a subscribed value to one of the redis connections in redis format + * * @param client Instance of RedisHandler * @param type Type of subscribed key * @param id Subscribed ID * @param obj Object to publish - * @returns {number} Publish counter 0 or 1 depending on if send out or not + * @returns Publish counter 0 or 1 depending on if send out or not */ publishToClients(client, type, id, obj) { if (!client._subscribe || !client._subscribe[type]) { @@ -158,8 +160,8 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { /** * Register all event listeners for Handler and implement the relevant logic + * * @param handler RedisHandler instance - * @private */ _socketEvents(handler) { let connectionName = null; @@ -214,12 +216,12 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { const result = states.map(el => (el ? JSON.stringify(el) : null)); handler.sendArray(responseId, result); } catch (err) { - handler.sendError(responseId, new Error('ERROR _getStates: ' + err.message)); + handler.sendError(responseId, new Error(`ERROR _getStates: ${err.message}`)); } } else { handler.sendError( responseId, - new Error(`MGET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`MGET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -255,7 +257,7 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`GET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`GET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -277,7 +279,7 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`SET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`SET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -293,7 +295,7 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { if (isNaN(expire)) { return void handler.sendError( responseId, - new Error(`ERROR parsing expire value ${data[1].toString('utf-8')}`) + new Error(`ERROR parsing expire value ${data[1].toString('utf-8')}`), ); } this._setStateDirect(id, state, expire); @@ -308,7 +310,7 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { if (isNaN(expire)) { return void handler.sendError( responseId, - new Error(`ERROR parsing expire value ${data[1].toString('utf-8')}`) + new Error(`ERROR parsing expire value ${data[1].toString('utf-8')}`), ); } this._setSession(id, expire, state); @@ -319,7 +321,7 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`SETEX-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`SETEX-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -336,7 +338,7 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`DEL-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`DEL-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -359,7 +361,7 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`KEYS-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`KEYS-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -386,7 +388,7 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`PSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`PSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -406,7 +408,7 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { } else { handler.sendError( responseId, - new Error(`PUNSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`PUNSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -458,7 +460,8 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { /** * Return connected RedisHandlers/Connections - * @returns {{}|*} + * + * @returns */ getClients() { return this.serverConnections; @@ -491,8 +494,8 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { /** * Initialize RedisHandler for a new network connection + * * @param socket Network socket - * @private */ _initSocket(socket) { this.settings.connection.enhancedLogging && @@ -500,27 +503,27 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { const options = { log: this.log, - logScope: this.namespace + ' States', + logScope: `${this.namespace} States`, handleAsBuffers: true, - enhancedLogging: this.settings.connection.enhancedLogging + enhancedLogging: this.settings.connection.enhancedLogging, }; const handler = new RedisHandler(socket, options); this._socketEvents(handler); - this.serverConnections[socket.remoteAddress + ':' + socket.remotePort] = handler; + this.serverConnections[`${socket.remoteAddress}:${socket.remotePort}`] = handler; socket.on('close', () => { - if (this.serverConnections[socket.remoteAddress + ':' + socket.remotePort]) { - delete this.serverConnections[socket.remoteAddress + ':' + socket.remotePort]; + if (this.serverConnections[`${socket.remoteAddress}:${socket.remotePort}`]) { + delete this.serverConnections[`${socket.remoteAddress}:${socket.remotePort}`]; } }); } /** * Initialize Redis Server + * * @param settings Settings object - * @private - * @return {Promise} + * @returns */ _initRedisServer(settings) { return new Promise((resolve, reject) => { @@ -533,15 +536,15 @@ export class StatesInMemoryServer extends StatesInMemoryFileDB { this.log.info( `${this.namespace} ${settings.secure ? 'Secure ' : ''} Error inMem-objects listening on port ${ settings.port || 9001 - }: ${err}` - ) + }: ${err}`, + ), ); this.server.on('connection', socket => this._initSocket(socket)); this.server.listen( settings.port || 9000, settings.host === 'localhost' ? getLocalAddress() : settings.host ? settings.host : undefined, - () => resolve() + () => resolve(), ); } catch (err) { reject(err); diff --git a/packages/db-states-jsonl/src/lib/states/statesInMemJsonlDB.js b/packages/db-states-jsonl/src/lib/states/statesInMemJsonlDB.js index b0b52ef0d1..4957381ee1 100644 --- a/packages/db-states-jsonl/src/lib/states/statesInMemJsonlDB.js +++ b/packages/db-states-jsonl/src/lib/states/statesInMemJsonlDB.js @@ -37,11 +37,11 @@ import { tools } from '@iobroker/js-controller-common-db'; /** * Normalizes options for the JsonlDB - * @param {Record | undefined} conf The jsonlOptions options from iobroker.json - * @returns {import("@alcalzone/jsonl-db").JsonlDBOptions} + * + * @param conf The jsonlOptions options from iobroker.json + * @returns */ function normalizeJsonlOptions(conf = {}) { - /** @type {import("@alcalzone/jsonl-db").JsonlDBOptions} */ const ret = { autoCompress: { // Compress when the number of uncompressed entries has grown a lot @@ -49,12 +49,12 @@ function normalizeJsonlOptions(conf = {}) { sizeFactorMinimumSize: 50000, // Compress at least daily to avoid a huge file when DBs have few objects // but big binary states are updated regularly - intervalMs: 1000 * 60 * 60 * 23 + intervalMs: 1000 * 60 * 60 * 23, }, ignoreReadErrors: true, throttleFS: { intervalMs: 60000, - maxBufferedCommands: 2000 + maxBufferedCommands: 2000, }, lockfile: { // 5 retries starting at 250ms add up to just above 2s, @@ -62,8 +62,8 @@ function normalizeJsonlOptions(conf = {}) { retries: 5, retryMinTimeoutMs: 250, // This makes sure the DB stays locked for maximum 2s even if the process crashes - staleMs: 2000 - } + staleMs: 2000, + }, }; // Be really careful what we allow here. Incorrect settings may cause problems in production. @@ -104,23 +104,22 @@ function normalizeJsonlOptions(conf = {}) { /** * This class inherits InMemoryFileDB class and adds all relevant logic for states * including the available methods for use by js-controller directly - **/ + */ export class StatesInMemoryJsonlDB extends StatesInMemoryFileDB { constructor(settings) { settings = settings || {}; // Not really used settings.fileDB = { fileName: 'states.json', - backupDirName: 'backup-objects' + backupDirName: 'backup-objects', }; const jsonlOptions = normalizeJsonlOptions(settings.connection.jsonlOptions); settings.jsonlDB = { - fileName: 'states.jsonl' + fileName: 'states.jsonl', }; super(settings); - /** @type {JsonlDB} */ this._db = new JsonlDB(path.join(this.dataDir, settings.jsonlDB.fileName), jsonlOptions); } @@ -131,27 +130,43 @@ export class StatesInMemoryJsonlDB extends StatesInMemoryFileDB { // Create an object-like wrapper around the internal Map this.dataset = new Proxy(this._db, { - /** @param {any} prop */ + /** + * @param target + * @param prop + */ get(target, prop) { return target.get(prop); }, - /** @param {any} prop */ + /** + * @param target + * @param prop + */ has(target, prop) { return target.has(prop); }, - /** @param {any} prop */ + /** + * @param target + * @param prop + * @param value + */ set(target, prop, value) { target.set(prop, value); return true; }, - /** @param {any} prop */ + /** + * @param target + * @param prop + */ deleteProperty(target, prop) { return target.delete(prop); }, ownKeys(target) { return [...target.keys()]; }, - /** @param {any} prop */ + /** + * @param target + * @param prop + */ getOwnPropertyDescriptor(target, prop) { if (!target.has(prop)) { return undefined; @@ -160,9 +175,9 @@ export class StatesInMemoryJsonlDB extends StatesInMemoryFileDB { configurable: true, enumerable: true, writable: true, - value: target.get(prop) + value: target.get(prop), }; - } + }, }); if (this.settings.backup && this.settings.backup.period && !this.settings.backup.disabled) { @@ -174,13 +189,14 @@ export class StatesInMemoryJsonlDB extends StatesInMemoryFileDB { /** * Checks if an existing file DB should be migrated to JSONL - * @returns {Promise} true if the file DB was migrated. false if not. + * + * @returns true if the file DB was migrated. false if not. * If this returns true, the jsonl DB was opened and doesn't need to be opened again. */ async _maybeMigrateFileDB() { const jsonlFileName = path.join(this.dataDir, this.settings.jsonlDB.fileName); const jsonFileName = path.join(this.dataDir, this.settings.fileDB.fileName); - const bakFileName = path.join(this.dataDir, this.settings.fileDB.fileName + '.bak'); + const bakFileName = path.join(this.dataDir, `${this.settings.fileDB.fileName}.bak`); // Check the timestamps of each file, defaulting to 0 if they don't exist let jsonlTimeStamp = 0; @@ -212,7 +228,6 @@ export class StatesInMemoryJsonlDB extends StatesInMemoryFileDB { } // Figure out which file needs to be imported - /** @type {string} */ let importFilename; if (jsonTimeStamp > 0 && jsonTimeStamp >= bakTimeStamp && jsonTimeStamp >= jsonlTimeStamp) { importFilename = jsonFileName; @@ -258,7 +273,7 @@ export class StatesInMemoryJsonlDB extends StatesInMemoryFileDB { const tmpBackupFileName = path.join(os.tmpdir(), `${this.getTimeStr(now)}_${this.settings.jsonlDB.fileName}`); const backupFileName = path.join( this.backupDir, - `${this.getTimeStr(now)}_${this.settings.jsonlDB.fileName}.gz` + `${this.getTimeStr(now)}_${this.settings.jsonlDB.fileName}.gz`, ); if (!this._db.isOpen) { diff --git a/packages/db-states-jsonl/src/lib/states/statesInMemServerClass.js b/packages/db-states-jsonl/src/lib/states/statesInMemServerClass.js index feb21f2c45..0bec2490ae 100644 --- a/packages/db-states-jsonl/src/lib/states/statesInMemServerClass.js +++ b/packages/db-states-jsonl/src/lib/states/statesInMemServerClass.js @@ -22,7 +22,7 @@ export class StatesInMemoryServerClass extends StatesInRedisClient { hostname: settings.hostname, connected: () => { this.connectDb(); // now that server is connected also connect client - } + }, }; this.statesServer = new StatesInMemoryServer(serverSettings); } diff --git a/packages/db-states-jsonl/src/lib/states/statesInMemServerRedis.js b/packages/db-states-jsonl/src/lib/states/statesInMemServerRedis.js index 17e125a001..e95d1ac1c8 100644 --- a/packages/db-states-jsonl/src/lib/states/statesInMemServerRedis.js +++ b/packages/db-states-jsonl/src/lib/states/statesInMemServerRedis.js @@ -50,15 +50,15 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { super(settings); this.serverConnections = {}; - this.namespaceStates = (this.settings.redisNamespace || 'io') + '.'; - this.namespaceMsg = (this.settings.namespaceMsg || 'messagebox') + '.'; - this.namespaceLog = (this.settings.namespaceLog || 'log') + '.'; - this.namespaceSession = (this.settings.namespaceSession || 'session') + '.'; + this.namespaceStates = `${this.settings.redisNamespace || 'io'}.`; + this.namespaceMsg = `${this.settings.namespaceMsg || 'messagebox'}.`; + this.namespaceLog = `${this.settings.namespaceLog || 'log'}.`; + this.namespaceSession = `${this.settings.namespaceSession || 'session'}.`; //this.namespaceStatesLen = this.namespaceStates.length; this.namespaceMsgLen = this.namespaceMsg.length; this.namespaceLogLen = this.namespaceLog.length; //this.namespaceSessionlen = this.namespaceSession.length; - this.metaNamespace = (this.settings.metaNamespace || 'meta') + '.'; + this.metaNamespace = `${this.settings.metaNamespace || 'meta'}.`; this.metaNamespaceLen = this.metaNamespace.length; this.open() @@ -69,7 +69,7 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { this.log.debug( `${this.namespace} ${settings.secure ? 'Secure ' : ''} Redis inMem-states listening on port ${ this.settings.port || 9000 - }` + }`, ); if (typeof this.settings.connected === 'function') { @@ -78,7 +78,7 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { }) .catch(e => { this.log.error( - `${this.namespace} Cannot start inMem-states on port ${this.settings.port || 9000}: ${e.message}` + `${this.namespace} Cannot start inMem-states on port ${this.settings.port || 9000}: ${e.message}`, ); process.exit(EXIT_CODES.NO_CONNECTION_TO_STATES_DB); }); @@ -221,7 +221,7 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`MGET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`MGET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -257,7 +257,7 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`GET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`GET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -279,7 +279,7 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`SET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`SET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -295,7 +295,7 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { if (isNaN(expire)) { return void handler.sendError( responseId, - new Error(`ERROR parsing expire value ${data[1].toString('utf-8')}`) + new Error(`ERROR parsing expire value ${data[1].toString('utf-8')}`), ); } this._setStateDirect(id, state, expire); @@ -310,7 +310,7 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { if (isNaN(expire)) { return void handler.sendError( responseId, - new Error(`ERROR parsing expire value ${data[1].toString('utf-8')}`) + new Error(`ERROR parsing expire value ${data[1].toString('utf-8')}`), ); } this._setSession(id, expire, state); @@ -321,7 +321,7 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`SETEX-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`SETEX-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -338,7 +338,7 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`DEL-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`DEL-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -361,7 +361,7 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`KEYS-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`KEYS-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -388,7 +388,7 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`PSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`PSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -408,7 +408,7 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { } else { handler.sendError( responseId, - new Error(`PUNSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`) + new Error(`PUNSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`), ); } }); @@ -503,18 +503,18 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { const options = { log: this.log, - logScope: this.namespace + ' States', + logScope: `${this.namespace} States`, handleAsBuffers: true, - enhancedLogging: this.settings.connection.enhancedLogging + enhancedLogging: this.settings.connection.enhancedLogging, }; const handler = new RedisHandler(socket, options); this._socketEvents(handler); - this.serverConnections[socket.remoteAddress + ':' + socket.remotePort] = handler; + this.serverConnections[`${socket.remoteAddress}:${socket.remotePort}`] = handler; socket.on('close', () => { - if (this.serverConnections[socket.remoteAddress + ':' + socket.remotePort]) { - delete this.serverConnections[socket.remoteAddress + ':' + socket.remotePort]; + if (this.serverConnections[`${socket.remoteAddress}:${socket.remotePort}`]) { + delete this.serverConnections[`${socket.remoteAddress}:${socket.remotePort}`]; } }); } @@ -536,15 +536,15 @@ export class StatesInMemoryServer extends StatesInMemoryJsonlDB { this.log.info( `${this.namespace} ${settings.secure ? 'Secure ' : ''} Error inMem-objects listening on port ${ settings.port || 9001 - }: ${err}` - ) + }: ${err}`, + ), ); this.server.on('connection', socket => this._initSocket(socket)); this.server.listen( settings.port || 9000, settings.host === 'localhost' ? getLocalAddress() : settings.host ? settings.host : undefined, - () => resolve() + () => resolve(), ); } catch (err) { reject(err); diff --git a/packages/db-states-redis/src/lib/states/statesInRedisClient.ts b/packages/db-states-redis/src/lib/states/statesInRedisClient.ts index e9cbd96b29..c80fe154b1 100644 --- a/packages/db-states-redis/src/lib/states/statesInRedisClient.ts +++ b/packages/db-states-redis/src/lib/states/statesInRedisClient.ts @@ -92,12 +92,12 @@ export class StateRedisClient { constructor(settings: StatesSettings) { this.settings = settings || {}; - this.namespaceRedis = (this.settings.redisNamespace || 'io') + '.'; + this.namespaceRedis = `${this.settings.redisNamespace || 'io'}.`; this.namespaceRedisL = this.namespaceRedis.length; - this.namespaceMsg = (this.settings.namespaceMsg || 'messagebox') + '.'; - this.namespaceLog = (this.settings.namespaceLog || 'log') + '.'; - this.namespaceSession = (this.settings.namespaceSession || 'session') + '.'; - this.metaNamespace = (this.settings.metaNamespace || 'meta') + '.'; + this.namespaceMsg = `${this.settings.namespaceMsg || 'messagebox'}.`; + this.namespaceLog = `${this.settings.namespaceLog || 'log'}.`; + this.namespaceSession = `${this.settings.namespaceSession || 'session'}.`; + this.metaNamespace = `${this.settings.metaNamespace || 'meta'}.`; this.globalMessageId = Math.round(Math.random() * 100_000_000); this.globalLogId = Math.round(Math.random() * 100_000_000); @@ -218,7 +218,7 @@ export class StateRedisClient { // initiate a unix socket connection this.settings.connection.options.path = this.settings.connection.host; this.log.debug( - `${this.namespace} Redis States: Use File Socket for connection: ${this.settings.connection.options.path}` + `${this.namespace} Redis States: Use File Socket for connection: ${this.settings.connection.options.path}`, ); } else if (Array.isArray(this.settings.connection.host)) { // Host is an array means we use a sentinel @@ -226,7 +226,7 @@ export class StateRedisClient { host: redisNode, port: Array.isArray(this.settings.connection.port) ? this.settings.connection.port[idx] - : this.settings.connection.port + : this.settings.connection.port, })); this.settings.connection.options.name = this.settings.connection.sentinelName ? this.settings.connection.sentinelName @@ -234,13 +234,13 @@ export class StateRedisClient { this.log.debug( `${this.namespace} Redis States: Use Sentinel for connection: ${ this.settings.connection.options.name - }, ${JSON.stringify(this.settings.connection.options.sentinels)}` + }, ${JSON.stringify(this.settings.connection.options.sentinels)}`, ); } else { this.settings.connection.options.host = this.settings.connection.host; this.settings.connection.options.port = this.settings.connection.port; this.log.debug( - `${this.namespace} Redis States: Use Redis connection: ${this.settings.connection.options.host}:${this.settings.connection.options.port}` + `${this.namespace} Redis States: Use Redis connection: ${this.settings.connection.options.host}:${this.settings.connection.options.port}`, ); } if (this.settings.connection.options.db === undefined) { @@ -260,7 +260,7 @@ export class StateRedisClient { this.client.on('error', error => { this.settings.connection.enhancedLogging && this.log.silly( - `${this.namespace} Redis ERROR States: (${this.stop}) ${error.message} / ${error.stack}` + `${this.namespace} Redis ERROR States: (${this.stop}) ${error.message} / ${error.stack}`, ); if (this.stop) { return; @@ -270,7 +270,7 @@ export class StateRedisClient { // Seems we have a socket.io server if (error.message.startsWith('Protocol error, got "H" as reply type byte.')) { this.log.error( - `${this.namespace} Could not connect to states database at ${this.settings.connection.options.host}:${this.settings.connection.options.port} (invalid protocol). Please make sure the configured IP and port points to a host running JS-Controller >= 2.0. and that the port is not occupied by other software!` + `${this.namespace} Could not connect to states database at ${this.settings.connection.options.host}:${this.settings.connection.options.port} (invalid protocol). Please make sure the configured IP and port points to a host running JS-Controller >= 2.0. and that the port is not occupied by other software!`, ); } return; @@ -309,12 +309,12 @@ export class StateRedisClient { } this.settings.connection.enhancedLogging && this.log.silly( - `${this.namespace} States-Redis Event reconnect (reconnectCounter=${reconnectCounter}, stop=${this.stop})` + `${this.namespace} States-Redis Event reconnect (reconnectCounter=${reconnectCounter}, stop=${this.stop})`, ); if (reconnectCounter > 2) { // fallback logic for nodejs <10 this.log.error( - `${this.namespace} The DB port ${this.settings.connection.options.port} is occupied by something that is not a Redis protocol server. Please check other software running on this port or, if you use iobroker, make sure to update to js-controller 2.0 or higher!` + `${this.namespace} The DB port ${this.settings.connection.options.port} is occupied by something that is not a Redis protocol server. Please check other software running on this port or, if you use iobroker, make sure to update to js-controller 2.0 or higher!`, ); return; } @@ -337,7 +337,7 @@ export class StateRedisClient { await this.client.config('SET', 'notify-keyspace-events', 'Exe'); // enable Expiry/Evicted events in server } catch (e) { this.log.warn( - `${this.namespace} Unable to enable Expiry Keyspace events from Redis Server: ${e.message}` + `${this.namespace} Unable to enable Expiry Keyspace events from Redis Server: ${e.message}`, ); } @@ -348,7 +348,7 @@ export class StateRedisClient { this.subSystem.on('pmessage', (pattern, channel, message) => { setImmediate(() => { this.log.silly( - `${this.namespace} States system redis pmessage ${pattern}/${channel}:${message}` + `${this.namespace} States system redis pmessage ${pattern}/${channel}:${message}`, ); if (channel.startsWith(this.metaNamespace)) { @@ -359,7 +359,7 @@ export class StateRedisClient { if (typeof this.settings.disconnected === 'function') { // protocol version has changed, restart controller this.log.info( - `${this.namespace} States protocol version has changed, disconnecting!` + `${this.namespace} States protocol version has changed, disconnecting!`, ); this.settings.disconnected(); } @@ -386,7 +386,7 @@ export class StateRedisClient { this.log.warn( `${this.namespace} States system pmessage ${channel} ${JSON.stringify(message)} ${ e.message - }` + }`, ); this.log.warn(`${this.namespace} ${e.stack}`); } @@ -401,7 +401,7 @@ export class StateRedisClient { try { if (channel === `__keyevent@${this.settings.connection.options.db}__:evicted`) { this.log.warn( - `${this.namespace} Redis has evicted state ${message}. Please check your maxMemory settings for your redis instance!` + `${this.namespace} Redis has evicted state ${message}. Please check your maxMemory settings for your redis instance!`, ); } else if (channel !== `__keyevent@${this.settings.connection.options.db}__:expired`) { this.log.warn(`${this.namespace} Unknown user message ${channel} ${message}`); @@ -410,14 +410,14 @@ export class StateRedisClient { if (typeof onChange === 'function') { // Find deleted states and notify user const found = Object.values(this.systemSubscriptions).find( - regex => regex !== true && regex.test(message) + regex => regex !== true && regex.test(message), ); found && onChange(message.substring(this.namespaceRedisL), null); } if (typeof onChangeUser === 'function' && this.sub) { // Find deleted states and notify user const found = Object.values(this.userSubscriptions).find(regex => - regex.test(message) + regex.test(message), ); found && onChangeUser(message.substring(this.namespaceRedisL), null); } @@ -425,7 +425,7 @@ export class StateRedisClient { this.log.warn(`${this.namespace} user message ${channel} ${message} ${e.message}`); this.log.warn(`${this.namespace} ${e.stack}`); } - }) + }), ); } this.subSystem.on('end', () => { @@ -440,27 +440,27 @@ export class StateRedisClient { } this.settings.connection.enhancedLogging && this.log.silly( - `${this.namespace} Sub-Client States System No redis connection: ${JSON.stringify(error)}` + `${this.namespace} Sub-Client States System No redis connection: ${JSON.stringify(error)}`, ); }); if (this.settings.connection.enhancedLogging) { this.subSystem.on('connect', () => this.log.silly( - `${this.namespace} PubSub client States-Redis System Event connect (stop=${this.stop})` - ) + `${this.namespace} PubSub client States-Redis System Event connect (stop=${this.stop})`, + ), ); this.subSystem.on('close', () => this.log.silly( - `${this.namespace} PubSub client States-Redis System Event close (stop=${this.stop})` - ) + `${this.namespace} PubSub client States-Redis System Event close (stop=${this.stop})`, + ), ); this.subSystem.on('reconnecting', reconnectCounter => this.log.silly( - `${this.namespace} PubSub client States-Redis System Event reconnect (reconnectCounter=${reconnectCounter}, stop=${this.stop})` - ) + `${this.namespace} PubSub client States-Redis System Event reconnect (reconnectCounter=${reconnectCounter}, stop=${this.stop})`, + ), ); } @@ -468,22 +468,22 @@ export class StateRedisClient { try { this.subSystem && (await this.subSystem.subscribe( - `__keyevent@${this.settings.connection.options.db}__:expired` + `__keyevent@${this.settings.connection.options.db}__:expired`, )); } catch (e) { this.log.warn( - `${this.namespace} Unable to subscribe to expiry Keyspace events from Redis Server: ${e.message}` + `${this.namespace} Unable to subscribe to expiry Keyspace events from Redis Server: ${e.message}`, ); } try { this.subSystem && (await this.subSystem.subscribe( - `__keyevent@${this.settings.connection.options.db}__:evicted` + `__keyevent@${this.settings.connection.options.db}__:evicted`, )); } catch (e) { this.log.warn( - `${this.namespace} Unable to subscribe to evicted Keyspace events from Redis Server: ${e.message}` + `${this.namespace} Unable to subscribe to evicted Keyspace events from Redis Server: ${e.message}`, ); } @@ -492,7 +492,7 @@ export class StateRedisClient { this.subSystem && (await this.subSystem.psubscribe(`${this.metaNamespace}*`)); } catch (e) { this.log.warn( - `${this.namespace} Unable to subscribe to meta namespace "${this.metaNamespace}" changes: ${e.message}` + `${this.namespace} Unable to subscribe to meta namespace "${this.metaNamespace}" changes: ${e.message}`, ); } @@ -501,15 +501,15 @@ export class StateRedisClient { this.log.debug( `${this.namespace} States ${ ready ? 'system re' : '' - }connected to redis: ${tools.maybeArrayToString(this.settings.connection.host)}` + }connected to redis: ${tools.maybeArrayToString(this.settings.connection.host)}`, ); } else { this.log.debug( `${this.namespace} States ${ ready ? 'system re' : '' }connected to redis: ${tools.maybeArrayToString( - this.settings.connection.host - )}:${tools.maybeArrayToString(this.settings.connection.port)}` + this.settings.connection.host, + )}:${tools.maybeArrayToString(this.settings.connection.port)}`, ); } !ready && typeof this.settings.connected === 'function' && this.settings.connected(); @@ -557,7 +557,7 @@ export class StateRedisClient { this.log.warn( `${this.namespace} States user pmessage ${channel} ${JSON.stringify(message)} ${ e.message - }` + }`, ); this.log.warn(`${this.namespace} ${e.stack}`); } @@ -578,7 +578,7 @@ export class StateRedisClient { } if (this.settings.connection.enhancedLogging) { this.log.silly( - `${this.namespace} Sub-Client States User No redis connection: ${JSON.stringify(error)}` + `${this.namespace} Sub-Client States User No redis connection: ${JSON.stringify(error)}`, ); } }); @@ -586,19 +586,19 @@ export class StateRedisClient { if (this.settings.connection.enhancedLogging) { this.sub.on('connect', () => { this.log.silly( - `${this.namespace} PubSub client States-Redis User Event connect (stop=${this.stop})` + `${this.namespace} PubSub client States-Redis User Event connect (stop=${this.stop})`, ); }); this.sub.on('close', () => { this.log.silly( - `${this.namespace} PubSub client States-Redis User Event close (stop=${this.stop})` + `${this.namespace} PubSub client States-Redis User Event close (stop=${this.stop})`, ); }); this.sub.on('reconnecting', reconnectCounter => { this.log.silly( - `${this.namespace} PubSub client States-Redis User Event reconnect (reconnectCounter=${reconnectCounter}, stop=${this.stop})` + `${this.namespace} PubSub client States-Redis User Event reconnect (reconnectCounter=${reconnectCounter}, stop=${this.stop})`, ); }); } @@ -614,15 +614,15 @@ export class StateRedisClient { this.log.debug( `${this.namespace} States ${ ready ? 'user re' : '' - }connected to redis: ${tools.maybeArrayToString(this.settings.connection.host)}` + }connected to redis: ${tools.maybeArrayToString(this.settings.connection.host)}`, ); } else { this.log.debug( `${this.namespace} States ${ ready ? 'user re' : '' }connected to redis: ${tools.maybeArrayToString( - this.settings.connection.host - )}:${tools.maybeArrayToString(this.settings.connection.port)}` + this.settings.connection.host, + )}:${tools.maybeArrayToString(this.settings.connection.port)}`, ); } !ready && typeof this.settings.connected === 'function' && this.settings.connected(); @@ -651,15 +651,15 @@ export class StateRedisClient { this.log.debug( `${this.namespace} States ${ ready ? 'client re' : '' - }connected to redis: ${tools.maybeArrayToString(this.settings.connection.host)}` + }connected to redis: ${tools.maybeArrayToString(this.settings.connection.host)}`, ); } else { this.log.debug( `${this.namespace} States ${ ready ? 'client re' : '' }connected to redis: ${tools.maybeArrayToString( - this.settings.connection.host - )}:${tools.maybeArrayToString(this.settings.connection.port)}` + this.settings.connection.host, + )}:${tools.maybeArrayToString(this.settings.connection.port)}`, ); } !ready && typeof this.settings.connected === 'function' && this.settings.connected(); @@ -678,7 +678,7 @@ export class StateRedisClient { setState( id: string, state: ioBroker.SettableState | ioBroker.StateValue, - callback: (err: Error | null | undefined, id: string) => void + callback: (err: Error | null | undefined, id: string) => void, ): Promise; /** @@ -708,7 +708,7 @@ export class StateRedisClient { async setState( id: string, state: ioBroker.SettableState | ioBroker.StateValue, - callback?: (err: Error | null | undefined, id: string) => void + callback?: (err: Error | null | undefined, id: string) => void, ): Promise { if (!id || typeof id !== 'string') { return tools.maybeCallbackWithError(callback, `invalid id ${JSON.stringify(id)}`); @@ -720,7 +720,7 @@ export class StateRedisClient { if (!tools.isObject(state)) { state = { - val: state + val: state, }; } @@ -867,7 +867,7 @@ export class StateRedisClient { getState(id: string): ioBroker.GetStatePromise; getState( id: string, - callback?: (err: Error | null | undefined, state?: ioBroker.State | null) => void + callback?: (err: Error | null | undefined, state?: ioBroker.State | null) => void, ): Promise | void>; /** @@ -878,7 +878,7 @@ export class StateRedisClient { */ async getState( id: string, - callback?: (err: Error | null | undefined, state?: ioBroker.State | null) => void + callback?: (err: Error | null | undefined, state?: ioBroker.State | null) => void, ): Promise | void> { if (!id || typeof id !== 'string') { return tools.maybeCallbackWithError(callback, `invalid id ${JSON.stringify(id)}`); @@ -921,18 +921,18 @@ export class StateRedisClient { getStates( keys: string[], callback: (err: Error | undefined | null, states?: (ioBroker.State | null)[]) => void, - dontModify?: boolean + dontModify?: boolean, ): Promise; getStates( keys: string[], callback: (err: Error | undefined | null, states?: (ioBroker.State | null)[]) => void, - dontModify?: boolean + dontModify?: boolean, ): Promise; async getStates( keys: string[], callback?: (err: Error | undefined | null, states?: (ioBroker.State | null)[]) => void, - dontModify?: boolean + dontModify?: boolean, ): Promise<(ioBroker.State | null)[] | void> { if (!keys || !Array.isArray(keys)) { return tools.maybeCallbackWithError(callback, 'no keys'); @@ -966,7 +966,7 @@ export class StateRedisClient { result.push(state ? JSON.parse(state) : null); } catch (e) { this.log.error( - `Parsing error on getStates("${_keys[i]}"), returning "null" for "${state}": ${e.message}` + `Parsing error on getStates("${_keys[i]}"), returning "null" for "${state}": ${e.message}`, ); result.push(null); } @@ -982,21 +982,20 @@ export class StateRedisClient { async _destroyDBHelper(keys: string[], callback?: ioBroker.ErrorCallback): Promise { if (!keys || !keys.length) { return tools.maybeCallback(callback); - } else { - if (!this.client) { - return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); - } + } + if (!this.client) { + return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); + } - for (const id of keys) { - try { - await this.client.del(id); - } catch { - // ignore - } + for (const id of keys) { + try { + await this.client.del(id); + } catch { + // ignore } - - return tools.maybeCallback(callback); } + + return tools.maybeCallback(callback); } /** @@ -1005,15 +1004,14 @@ export class StateRedisClient { async destroyDB(callback?: ioBroker.ErrorCallback): Promise { if (!this.client) { return tools.maybeCallbackWithError(callback, tools.ERRORS.ERROR_DB_CLOSED); - } else { - let keys; - try { - keys = await this.client.keys(`${this.namespaceRedis}*`); - } catch { - //ignore - } - return this._destroyDBHelper(keys || [], callback); } + let keys; + try { + keys = await this.client.keys(`${this.namespaceRedis}*`); + } catch { + //ignore + } + return this._destroyDBHelper(keys || [], callback); } // Destructor of the class. Called by shutting down. @@ -1050,7 +1048,7 @@ export class StateRedisClient { async delState( id: string, - callback?: ioBroker.DeleteStateCallback + callback?: ioBroker.DeleteStateCallback, ): Promise | void> { if (!id || typeof id !== 'string') { return tools.maybeCallbackWithError(callback, `invalid id ${JSON.stringify(id)}`); @@ -1074,14 +1072,14 @@ export class StateRedisClient { getKeys( pattern: string, callback?: undefined, - dontModify?: boolean + dontModify?: boolean, ): Promise>; getKeys(pattern: string, callback: ioBroker.GetKeysCallback, dontModify?: boolean): Promise; async getKeys( pattern: string, callback?: ioBroker.GetKeysCallback, - dontModify?: boolean + dontModify?: boolean, ): Promise | void> { if (!pattern || typeof pattern !== 'string') { return tools.maybeCallbackWithError(callback, `invalid pattern ${JSON.stringify(pattern)}`); @@ -1117,7 +1115,7 @@ export class StateRedisClient { async subscribe( pattern: string, asUser?: boolean | ioBroker.ErrorCallback, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): Promise { if (!pattern || typeof pattern !== 'string') { return tools.maybeCallbackWithError(callback, `invalid pattern ${JSON.stringify(pattern)}`); @@ -1139,11 +1137,11 @@ export class StateRedisClient { await subClient.psubscribe(this.namespaceRedis + pattern); if (asUser) { this.userSubscriptions[this.namespaceRedis + pattern] = new RegExp( - tools.pattern2RegEx(this.namespaceRedis + pattern) + tools.pattern2RegEx(this.namespaceRedis + pattern), ); } else { this.systemSubscriptions[this.namespaceRedis + pattern] = new RegExp( - tools.pattern2RegEx(this.namespaceRedis + pattern) + tools.pattern2RegEx(this.namespaceRedis + pattern), ); } return tools.maybeCallback(callback); @@ -1172,7 +1170,7 @@ export class StateRedisClient { async unsubscribe( pattern: string, asUser?: boolean | ioBroker.ErrorCallback, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): Promise { if (!pattern || typeof pattern !== 'string') { return tools.maybeCallbackWithError(callback, `invalid pattern ${JSON.stringify(pattern)}`); @@ -1284,14 +1282,14 @@ export class StateRedisClient { async pushLog( id: string, log: LogObject, - callback?: (err: Error | undefined | null, id?: string) => void + callback?: (err: Error | undefined | null, id?: string) => void, ): Promise; // implementation uses an modified pushLog with internal _id async pushLog( id: string, log: InternalLogObject, - callback?: (err: Error | undefined | null, id?: string) => void + callback?: (err: Error | undefined | null, id?: string) => void, ): Promise { if (!id || typeof id !== 'string') { return tools.maybeCallbackWithError(callback, `invalid id ${JSON.stringify(id)}`); @@ -1357,7 +1355,7 @@ export class StateRedisClient { // TODO: types session obj async getSession( id: string, - callback: (err: Error | undefined | null, session?: Record | null) => void + callback: (err: Error | undefined | null, session?: Record | null) => void, ): Promise | null | void> { if (!id || typeof id !== 'string') { return tools.maybeCallbackWithError(callback, `invalid id ${JSON.stringify(id)}`); @@ -1389,7 +1387,7 @@ export class StateRedisClient { id: string, expireS: number, obj: Record, - callback?: ioBroker.ErrorCallback + callback?: ioBroker.ErrorCallback, ): Promise { if (!id || typeof id !== 'string') { return tools.maybeCallbackWithError(callback, `invalid id ${JSON.stringify(id)}`); diff --git a/packages/types-dev/index.d.ts b/packages/types-dev/index.d.ts index 146a673abb..6504b6779b 100644 --- a/packages/types-dev/index.d.ts +++ b/packages/types-dev/index.d.ts @@ -330,6 +330,7 @@ declare global { [adapterNameOrAdapterType: string]: unknown; } + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface AdapterConfig { // This is a stub to be augmented in every adapter } @@ -357,7 +358,7 @@ declare global { type GetObjectCallback = ( err?: Error | null, - obj?: ObjectIdToObjectType | null + obj?: ObjectIdToObjectType | null, ) => void; type GetObjectPromise = Promise>>; @@ -366,7 +367,7 @@ declare global { err?: Error | null, result?: { [groupName: string]: Record; - } + }, ) => void; type GetEnumsPromise = Promise>; @@ -375,7 +376,7 @@ declare global { type GetObjectsCallbackTyped = ( err?: Error | null, - objects?: Record + objects?: Record, ) => void; type GetObjectsPromiseTyped = Promise< NonNullCallbackReturnTypeOf> @@ -387,7 +388,7 @@ declare global { /** If an object was found, this contains the ID */ id?: string, /** If an object was found, this contains the common.name */ - name?: StringOrTranslated + name?: StringOrTranslated, ) => void; // This is a version used by GetDevices/GetChannelsOf/GetStatesOf @@ -427,7 +428,7 @@ declare global { err: Error | null, result?: GetHistoryResult, step?: number, - sessionId?: string + sessionId?: string, ) => void; /** Contains the return values of readDir */ @@ -491,7 +492,7 @@ declare global { } type GetObjectViewCallback = ( err?: Error | null, - result?: { rows: Array> } + result?: { rows: Array> }, ) => void; type GetObjectViewPromise = Promise>>; @@ -503,14 +504,14 @@ declare global { } type GetObjectListCallback = ( err?: Error | null, - result?: { rows: GetObjectListItem[] } + result?: { rows: GetObjectListItem[] }, ) => void; type GetObjectListPromise = Promise>>; type ExtendObjectCallback = ( err?: Error | null, result?: { id: string; value: ioBroker.Object }, - id?: string + id?: string, ) => void; type GetSessionCallback = (session: Session) => void; diff --git a/packages/types-dev/objects.d.ts b/packages/types-dev/objects.d.ts index 78366024ed..df7f0c7e64 100644 --- a/packages/types-dev/objects.d.ts +++ b/packages/types-dev/objects.d.ts @@ -1074,7 +1074,7 @@ declare global { | 'packageUpdates' | 'systemRebootRequired' | 'diskSpaceIssues' - | string; + | (string & {}); /** The human-readable category name */ name: Translated; /** The human-readable category description */ diff --git a/packages/types-public/build.ts b/packages/types-public/build.ts index 66828bc923..033d4cb6c8 100644 --- a/packages/types-public/build.ts +++ b/packages/types-public/build.ts @@ -15,7 +15,7 @@ const extractorResult: ExtractorResult = Extractor.invoke(extractorConfig, { localBuild: true, // Equivalent to the "--verbose" command-line parameter - showVerboseMessages: true + showVerboseMessages: true, }); if (extractorResult.succeeded) { @@ -46,7 +46,7 @@ if (extractorResult.succeeded) { } else { console.error( `API Extractor completed with ${extractorResult.errorCount} errors` + - ` and ${extractorResult.warningCount} warnings` + ` and ${extractorResult.warningCount} warnings`, ); process.exit(1); } diff --git a/packages/types-public/index.test-d.ts b/packages/types-public/index.test-d.ts index 99278a3082..5a4f3e7f5c 100644 --- a/packages/types-public/index.test-d.ts +++ b/packages/types-public/index.test-d.ts @@ -31,7 +31,7 @@ const adapterOptions: ioBroker.AdapterOptions = { error: err => { console.log(err); return true; - } + }, }; function readyHandler(): void {} @@ -130,7 +130,7 @@ function messageHandler(msg: ioBroker.Message): void { } function unloadHandler(callback: ioBroker.EmptyCallback): void { - adapter.log!.info('shutting down'); + adapter.log.info('shutting down'); callback(); } @@ -239,12 +239,12 @@ adapter.setObject('id', { write: false, role: 'some role', def: [], - defAck: false + defAck: false, }, native: {}, from: 'me', user: 'also me', - ts: Date.now() + ts: Date.now(), }); adapter.setObject( @@ -257,14 +257,14 @@ adapter.setObject( name: 'foo', read: true, write: false, - role: 'some role' + role: 'some role', }, native: {}, protectedNative: ['none'], encryptedNative: ['none'], from: 'me', - ts: Date.now() - } + ts: Date.now(), + }, ); adapter.setObject( @@ -275,8 +275,8 @@ adapter.setObject( type: 'state', native: {}, from: 'me', - ts: Date.now() - } + ts: Date.now(), + }, ); adapter.setObject( @@ -288,10 +288,10 @@ adapter.setObject( common: { name: 'foo', read: true, - write: false + write: false, }, - native: {} - } + native: {}, + }, ); // TODO: Cannot enforce this without making it impossible to use interfaces to describe the shape of `native` @@ -312,9 +312,9 @@ adapter.extendForeignObject('id', { common: { name: { en: 'foobar', - fr: 'le foo de bar' - } - } + fr: 'le foo de bar', + }, + }, }); // Check that `preserve` is typed correctly @@ -324,22 +324,22 @@ adapter.extendObject( { preserve: { common: ['name'] }, // And that undocumented options are allowed - undocumented: true - } + undocumented: true, + }, ); adapter.extendObject( 'id', {}, { - preserve: { common: { name: true } } - } + preserve: { common: { name: true } }, + }, ); adapter.extendForeignObject( 'id', {}, { - preserve: { common: { name: { en: true } } } - } + preserve: { common: { name: { en: true } } }, + }, ); // Make sure the return type of getObjectView is inferred correctly @@ -415,13 +415,13 @@ adapter.unsubscribeForeignStates('*'); adapter.encrypt('top secret').toLocaleLowerCase(); adapter.decrypt('garbled nonsense').toLocaleLowerCase(); -adapter.log!.info('msg'); -adapter.log!.debug('msg'); -adapter.log!.warn('msg'); -adapter.log!.error('msg'); -adapter.log!.silly('msg'); +adapter.log.info('msg'); +adapter.log.debug('msg'); +adapter.log.warn('msg'); +adapter.log.error('msg'); +adapter.log.silly('msg'); -switch (adapter.log!.level) { +switch (adapter.log.level) { case 'debug': case 'error': case 'info': @@ -429,7 +429,7 @@ switch (adapter.log!.level) { case 'warn': break; default: - assertNever(adapter.log!.level as never); + assertNever(adapter.log.level); } adapter.sendTo('foo.0', 'command', 'message'); @@ -537,9 +537,9 @@ function _repro2(): void { const obj = { common: { custom: { - 'adapter.namespace': { start_day: null as any } - } - } + 'adapter.namespace': { start_day: null as any }, + }, + }, }; adapter.extendForeignObject('obj.id', obj, _err => {}); @@ -582,9 +582,9 @@ const _folderObj: ioBroker.FolderObject = { common: { name: 'something', // any property is allowed - foo: 'bar' + foo: 'bar', }, - native: {} + native: {}, }; // This used to be an error: https://github.com/ioBroker/ioBroker.js-controller/issues/782 @@ -676,7 +676,7 @@ adapter obj => obj && obj.type === 'state' && - (typeof obj.common.alias?.id === 'string' || typeof obj.common.alias?.id.read === 'string') + (typeof obj.common.alias?.id === 'string' || typeof obj.common.alias?.id.read === 'string'), ); adapter.getObjectAsync('id').then(obj => { @@ -768,9 +768,9 @@ adapter.FORBIDDEN_CHARS = /_/; write: false, type: 'boolean', role: 'indicator', - color: 'yellow' + color: 'yellow', }, - native: config + native: config, }); } @@ -792,11 +792,11 @@ const _adapterObject: ioBroker.AdapterObject = { link1: '%web_protocol%://%ip%:%web_port%/vis-2/edit.html', link2: { name: { en: 'Service' }, - link: '%web_protocol%://%ip%:%web_port%/vis-2/edit.html' - } + link: '%web_protocol%://%ip%:%web_port%/vis-2/edit.html', + }, }, supportedMessages: { - deviceManager: true + deviceManager: true, }, titleLang: { de: 'foo', @@ -809,18 +809,18 @@ const _adapterObject: ioBroker.AdapterObject = { ru: 'foo', en: 'foo', uk: 'foo', - 'zh-cn': 'foo' + 'zh-cn': 'foo', }, version: '1.2.3', blockedVersions: ['~3.14.0', '4.0.1'], plugins: { sentry: { - dsn: 'XYZ' - } - } + dsn: 'XYZ', + }, + }, }, instanceObjects: [], - objects: [] + objects: [], }; if (_adapterObject.common.licenseInformation && _adapterObject.common.licenseInformation.type === 'paid') { @@ -835,21 +835,21 @@ const _folderObject: ioBroker.FolderObject = { _id: '', type: 'folder', common: { name: 'My Folder' }, - native: {} + native: {}, }; const _enumObject: ioBroker.EnumObject = { _id: '', type: 'enum', common: { name: 'My Enum', members: [] }, - native: {} + native: {}, }; const _metaObject: ioBroker.MetaObject = { _id: '', type: 'meta', common: { type: 'meta.folder', name: 'foobar' }, - native: {} + native: {}, }; const _deviceObject: ioBroker.DeviceObject = { @@ -860,10 +860,10 @@ const _deviceObject: ioBroker.DeviceObject = { statusStates: { offlineId: 'device.isOffline', onlineId: 'device.isOnline', - errorId: 'device.isError' - } + errorId: 'device.isError', + }, }, - native: {} + native: {}, }; const _instanceObject: ioBroker.InstanceObject = { @@ -877,18 +877,18 @@ const _instanceObject: ioBroker.InstanceObject = { version: '1.0.0', platform: 'Javascript/Node.js', materialize: true, - installedVersion: '1.0.0' + installedVersion: '1.0.0', }, native: {}, instanceObjects: [], - objects: [] + objects: [], }; const _userObject: ioBroker.UserObject = { _id: 'system.user.me', type: 'user', common: { name: 'me', password: '*****', enabled: true }, - native: {} + native: {}, }; // Ensure that getForeignObject tries to resolve a specific object type @@ -912,7 +912,7 @@ async () => { chnl = await adapter.getForeignObjectAsync('admin.777.info'); const state: ioBroker.StateObject | null | undefined = await adapter.getForeignObjectAsync( - 'system.adapter.admin.0.foobar' + 'system.adapter.admin.0.foobar', ); let scrChnl: ioBroker.ChannelObject | ioBroker.ScriptObject | null | undefined; @@ -964,15 +964,15 @@ async () => { () => { adapter.setForeignObject('system.host.my-hostname', { // @ts-expect-error - type: 'not-host' + type: 'not-host', }); adapter.setForeignObject('admin.0.maybe-channel', { type: 'channel', common: { - name: 'A channel' + name: 'A channel', }, - native: {} + native: {}, }); adapter.setForeignObject(null! as string, null! as ioBroker.Object); @@ -989,9 +989,9 @@ async () => { role: 'value', read: true, write: false, - unit: '%' + unit: '%', }, - native: {} + native: {}, }; } { @@ -999,9 +999,9 @@ async () => { // @ts-expect-error type: 'state', common: { - name: 'Dummy name' + name: 'Dummy name', }, - native: {} + native: {}, }; } diff --git a/packages/types-public/package.json b/packages/types-public/package.json index 9a620ea975..6defdc7fc4 100644 --- a/packages/types-public/package.json +++ b/packages/types-public/package.json @@ -15,9 +15,6 @@ "type": "git", "url": "https://github.com/ioBroker/ioBroker.js-controller/tree/master/packages/types-public" }, - "devDependencies": { - "tsd": "^0.24.1" - }, "scripts": { "build": "ts-node build.ts", "test": "tsd" @@ -28,6 +25,9 @@ "publishConfig": { "access": "public" }, + "devDependencies": { + "tsd": "^0.31.2" + }, "files": [ "build/", "index.d.ts", diff --git a/prettier.config.mjs b/prettier.config.mjs new file mode 100644 index 0000000000..2f0070819d --- /dev/null +++ b/prettier.config.mjs @@ -0,0 +1,3 @@ +import prettierConfig from '@iobroker/eslint-config/prettier.config.mjs'; + +export default prettierConfig; diff --git a/schemas/updateSchemas.ts b/schemas/updateSchemas.ts index 148d628154..b820755822 100644 --- a/schemas/updateSchemas.ts +++ b/schemas/updateSchemas.ts @@ -15,7 +15,7 @@ function updateIobJSON(): void { tsconfig: path.join(thisDir, '..', 'tsconfig.json'), type: 'IoBJson', skipTypeCheck: true, - additionalProperties: false + additionalProperties: false, }; const schema = tjs.createGenerator(config).createSchema(config.type); diff --git a/tsconfig.json b/tsconfig.json index 9f0f864bcb..443548254e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,6 +21,7 @@ "pretty": true }, "include": [ + "*.config.mjs", "packages/**/*.js", "packages/**/*.ts", "packages/controller/io-package.json",